有没有一种惯用的.net方法来实现“培训卡帮助”?
问题描述:
我们有一个VB6应用程序,它已经为HTML帮助文件中的WM_TCARD消息实现了一个处理程序。 它在应用程序内导航并打开相关屏幕等。有没有一种惯用的.net方法来实现“培训卡帮助”?
在WinForms应用程序中如何做到这一点?
我可以立即看到的唯一方法是处理窗口过程,并以与我们为VB6应用程序完全相同的方式处理WM_TCARD消息。
是否有更多.net的方式来做到这一点?
答
你必须自己处理消息。但是,制作一个能够为你做到这一点的课程非常容易。例如: -
public class HelpCards : IMessageFilter {
const int WM_TCARD = 0x52;
const int ID_NOTIFICATION = 4242;
public enum TCardAction: int {
IDOK = 1,
IDCANCEL = 2,
IDABORT = 3,
IDRETRY = 4,
IDIGNORE = 5,
IDYES = 6,
IDNO = 7,
IDCLOSE = 8,
IDHELP = 9,
HELP_TCARD = 0x8000,
HELP_TCARD_DATA = 0x0010,
HELP_TCARD_OTHER_CALLER = 0x0011,
HELP_TCARD_OTHER_NEXT = 0x0011,
}
public HelpCards() {
Application.AddMessageFilter(this);
}
public delegate void OKReceived();
public event OKReceived OnOKReceived;
public bool PreFilterMessage(ref Message m) {
if (m.Msg == WM_TCARD && (int)m.WParam == ID_NOTIFICATION) {
switch ((TCardAction)m.LParam) {
case TCardAction.IDOK:
if (OnOKReceived != null) {
OnOKReceived();
}
break;
// etc.
}
return true; // true means message was handled
}
return false;
}
}
而且,在你想订阅(可能在你的表格的地方)的地方使用
hc = new HelpCards();
hc.OnOKReceived += new OKReceived(hc_OnOKReceived);
而且具有形式的类定义定义hc
。像这样
HelpCards hc;
而且有地方处理功能:
void hc_OnOKReceived() {
throw new NotImplementedException();
}
显然,你需要自己做休息。但是这应该让你开始。
谢谢。我认为会是这种情况,但希望我错过了HelpProvider的一些诡计或者意味着我不需要处理消息 – 2010-07-22 03:43:48
哦,并且您可能希望在类处理时移除消息过滤器。你可能想使用EventHandler,而不是void()作为事件委托。 – 2010-07-22 04:21:36