MFC中模拟按钮控件BN_CLICKED消息事件

模拟按钮控件BN_CLICKED消息事件

一、 现有一对话框如下

单击按钮会弹出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是当按钮被点击时,按钮控件发送给按钮控件的父窗口的,告诉父窗口我被点击了。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值