如何在c++ win32中制作一个可点击的按钮

how to make a clickable button in c++ win32

本文关键字:一个 按钮 c++ win32      更新时间:2023-10-16

任何人都可以告诉我如何使用位图作为按钮,实际上我可以创建一个静态控件,并可以将图片设置为它,但问题是我不知道如何使用它作为按钮,我使用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应用程序的底部有一个广告的图片一样。我正在使用visual studio c++与win32 api。

如果你想要一个按钮控件,你应该创建一个按钮控件。可视化表示可以由应用程序控制。为此,指定BS_OWNERDRAW按钮样式。这种样式的按钮控件在视觉方面发生变化时向控件父控件发送一个wm_drawwitem消息。然后,控件父控件可以呈现它认为合适的控件。

有关自定义控件的介绍,请参阅自定义控件。如果你想保留按钮控件的某些部分(例如它的边框),请参阅使用自定义和所有者绘制控件的视觉样式(或DrawFrameControl,如果你不使用视觉样式)。


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

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

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

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

所示