如何使用位图实现按钮式效果

时间:2010-08-27 05:45:23

标签: c++ visual-studio winapi vc6

你好,我有一个与使用位图启用对话框窗口相关的问题。我创建了一个键盘类型布局,我也想通过键盘输入。当我使用鼠标时,我能够得到按钮(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);
}

1 个答案:

答案 0 :(得分:1)

据我了解,您有一系列模拟计算机键盘布局的按钮。每当用户按下键盘上的键时,您需要在对话框中模拟按钮单击。您已为每个按钮的每个状态提供了位图。

为此,我会处理WM_KEYDOWNWM_KEYUP条消息。在处理程序中,使用键的一些映射到实际的按钮实例。然后,将BM_SETSTATE发送到按钮控件。

然后,处理每个按钮的WM_COMMAND消息并检查BN_CLICKED代码。