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

如何在c++;win32 任何人都可以告诉我如何使用位图作为按钮,实际上我可以创建一个静态控件,并可以设置图片,但问题是我不知道如何使用它作为按钮,我使用C++ Win32。 这就是我创建位图的方式,c++,winapi,bitmap,C++,Winapi,Bitmap,代码: 然后我调用主窗口中的函数wm_create message handler,它成功地创建了它,现在我不知道如何将它用作按钮,就像我们在bit torrent应用程序的底部有一张广告图片一样。 我使用VisualStudioC++用Win32 API。< P>如果你想要一个按钮控件,你应该创建一个按钮控件。可视化表示可以由应用程序控制。为此,请指定BS\u OWNERDRAW。具有此样式的按钮控件在视觉方面发生更改时向控件父控件发送消息。然后,控件父控件可以按其认为合适的方式呈现控件 有关

代码:

然后我调用主窗口中的函数wm_create message handler,它成功地创建了它,现在我不知道如何将它用作按钮,就像我们在bit torrent应用程序的底部有一张广告图片一样。
我使用VisualStudioC++用Win32 API。

< P>如果你想要一个按钮控件,你应该创建一个按钮控件。可视化表示可以由应用程序控制。为此,请指定
BS\u OWNERDRAW
。具有此样式的按钮控件在视觉方面发生更改时向控件父控件发送消息。然后,控件父控件可以按其认为合适的方式呈现控件

有关所有者绘制控件的介绍,请访问。如果希望保留按钮控件的某些部分(例如其边框),请参见以获取详细信息(或者如果不使用视觉样式)


所有者绘制的按钮控件的完整工作示例代码可以在中找到。

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

如果您创建一个
静态
窗口,它将不会对任何单击做出反应,并且不能用作按钮


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

您的意思是我可以使用CreateWindow()或CreateWindowEx()函数创建一个普通按钮,然后我可以为其指定BS_OWNERDRAW样式,以使程序理解此按钮将发生更改。我说得对吗?我可以这样做吗?@Wajid:没错,用windowclass
WC\u按钮调用
CreateWindow[Ex]
,并传递
BS\u OWNDERDRAW
样式。“链接到答案”中的代码就是这样做的,只是它不直接调用CreateWindow[Ex],而是使用一个由对话框管理器解析并转换为各自API调用的资源脚本。
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;
}