加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

在WIN32中的“BUTTON”类窗口上显示位图

发布时间:2020-12-13 21:27:53 所属栏目:Windows 来源:网络整理
导读:编辑:我认为在创建子窗口期间(即我的按钮)不会发送WM_CREATE消息.因此,通过在WM_CREATE期间调用SendMessage,我正在向尚未创建的窗口发送消息.现在的解决方案是在WM_SHOWWINDOW消息期间调用SendMessage().子窗口是否在创建时发送WM_CREATE消息? 为什么按钮
编辑:我认为在创建子窗口期间(即我的按钮)不会发送WM_CREATE消息.因此,通过在WM_CREATE期间调用SendMessage,我正在向尚未创建的窗口发送消息.现在的解决方案是在WM_SHOWWINDOW消息期间调用SendMessage().子窗口是否在创建时发送WM_CREATE消息?

为什么按钮上没有显示位图?位图为180×180像素.

我有一个资源文件:

Bit BITMAP bit.bmp

然后我创建了主窗口和一个子“BUTTON”窗口,其中包含:

HWND b,d;

b = CreateWindow(L"a",NULL,WS_OVERLAPPEDWINDOW,500,hInstance,0);

d = CreateWindow(L"BUTTON",WS_CHILD | WS_VISIBLE | BS_BITMAP,10,180,b,200,0);

然后,在我的Windows程序中,我向“BUTTON”窗口发送“BM_SETIMAGE”消息:

HBITMAP hbit; 

case WM_CREATE:    // It works if I change this to: case WM_SHOWWINDOW 

hbit = LoadBitmap(hInstance,L"Bit");

SendMessage(d,BM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)hbit);

LoadBitmap()返回一个有效的句柄,因为它没有返回NULL,我能够使用BitBlt()函数在客户区显示位图.所以我要么没有正确发送消息,要么我没有正确创建“按钮”窗口.

我究竟做错了什么?

谢谢!

当创建该类的窗口时,将使用WM_CREATE调用窗口类“a”的窗口过程.这是在您第一次调用CreateWindow时,这是在创建子BUTTON窗口之前. WM_CREATE表示“您正在被创建” – 它并不意味着“正在创建一个孩子”.

解决方案是在类“a”的WM_CREATE处理程序中调用d = CreateWindow(L“BUTTON”…):

case WM_CREATE:
    d = CreateWindow(L"BUTTON",hwnd,0);
    hbit = LoadBitmap(hInstance,L"Bit");
    SendMessage(d,(LPARAM)hbit);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读