yinyan168 发表于 2007-4-11 14:38:00

[求助]arx无模式对话框焦点问题

请问如何编写无模式获取焦点的函数,使它能在鼠标移动到对话框上面的时候自动获得对话框焦点,离开对话框时自动获得cad窗口的焦点。类似cad的属性对话框。请高手们指点。谢谢

YANGGY 发表于 2007-4-11 22:17:00

利用鼠标移动发信息,在话框上面时自动获得对话框焦点,离开对话框时自动获得cad窗口的焦点。

lxspine 发表于 2007-4-18 09:25:00

本帖最后由 作者 于 2007-4-18 9:25:15 编辑 <br /><br /> <p>使用Mouseleave事件可以获取到鼠标离开的事件,调用acedGetAcadDwgView()-&gt;SetFocus()可以使ACAD获取到焦点,具体实现方法如下:<br/>添加OnMouseMove和OnMouseLeave两个事件和状态指示变量bTrackLeave:<br/>.h:<br/>&nbsp;static BOOL bTrackLeave;<br/>&nbsp;afx_msg LPARAM OnMouseLeave(WPARAM wp, LPARAM lp);<br/>&nbsp;afx_msg void OnMouseMove(UINT nFlags, CPoint point);</p><p>.cpp:<br/>BEGIN_MESSAGE_MAP(CElemHierDlgChildDlg, CAcUiDialog)<br/>....<br/>ON_WM_MOUSEMOVE()<br/>ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)<br/>....<br/>END_MESSAGE_MAP()</p><p>BOOL C****::bTrackLeave=FALSE;</p><p><br/>void C****::OnMouseMove(UINT nFlags, CPoint point)<br/>{<br/>&nbsp;if (!bTrackLeave)<br/>&nbsp;{<br/>&nbsp;&nbsp;TRACKMOUSEEVENT tme;<br/>&nbsp;&nbsp;tme.cbSize = sizeof(tme);<br/>&nbsp;&nbsp;tme.hwndTrack = m_hWnd;<br/>&nbsp;&nbsp;tme.dwFlags = TME_LEAVE;</p><p>&nbsp;&nbsp;if(_TrackMouseEvent(&amp;tme))<br/>&nbsp;&nbsp;&nbsp;bTrackLeave = TRUE;<br/>&nbsp;}<br/>&nbsp;CAcUiDialog::OnMouseMove(nFlags, point);<br/>}</p><p>LPARAM C****::OnMouseLeave(WPARAM wp, LPARAM lp)<br/>{<br/>&nbsp;bTrackLeave = FALSE;<br/>&nbsp;acedGetAcadDwgView()-&gt;SetFocus();<br/>&nbsp;return 0;</p><p>}</p>
页: [1]
查看完整版本: [求助]arx无模式对话框焦点问题