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

xirumin 2013-09-19 05:54:21
在CFormView上有几个控件,CTabCtrl,CTreeCtrl, CGridCtrl等。
当在CTreeCtrl中弹出右键菜单后,点击鼠标。菜单会遮盖住CTreeCtrl的一部分。鼠标移动过去也一样遮盖
只能选中CTabCtrl换到别的页面,再切换回来才不遮盖。
...全文
111 点赞 收藏 10
写回复
10 条回复
xirumin 2013年09月23日
还是不行呀。为什么会发生这种情况呢?
回复 点赞
xirumin 2013年09月23日
问题解决了。感谢两位帮忙。
回复 点赞
水平很次的老码农 2013年09月20日
把 CGridCtrl 去掉试试, 干脆让 菜单消失后 让CTreeCtrl重绘
回复 点赞
schlafenhamster 2013年09月20日
“这个CGridCtrl” 搞一个图看看。
回复 点赞
xirumin 2013年09月19日
谢两位指点。 我是在CFormView上放了一个CTabCtrl. 点击不同CTabCtrl时,显示或隐藏相应的CTreeCtrl, CGridCtrl 右键是在CFormView::OnContextMenu()中TrackPopupMenu()的。 现在发现,右键菜单弹出后,点击屏幕上除了右侧一个CGridCtrl外的任何地方,菜单消失都正常。只是点击 这个CGridCtrl, 或者点击菜单项,弹出对话框时,菜单就留下一个残留,盖住了CTreeCtrl的一部分。因为菜单是右键CTreeCtrl时在右击处弹出的。
回复 点赞
水平很次的老码农 2013年09月19日
感觉不应该这样啊,是仅仅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)
回复 点赞
发动态
发帖子
界面
创建于2007-09-28

7973

社区成员

11.5w+

社区内容

VC/MFC 界面
社区公告
暂无公告