SDK的按钮怎么响应 按下 与 释放的消息?急!高分求助!

bailindf 2006-03-22 09:24:59
windows程序设计中如是说:
按钮通知码的可能值在Windows表头文件中定义如下:
BN_PAINT 1
BN_HILITE or BN_PUSHED 2
BN_UNHILITE or BN_UNPUSHED 3
BN_DISABLE 4

从1到4的通知码是用于一种叫做BS_USERBUTTON的已不再使用的按钮的(它已经由BS_OWNERDRAW和另一种不同的通知方式所替换)

“另一种不同的通知方式”指的是啥?我现在想分别响应按钮的“按下”和“释放”该怎么办?
...全文
159 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
guanyouwen 2006-05-18
  • 打赏
  • 举报
回复
学习
ringphone 2006-03-23
  • 打赏
  • 举报
回复
第一种方法:
WNDPROC DefProc;
DefProc = (WNDPROC)SetWindowLong(hWndButton,GWL_WNDPROC,(LONG)ButtonProc);

LRESULT CALLBACK WINAPI ButtonProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam)
{
switch(uMsg)
{
//自己处理按钮的消息
default:
//记住未处理的消息要交给原按钮的窗口过程处理
return CallWindowProc(DefProc,hWnd,uMsg,wParam,lParam);
}
}

第二种方法itemState里面是没有标示“按下”和“释放”的状态,必须自己检测,即
state = SendMessage(hWndButton,BM_GETSTATE,0,0);
根据返回值 state & BST_PUSHED为真即为按下,否则是释放。
ringphone 2006-03-23
  • 打赏
  • 举报
回复
两种方法:一是子类化按钮,即替换按钮的窗口过程,自己处理鼠标按下和松开的消息,向父窗口发送事件通知。
还有就是书上说的另一种不同的通知方式,指32位程序应该设置按钮为自绘,即BS_OWNERDRAW类型,在WM_DRAWITEM消息里面自己处理以表现出原16位程序里这种按钮的外观和行为。这个消息里能得到按钮状态,检测该状态就能响应按钮的“按下”和“释放”
bailindf 2006-03-23
  • 打赏
  • 举报
回复
非常感谢ringphone(临风) !

第一种方法是不是自己处理按钮字窗口的消息?怎么实现?非常想知道!

第二种方法在按标示钮状态的itemState,其中没有标示“按下”和“释放”的呀!

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧