如何在c ++ win32

时间:2015-08-07 11:44:50

标签: c++ winapi bitmap

任何人都可以告诉我如何使用位图作为按钮,实际上我可以创建一个静态控件并可以设置图片,但问题是我不知道如何将它用作按钮,我正在使用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。

2 个答案:

答案 0 :(得分:2)

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

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


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

答案 1 :(得分:0)

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

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

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