是否有一种惯用的.net方式来实施“培训卡帮助”?

时间:2010-07-22 02:27:35

标签: .net winforms chm

我们有一个VB6应用程序,它已经从HTML帮助文件中实现了WM_TCARD消息的处理程序。 它在应用程序中导航并打开相关屏幕等。

如何在WinForms应用程序中执行此操作?

我能立即看到的唯一方法是处理窗口过程并处理WM_TCARD消息,其方式与我们为VB6应用程序完全相同。

是否有更多的.net方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

您必须自己处理这些消息。但是,创建一个为您完成此任务的课程非常容易。 E.g:

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();
}

显然你需要自己做其余的事情。但这应该让你开始。