0

WM_KEYDOWN messageどういうわけか、私は入ったときに何かをする必要があるPreTranslateMessageので、私は次のようなことをします:

if(WM_KEYDOWN == pMsg->message && pMsg->hwnd == GetSafeHwnd())
{      
     SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
     return TRUE;       
}

そうした後、私は機能する方法がないことに気づきましたOnChar、それは悪いです。誰もがこの問題を解決する理由と方法を知っていますか?助けていただければ幸いです。

4

3 に答える 3

1

PreTranslateMessage()からTRUEを返すと、メッセージはそれ以上処理されません。これはキーストロークごとに行うため、処理されるものはなく、WM_CHARメッセージを生成することもできません。言い換えれば、あなたはあなたが求めるものを手に入れました。また、自分にメッセージを送信しているようです。代替案を提案するのは難しいですが、コードは意味がありません。

于 2012-07-31T08:26:04.490 に答える
0

なぜあなたはあなた自身に同じメッセージを送るのですか?処理を実行して、「if」ステートメントで実行する必要があるすべてのメッセージを通過させるだけの場合は、処理を実行して通常のメッセージチェーンを機能させます。このようにして、メッセージはさらに処理するためにディスパッチされ、最終的にonCharに到達します。

したがって、コードは次のようになります。

void YourWnd::PreTranslateMessage(MSG *pMsg)
{
    if(WM_KEYDOWN == pMsg->message && pMsg->hwnd == GetSafeHwnd())
    {      
         processKeyDown();      
    }
    return CWnd::PreTranslateMessage(pMsg);
}
于 2012-08-01T10:42:51.847 に答える
0

なぜPreTranslateMessage?PreTranslateMessageでそれを行う必要があると考えられる理由は何ですか?

名前としてのPreTranslateMessageは、ホット/ショートカットキーを含むpretlanslateメッセージを示唆しています。ある種の包帯としてそれを使用することは、遅かれ早かれ災害に非常に頻繁につながります。

何を達成しようとしているのか教えてください。誰かがより良い解決策を思い付くことができるでしょう。

于 2012-08-01T12:46:23.137 に答える