读书人

怎么获得对话框中某个CButton的 hwnd

发布时间: 2012-01-21 21:31:43 作者: rapoo

如何获得对话框中某个CButton的 hwnd
我需要做一个 ,当鼠标经过这个CButton时 使用SendMessage发送一个单击消息
void CMyhookDlg::OnMouseMove(UINT nFlags, CPoint point)
{
CString str;
str.Format( "%d ",point.x);
GetDlgItem(IDC_EDIT1)-> SetWindowText(str)
if(point.x> 340)
::SendMessage(m_hWnd,WM_CLOSE,0,0);
CDialog::OnMouseMove(nFlags, point);
}

我先用WM_CLOSE试了一下,当鼠标point.x> 340的确可以关闭对话框,但是经过这个Button时不能(Button位置大于340)

[解决办法]
如何获得对话框中某个CButton的 hwnd ??
GetDlgItem(IDC_)

在经过Button时, 消息让给Button处理了, 所以自己就没这个消息了

用 PreTranslateMessage可以接到这个消息
[解决办法]
CEdit* pBoxOne;
pBoxOne = (CEdit*) GetDlgItem(IDC_EDIT1);
if(point.x> 340)
::SendMessage(pBoxOne-> m_hWnd, WM_CLOSE, 0, 0);

[解决办法]
当鼠标MOVE到BUTTON时,mouse move事件会被BUTTON截获掉,因此只能靠PreTranslateMessage来做,通过判断鼠标事件,同时判断鼠标的位置来决定当前鼠标的位置。

需要注意的是,如果你有子Dialog时,即便是domodal,如果其中有COMBOX的话,鼠标事件还是会漏下来,这时就需要另外加处理
[解决办法]
那楼主派生按钮,重写这个按钮的OnMouseMove类可不可以?
[解决办法]
SetCapture, ReleaseCapture

读书人网 >VC/MFC

热点推荐