这样改改试试:void CAutoDlg::OnMouseMove(UINT nFlags, CPoint point)
{
CRect rect;
GetDlgItem(IDOK)->GetWindowRect(&rect); //响应确定按钮
if(rect.PtInRect(point))
PostMessage(WM_CLOSE);
CDialog::OnMouseMove(nFlags, point);
}
{
CRect rect;
GetDlgItem(IDOK)->GetWindowRect(&rect); //响应确定按钮
if(rect.PtInRect(point))
PostMessage(WM_CLOSE);
CDialog::OnMouseMove(nFlags, point);
}
解决方案 »
- 如何在MFC应用程序中自己定义回调函数
- 类变量定义的问题
- 怎样在一个程序弹出出错窗口的时候,检测出这个程序出错了?
- Acitve不能显示画图
- 晕~Visual C++ 2005 Express连windows.h都没有,这是怎么回事啊?
- 用ADO调用access2000数据库
- 在Win2000下,如何用API实现将模拟“shift”按键“按住”与“释放”?
- I have no idea,如何统一的给CArray变量中的每个单元赋初始值
- 请问有人有开发大型网上文件传输的经验吗?用VC
- 有关MS Agent的问题。
- 一个关于CAsyncSocket类connect方法超时的问题
- 各位计算机专业的学生学的课程是什么?回帖课程都有分拿。
OnMouseMove传进来的不是屏幕坐标。
CPoint pt = point;
ClientToScreen(&pt);
GetDlgItem(IDOK)->GetWindowRect(&rect); //响应确定按钮
if(rect.PtInRect(pt))
PostMessage(WM_CLOSE);
GetDlgItem(IDOK)->GetClientRect(&rect); //响应确定按钮
if(rect.PtInRect(pt))
PostMessage(WM_CLOSE);
他是处理dialog的WM_MOUSEMOVE,point是dialog客户区坐标,而不是button的。
可以从CButton派生一个类CMyBtn,处理WM_MOUSEMOVE消息:
GetParent()->PostMessage(WM_CLOSE);
然后在dialog中加入一个变量:CMyBtn m_btn;
在OnInitDialog中m_btn.SubclassDlgItem(IDOK, this);
{
CRect rect;
GetDlgItem(IDOK)->GetWindowRect(&rect); //响应确定按钮
ScreenToClient(&rect);
if(rect.PtInRect(point))
PostMessage(WM_CLOSE);
CDialog::OnMouseMove(nFlags, point);
}
{
CDialog::OnOK();
}
如果是窗口内部的按钮,建议你用PreTranslateMessage截获WM_MOUSEMOVE 消息:
if (pMsg->hWnd==GetDlgItem(your button id)->GetSafeHWnd()&&
pMsg->message==WM_MOUSEMOVE) PostMessage(WM_CLOSE);