HTML ヘルプ ファイルからの WM_TCARD メッセージのハンドラーを実装した VB6 アプリがあります。アプリケーション内をナビゲートし、関連する画面などを開きます。
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();
}
明らかに、残りは自分で行う必要があります。しかし、それで始められるはずです。