0

ユーザーが検索情報を入力できるポップアップウィンドウ(プレーンオールWin32、WS_POPUPスタイルを使用)を表示するC ++ATLCOMコンポーネントがあります。このコンポーネントは、VB6フォーム(主にデバッグを容易にするため)に対してかなり広範囲にテストされていますが、.NETWinフォームで使用したいと考えています。

winforms環境からコンポーネントを呼び出すときに見つけた奇妙なことは、特定のキーストロークがポップアップウィンドウに到達しなくなったことです。例:ESCキーをリッスンしてポップアップを閉じるために、ポップアップの編集ボックスをサブクラス化しました。VB6ではこれはうまく機能しますが、winformsでは、ポップアップがESCのキーダウンイベントを受信することはありません(標準の英数字などの他のキーの場合は受信します)。

コンポーネントの使用は非常に簡単ですが、質問を回避するためにここに簡単なサンプルを示します。

public partial class Form1 : Form
{
    CustomPopup panel;

    public Form1()
    {    
        panel = new CustomPopup(); //This is the COM object
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Point p = this.PointToScreen(button1.Location);
        // Display the popup, which gives focus to a child WC_EDIT field
        panel.ShowPopupAt(p.X, p.Y);
    }
}

ご覧のとおり、それほど多くはありません。では、winformsでキーストロークを食いつぶしているものと、それを停止するように指示する方法についてのアイデアはありますか?

4

1 に答える 1

0

WND メッセージの Windows フォーム処理を抑制してみてください (メッセージを盗むコントロール/フォーム内)。

protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_LBUTTONDOWN || m.Msg == WM_LBUTTONUP || m.Msg == WM_LBUTTONDBLCLK
       )
    {
        return;
    }
    base.WndProc(ref m);
}
于 2010-10-21T17:10:58.407 に答える