ビットマップを使用してプッシュボタンタイプ効果を実現する方法
-
01-10-2019 - |
質問
こんにちは、ビットマップ有効なダイアログウィンドウの使用に関連する問題があります。キーボードタイプのレイアウトを作成しました。キーボードから入力を取得したいと思います。マウスを使用すると、ボタンを取得できます。押され、すべてのボタンも正常に動作しています - 他の画像 DEFAULT,SELECTED,DISABLED
..ここで機能を使用しているので、すべてがロードされて動作します m_BtnBtn1Ctrl.LoadBitmaps
、しかし、キーボードで押されたキーと画面上の対応する文字は、マウスをクリックする(そして使用して)できるのと同じことをすることができません。 Loadbitmaps()
働き )。
私はこれらの3つの機能を使用して、マウスを使用したものと同じアクションと効果を実現しています
loadbitmap()
setBitMap()
Invalidate()
このコードも試しました
HBITMAP hbm = (HBITMAP)LoadImage(NULL, "\\res\\Selected\\bitmap21.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
と
bitmap.Attach((HBITMAP)LoadImage(NULL, "\\res\\Selected\\bitmap21.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION));
しかし、これらは内部的には動作しますが、押されたボタン効果を与えていないようです。
Sayoneeに感謝します
崩壊
BOOL KeyBoard_press::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
CString strTemp;
if (pMsg->message == WM_KEYDOWN)
{
if ( pMsg->wParam == 0x41 || pMsg->wParam == 0x61) //check for both 'a' and 'A'
OnBtnBtn1();
if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_DELETE ||
pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_TAB ||
pMsg->wParam == VK_UP || pMsg->wParam == VK_DOWN || GetKeyState (VK_CONTROL))
{
::TranslateMessage (pMsg);
::DispatchMessage (pMsg);
return TRUE; // DO NOT process further
}
}
return CDialog::PreTranslateMessage(pMsg);
}
解決
私の知る限り、コンピューターのキーボードレイアウトをシミュレートする一連のボタンがあります。ユーザーがキーボードのキーを押すと、ダイアログボックスの[ボタン]をシミュレートする必要があります。各ボタンの各状態にビットマップを提供しました。
これを行うために、私は処理します WM_KEYDOWN
と WM_KEYUP
メッセージ。ハンドラーでは、実際のボタンインスタンスのキーのマッピングを使用します。次に、送信します BM_SETSTATE
ボタンコントロールに。
次に、処理します WM_COMMAND
各ボタンからのメッセージとをチェックしてください BN_CLICKED
コード。