您好,我有一个与使用启用位图的对话框窗口有关的问题。我创建了一个键盘类型的布局,我也希望通过键盘获取输入。当我使用鼠标时,我能够获取按钮(S)按下,所有按钮都可以正常工作 - 其他图像 DEFAULT,SELECTED,DISABLED ..大家都可以加载并工作,因为我在此处使用该功能 m_BtnBtn1Ctrl.LoadBitmaps ,但是随后按键盘上按下的任何键,屏幕上的相应字符都无法执行与我单击鼠标(并使用鼠标)相同的操作(并使用 Loadbitmaps() 功能 )。

我正在使用这3个功能来实现与使用鼠标相同的作用和效果
LOADBITMAP()
setBitMap()
无效()

我也尝试了这件代码

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