博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC中模拟按钮控件BN_CLICKED消息事件
阅读量:4303 次
发布时间:2019-05-27

本文共 1335 字,大约阅读时间需要 4 分钟。

一、 现有一对话框如下

单击按钮会弹出Hello消息框,如下图所示:

现要在点击按钮时模拟的单击响应事件,实现代码如下:

void CTestDlg::OnBnClickedBtnTest()

{

    // TODO: Add your control notification handler code here

    WPARAM wParam;

    wParam = BN_CLICKED;

    wParam <<= 16;   // 左移16位

    wParam |= IDC_BTN_SAY_HELLO;    // 按位或

    LPARAM lParam;

    lParam = (LPARAM)::GetDlgItem(this->GetSafeHwnd(), IDC_BTN_SAY_HELLO);

    ::PostMessage(this->GetSafeHwnd(), WM_COMMAND, wParam, lParam);

}

如此,单击按钮就会弹出Hello消息框。

 

二、 现有如下两个对话框程序Test.exe和Hisin.exe

单击按钮会弹出Hello消息框,如下图所示:

 

现要实现点击Hisin对话框中的按钮,模拟Test对话框中的单击事件。实现代码如下:

void CHisinDlg::OnBnClickedBtnTest()

{

    // TODO: Add your control notification handler code here

    HWND hWndDlgTest = ::FindWindow(NULL, TEXT("Test"));

    HWND hWndBtnSayHello = ::FindWindowEx(hWndDlgTest, NULL, NULL, TEXT("Say   Hello"));

    WPARAM wParam;

    wParam = BN_CLICKED;

    wParam <<= 16;   // 左移16位

    wParam |= ::GetDlgCtrlID(hWndBtnSayHello);

    LPARAM lParam;

    lParam = (LPARAM)hWndBtnSayHello;

    

    ::PostMessage(hWndDlgTest, WM_COMMAND, wParam, lParam);

}

//***************************

BM_CLICK消息会模拟按钮单击,按钮会收到WM_LBUTTONDOWN和WM_LBUTTONUP消息,按钮的父窗口会收到BN_CLICKED通知消息。

明确一个问题:BM/NM等中间的M表示向控件发送的消息,也就是命令控件做事情;BN等中间的N,表示控件向外部(父窗口)发出的通知,表示自己的状态,不要混淆这两个不同方向的东西。

WM_CLICK,BN_CLICKED,BM_CICK有什么区别?

没有WM_CLICK,应该是WM_LBUTTONDOWN,这个就是当被鼠标左键点击时引发的消息;

BM_CLICK是其他窗口发送给按钮控件的消息,让按钮执行点击操作,可以模拟按钮点击;
BN_CLICK是当按钮被点击时,按钮控件发送给按钮控件的父窗口的,告诉父窗口我被点击了。

转载地址:http://ljlws.baihongyu.com/

你可能感兴趣的文章
股票网格交易策略
查看>>
matplotlib绘图跳过时间段的处理方案
查看>>
vnpy学习_04回测评价指标的缺陷
查看>>
ubuntu终端一次多条命令方法和区别
查看>>
python之偏函数
查看>>
vnpy学习_06回测结果可视化改进
查看>>
读书笔记_量化交易如何建立自己的算法交易01
查看>>
设计模式03_工厂
查看>>
设计模式04_抽象工厂
查看>>
设计模式05_单例
查看>>
设计模式06_原型
查看>>
设计模式07_建造者
查看>>
设计模式08_适配器
查看>>
设计模式09_代理模式
查看>>
设计模式10_桥接
查看>>
设计模式11_装饰器
查看>>
设计模式12_外观模式
查看>>
设计模式13_享元模式
查看>>
设计模式14_组合结构
查看>>
设计模式15_模板
查看>>