yjm0105 阅读(792) 评论(0)

 我在对话框上加了一个CStatic 与一个按钮,但是我发现不能通过按钮的事件给CStatic发消息呀,这是什么原因呀 <无内容> - [gaoqing000] 2006-6-11 16:45:15 ( 0 字节, 点击:3 )
你发了什么消息,用spy工具探测一下 <无内容> - [anonymous IP:222.125.19...] 2006-6-11 16:46:20 ( 0 字节, 点击:7 )

:( 晕,现在都还没用过SPY++,马上打开来看看,在它的"WINDOWS"菜单弹出窗口里选择我的程序Test_Dialog的窗口:

-001201A4"Test_Dialog"#32770(Dialog)
  ...
  000B018E"TODO:在这里设置对话控制。"Static
      <=这个就是要捕获消息的ID为IDC_STATIC1的静态文本控件了
  ...

 
在它的右键菜单里选择Messages,出来Messages窗口,切换到Test_Dialog对话框,你马上就能看见 Messages窗口 里出现很多消息了:WM_PAINT、WM_NCPAINT、WM_ERASEBKGND...如果鼠标移动到一个按钮上(不点击),哈,马上刷出一串的WM_NCHITTEST消息,然后双击STATIC控件,再切换到SPY++查看, 发现在跟在N多WM_NCHITTEST消息后面的是一些WM_SETCURSOR、WM_MOUSEMOVE、WM_MOUSEACTIVATE,注意还有一条消息名字就叫WM_LBUTTONDOWN,双击点开它,看到它的注释是 wParam:00000001 lParam:00070026 -----查阅MSDN的WM_LBUTTONDOWN消息可以知道,wParam的1是表示MK_LBUTTON(Set if the left mouse button is down),lParam的高16位0x0007表示y坐标,低16位0x0026表示x坐标,即我刚才点击的位置是P(38,7)(这是相对控件的左上角0位置而言的) 。于是,我知道实现就是发一条WM_LBUTTONDOWN消息给IDC_STATIC1就行了,发送的坐标写P(0,0)就OK.

所以这个问题的答案就是:

1.将STATIC控件的ID改了,不能是默认的IDC_STATIC,比如改成IDC_STATIC1;
2.属性选上NOTIFY;
3.实现代码:
p=((CButton*)GetDlgItem(IDC_STATIC1));
p->SendMessage(WM_LBUTTONDOWN,1,0);

-----早就知道这个工具了,但一直太懒而不知道它的一点点用法:P


发表评论
切换编辑模式