首页
社区
课程
招聘
[求助]动态创建图形按钮
发表于: 2006-5-10 15:49 5406

[求助]动态创建图形按钮

4nil 活跃值
13
2006-5-10 15:49
5406
我的代码是这样的.
void CreateButtons(HWND hWnd)
{
#ifdef _USECLOSEBTN
   hWndClose = CreateWindow("STATIC", 0,
       WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_NOTIFY,
       rctCloseBtn.left,
       rctCloseBtn.top,
       13,
       13,
       hWnd, NULL,
       hInst, 0);
   ShowWindow(hWndClose, SW_SHOWNORMAL);
   SendMessage(hWndClose, STM_SETIMAGE, IMAGE_BITMAP, hBTN_CLOSE_NORM);
   SetWindowLong(hWndClose, GWL_WNDPROC, ButtonProc);
#endif
}

LRESULT CALLBACK    ButtonProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
#ifdef _USECLOSEBTN
   if(hWnd == hWndClose)
   {
       switch(uMsg)
       {
       case WM_MOUSEMOVE:
           if(wParam != MK_LBUTTON)
               SendMessage(hWndClose, STM_SETIMAGE, IMAGE_BITMAP, hBTN_CLOSE_OVER);
           break;

       case WM_LBUTTONDOWN:
           SendMessage(hWndClose,STM_SETIMAGE,IMAGE_BITMAP,hBTN_CLOSE_PRES);
           break;

       case WM_LBUTTONUP:
           SendMessage(hWndClose,STM_SETIMAGE, IMAGE_BITMAP, hBTN_CLOSE_NORM);
           break;
       default:
           break;
       }
   }
#endif
   return 0;
}

问题是这样返回的uMsg好象有问题.请问大家是怎么动态创建图形按钮.并且将其控制权交给他的回调函数的.

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
如果只是将其控制权交回给他的回调函数,可以试试这样(不过我也没有试过动态生成按钮,以下代码仅供参考:P:):
CallWindowProc(GetWindowLong(hWndClose,GWL_USERDATA),hWnd,uMsg,wParam,lParam);

不过你还要在这里加上这一句。
void CreateButtons(HWND hWnd)
{
#ifdef _USECLOSEBTN
   hWndClose = CreateWindow("STATIC", 0,
       WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_NOTIFY,
       rctCloseBtn.left,
       rctCloseBtn.top,
       13,
       13,
       hWnd, NULL,
       hInst, 0);
   ShowWindow(hWndClose, SW_SHOWNORMAL);
   SendMessage(hWndClose, STM_SETIMAGE, IMAGE_BITMAP, hBTN_CLOSE_NORM);
   SetWindowLong(hWndClose,GWL_USERDATA,SetWindowLong(hWndClose, GWL_WNDPROC, ButtonProc));
#endif
}
2006-5-10 16:20
0
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
3
我试下,谢谢了
2006-5-10 16:29
0
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
4
控制权是交给了那个函数了,可是得到的umsg不对,
我在switch(uMsg)这里下断点,运行程序,当我把鼠标移到那个按钮上时断下了,可是uMsg=0x84 或者别的什么数字 而不是 WM_MOUSEMOVE(0x200) 就是说不是这么一个消息,那是为什么呢
2006-5-10 16:51
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
5
0x84也是移动、释放、按下后的消息。
WM_NCHITTEST = $0084;
2006-5-10 17:02
0
游客
登录 | 注册 方可回帖
返回
//