【问题标题】:how to make a clickable button in c++ win32如何在 c++ win32 中制作一个可点击的按钮
【发布时间】:2015-10-30 20:27:23
【问题描述】:

任何人都可以告诉我如何将位图用作按钮,实际上我可以创建一个静态控件并可以为其设置图片,但问题是我不知道如何将其用作按钮,我是使用 c++ win32。 这就是我创建位图的方式

代码:

HWND Profile_Stuff(HWND hWnd, HINSTANCE hInst)
{
    HWND Profile_Pic;

    Profile_Pic = CreateWindow("STATIC", NULL, SS_BITMAP|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, 5,5,33,33, hWnd, NULL, hInst, NULL);
    HBITMAP hBmp = (HBITMAP)LoadImage(NULL, "camera1.jpg", IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    if(hBmp == NULL){
        MessageBox(NULL, "Error while loading image", "Error", MB_OK|MB_ICONERROR);
    }
    SendMessage(Profile_Pic, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBmp);
    return 0;
}

然后我在主窗口中调用 wm_create 消息处理程序中的函数,它成功创建了它,现在我不知道将它用作按钮,就像我们在 bit torrent 应用程序底部有一张广告图片一样。 我正在使用带有 win32 api 的 Visual Studio C++。

【问题讨论】:

    标签: c++ winapi bitmap


    【解决方案1】:

    如果你想要一个按钮控件,你应该创建一个按钮控件。视觉表示可以由应用程序控制。为此,请指定 BS_OWNERDRAW Button Style。每当视觉方面发生变化时,具有这种样式的按钮控件都会向控件父级发送WM_DRAWITEM 消息。然后,控件父级可以按其认为合适的方式呈现控件。

    Custom Controls 上提供了有关所有者绘制控件的介绍。如果您希望保留按钮控件的某些部分(例如其边框),请参阅Using Visual Styles with Custom and Owner-Drawn Controls 了解详细信息(或DrawFrameControl,如果您不使用视觉样式)。


    可以在this answer 中找到完全可以工作的自绘按钮控件示例代码。

    【讨论】:

    • 您的意思是我可以使用 CreateWindow() 或 CreateWindowEx() 函数创建一个普通按钮,然后我可以为其指定 BS_OWNERDRAW 样式,以使程序了解此按钮将发生变化。我说的对吗?
    • 我应该这样做吗?
    • @Wajid:没错,使用窗口类WC_BUTTON 调用CreateWindow[Ex],并传递BS_OWNDERDRAW 样式。链接到答案中的代码就是这样做的,只是它不直接调用CreateWindow[Ex],而是使用由对话管理器解析并转换为相应API调用的资源脚本。
    【解决方案2】:

    在 Windows 中,窗口属于一个类,一个类为该类的所有窗口定义了窗口过程,这意味着它们如何对事件做出反应。

    如果您创建一个STATIC 窗口,它不会对任何点击做出反应,也不能用作按钮。

    您可以创建一个自定义类,将其与能够模仿 BUTTON 的自定义 Windows 过程一起注册。但除非您有非常特殊的要求,否则只需创建一个所有者绘制的按钮,如@IInspectable 的答案所示

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      相关资源
      最近更新 更多