CFormView上CTreeCtrl内弹出右键菜单后,点击后原来菜单的窗口遮住了CTreeCtrl一部分。

xirumin 2013-09-19 05:54:21
在CFormView上有几个控件,CTabCtrl,CTreeCtrl, CGridCtrl等。
当在CTreeCtrl中弹出右键菜单后,点击鼠标。菜单会遮盖住CTreeCtrl的一部分。鼠标移动过去也一样遮盖
只能选中CTabCtrl换到别的页面,再切换回来才不遮盖。
...全文
186 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xirumin 2013-09-23
  • 打赏
  • 举报
回复
还是不行呀。为什么会发生这种情况呢?
xirumin 2013-09-23
  • 打赏
  • 举报
回复
问题解决了。感谢两位帮忙。
  • 打赏
  • 举报
回复
把 CGridCtrl 去掉试试, 干脆让 菜单消失后 让CTreeCtrl重绘
schlafenhamster 2013-09-20
  • 打赏
  • 举报
回复
“这个CGridCtrl” 搞一个图看看。
xirumin 2013-09-19
  • 打赏
  • 举报
回复
谢两位指点。 我是在CFormView上放了一个CTabCtrl. 点击不同CTabCtrl时,显示或隐藏相应的CTreeCtrl, CGridCtrl 右键是在CFormView::OnContextMenu()中TrackPopupMenu()的。 现在发现,右键菜单弹出后,点击屏幕上除了右侧一个CGridCtrl外的任何地方,菜单消失都正常。只是点击 这个CGridCtrl, 或者点击菜单项,弹出对话框时,菜单就留下一个残留,盖住了CTreeCtrl的一部分。因为菜单是右键CTreeCtrl时在右击处弹出的。
  • 打赏
  • 举报
回复
感觉不应该这样啊,是仅仅CTreeCtrl部分没有重绘,还是其他部分统统没有重绘。 是否可以在CTreeCtrl控件旁边放一个 Button,然后让 鼠标右键弹出菜单挡住一些CTreeCtrl和Button,看看取消时,Button 是不是重绘了。这样可以判断下 是不是 CTreeCtrl的问题。 是不是这个 CTreeCtrl 有什么不同?
schlafenhamster 2013-09-19
  • 打赏
  • 举报
回复
试试 WM_CANCELMODE 点到 菜单 外是:OnCaptureChanged void CDlgHasToolBarDlg::OnCaptureChanged(CWnd *pWnd) { // TODO: Add your message handler code here HWND hmenu=::GetCapture(); ::SendMessage(hmenu,WM_CANCELMODE,0,0); CDialog::OnCaptureChanged(pWnd); }
xirumin 2013-09-19
  • 打赏
  • 举报
回复
还有,为什么会出现这种问题呢?弹出菜单时,窗口要重绘窗口的大小和菜单取消时被遮挡窗口的重绘不是由系统自己维护的吗?
xirumin 2013-09-19
  • 打赏
  • 举报
回复
谢楼上解答。我也用了Invalidate()重绘。 但是不选择任何菜单项,点击菜单外面其它区域时,菜单能消失,还是有一些灰色的原来菜单所在位置会遮住 树控件。这种情况在哪里写重画好呢?
schlafenhamster 2013-09-19
  • 打赏
  • 举报
回复
“点击后原来(弹出?)菜单的窗口遮住了CTreeCtrl一部分” 叫CTreeCtrl 重绘(InValidate)

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧