当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 再谈客户区对话框拖动操作
| 再谈客户区对话框拖动操作 下载源代码 // OnNcRButtonUp 函数代码void CMyDialog::OnNcRButtonUp(UINT nHitTest, CPoint pt){ if (nHitTest==HTCAPTION && PtInClientRect(pt)) SendMessage(WM_CONTEXTMENU, (WPARAM)m_hWnd, MAKELPARAM(pt.x,pt.y)); else CDialog::OnNcRButtonUp(nHitTest, pt);} 从代码中不难看出,如果鼠标命中代码所反映的鼠标位置为标题栏,而实际位置是在客户区里,那么你必须自己发送 WM_CONTEXTMENU 消息。此为解决问题的关键,代码既要在 OnNcHitTest 中诱使 Windows 把 HTCLIENT 当作 HTCAPTION 处理来实现拖动,又要判断右键发出单击操作时是否处在客户区。如果是,则发送 WM_CONTEXTMENU 消息。注意当用户在标题栏上单击右键时,仍然要显示系统菜单,这时让 OnNcRButtonUp 做默认处理即可。下面是本文例子程序运行画面:![]() 图一 例子程序运行画面 详细的处理细节请下载源代码。 最后,大家身体健康,编程愉快! |
评论 (0) All