[MFC]Dialog上的控件MoveWindow时会触发主窗体的WM_MOUSEMOVE

本文探讨了在MFC应用中,当Dialog上的Button控件通过Timer定期调用MoveWindow方法时,如何导致主窗体接收到WM_MOUSEMOVE消息的原理及解决方案。
摘要由CSDN通过智能技术生成

在Timer中让Button控件一段时间调用一次MoveWindow;

BOOL CmfctestDlg::OnInitDialog()
{
    SetTimer(0, 1000, nullptr);
    return TRUE;  // return TRUE  unless you set the focus to a control
}
void CmfctestDlg::OnTimer(UINT_PTR nIDEvent)
{
    // Get control size.
    CRect rt;
    GetDlgItem(IDC_BUTTON1)->GetClientRect(rt);
    static int y = 0;
    GetDlgItem(IDC_BUTTON1)->MoveWindow(0, ++y, rt.Width(), rt.Height());
    CDialogEx::OnTimer(nIDEvent);
}

在主窗体的OnMouseMove中打印鼠标位置及调用次数;
void CmfctestDlg::OnMouseMove(UINT nFlags, CPoint point)
{
    static int i = 0;
    TRACE(_T("OnMouseMove, %d, %d, %d\n"), point.x, point.y, ++i);
    CDialogEx::OnMouseMove(nFlags, point);
}


        运行程序并将鼠标放于窗体上除Button控件的其他位置;打印结果显示每执行一次Button的MoveWindow都会触发一次主窗体的ON_MOUSEMOVE。
        将MoveWindow换成GetDlgItem(IDC_BUTTON1)->SetWindowPos(nullptr, 0, ++y, rt.Width(), rt.Height(), SWP_NOACTIVATE);也不行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值