MFC 通过发送消息完成按钮操作模拟鼠标单击事件的发生的问题

原创 2013年12月02日 14:38:42

有时我们需要这么做, 手动模拟按钮按下的事件, 让程序做出与按钮真的按下时一样的响应.

   设按钮ID为ID_BTN_OK,当前Dialog窗口.
  实际上系统并不能区分按钮是真的按下了(如用鼠标点击), 还是一个我们自己用代码模拟出的一种"假象".
它所需要知道的只是哪个窗口(按钮也是一种窗口)发生了哪一种事件, 然后在消息循环中处理它. 系统怎么才
能知道这些呢? 当然靠的是消息(message),我们只需按照Windows或者MFC的标准格式把相应的信息传给系统,
系统就会"上当"了.
  向系统传递消息可以用SendMessage或PostMessage(可能还有其他很多函数哦),但SendMessage执行后系统
会一直等待, 直到要发送的消息被处理掉. 而PostMessage可不管那么多, 发送消息后立即返回程序流程.当
按钮按下的响应函数中有很大一个循环时, 用SendMessage会出现许多问题,尤其是要在程序初始化阶段模拟时,
会导致窗体无法完成初始化. 所以我们用PostMessage(). 它的原型为:
  1. BOOL PostMessage(          HWND hWnd,
  2.     UINT Msg,
  3.     WPARAM wParam,
  4.     LPARAM lParam
  5. );
   这样写;  
  1. PostMessage(HWND(控件所在的窗体的句柄),WM_COMMAND, MAKEWPARAM(ID_BTN_OK, BN_CLICKED), NULL);
  这里, WM_COMMAND是要发送的消息,MAKEWPARAM宏是为了组成一个WPARAM,WM_COMMAND消息的WPARAM的低字为控件ID,高字为识别码,最后一个参数LPARAM可为NULL.相关定义可查看MSDN.
  这样我们就把必需的信息格式化好发送给系统了.当系统在消息循环中收到该消息时, 就知道哦, 你要引发控件ID_BTN_OK
的事件BN_CLICKED, 好的我帮你处理. 于是我们就惊喜地看到按钮看起来真的按下去了,并执行了和真正按下去时一样的代码.

相关文章推荐

使用MFC 发送消息模拟按钮按下事件

有时我们需要这么做, 手动模拟按钮按下的事件, 让程序做出与按钮真的按下时一样的响应.   设按钮ID为ID_BTN_OK, 当前Dialog窗口.   实际上系统并不能区分按钮是真的按下了(如用鼠标...

使用MFC 发送消息模拟按钮按下事件

有时我们需要这么做, 手动模拟按钮按下的事件, 让程序做出与按钮真的按下时一样的响应.    设按钮ID为ID_BTN_OK, 当前Dialog窗口.    实际上系统并不能区分按钮是真的按下了(...

使用MFC 发送消息模拟按钮按下事件

有时我们需要这么做, 手动模拟按钮按下的事件, 让程序做出与按钮真的按下时一样的响应.    设按钮ID为ID_BTN_OK, 当前Dialog窗口.    实际上系统并不能区分按...

使用MFC 发送消息模拟按钮按下事件

有时我们需要这么做, 手动模拟按钮按下的事件, 让程序做出与按钮真的按下时一样的响应.    设按钮ID为ID_BTN_OK, 当前Dialog窗口.    实际上系统并不能区分按钮是真的...

【MFC】模拟鼠标点击代码

MFC 工程 把以下代码放到你想要响应的函数里面就行 CPoint pt;  GetCursorPos(&pt);//获取鼠标在屏幕的当前位置 SetCursorPos(100,200);//移...

Vc/MFC中自定义消息及其PostMessage触发使用

http://blog.csdn.net/ztz0223/article/details/2058402 http://blog.csdn.net/a8082649/article/details/...

利用SHBrowseForFolder 产生 路径/文件夹 选择对话框 显示 创建文件夹

前一篇文章中讲到了,如何通过SHBrowserForFolder来产生 路径/文件夹 选择对话框。很多时候,我们除了需要选择文件夹之外,还希望可以随时随地的创建新的文件夹,这就要求选择的同时也可以创建...

C++中将vector转化为动态数组&实现快速排序

STL中的vector相比传统的数组构造方法效率较低但使用起来更方便,尤其在动态数组方面,可以在不知道数组大小的情况下动态地创建所需要的vector,在C++中这是其他所有构造数组的方法都不具备的,但...

使用MFC 发送消息模拟按钮按下事件

有时我们需要这么做, 手动模拟按钮按下的事件, 让程序做出与按钮真的按下时一样的响应.    设按钮ID为ID_BTN_OK, 当前Dialog窗口.    实际上系统并不能区分按钮是真的按下了(...

使用MFC 发送消息模拟按钮按下事件

有时我们需要这么做, 手动模拟按钮按下的事件, 让程序做出与按钮真的按下时一样的响应.    设按钮ID为ID_BTN_OK, 当前Dialog窗口.   实际上系统并不能区分按钮是真的按下了(如用...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC 通过发送消息完成按钮操作模拟鼠标单击事件的发生的问题
举报原因:
原因补充:

(最多只允许输入30个字)