ビットマップを使用してプッシュボタンタイプ効果を実現する方法

StackOverflow https://stackoverflow.com/questions/3581619

  •  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_KEYDOWNWM_KEYUP メッセージ。ハンドラーでは、実際のボタンインスタンスのキーのマッピングを使用します。次に、送信します BM_SETSTATE ボタンコントロールに。

次に、処理します WM_COMMAND 各ボタンからのメッセージとをチェックしてください BN_CLICKED コード。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top