| 最新文章 |
| 热门文章 | ||||||||||||
|
||||||||||||
| 当前位置:李露的博客 >> 电脑技术 >> 浏览文章 |
|
CSizingControlBar是一个比较强大的可停靠对话框类,继承于CControlBar,所以它实际上是一个控制条,而不是继承于CDialog,使用CSizingControlBar类可以很方便的做一个停靠对话框。 默认的点“×”是隐藏该停靠框,而不是关闭。有时候我们点击“×”也并不是想关闭该停靠框,而是关闭该停靠框中的TAB控件的某一页,像VC和VS的资源管理器和类管理器一页,那么这时你需要捕获它的关闭消息,然后自己做判断。 重载OnCancel和不错WM_CLOSE消息,会发现都没有效果。重载OnCommand,然后捕获SC_CLOSE消息,也没有效果。之所以这些没有效果,看这个类的实现源码就知道了。那个“×”按钮是自绘的一个,而不是一般对话框上默认的关闭按钮,所以点击它,不会发生WM_CLOSE消息。 要能捕获关闭消息,需要在我们自己重载的类中捕获WM_NCLBUTTONUP消息,在CSizingControlBarG类中,已经有了该消息的处理:
void CSizingControlBarG::OnNcLButtonUp(UINT nHitTest, CPoint point)
baseCSizingControlBarG::OnNcLButtonUp(nHitTest, point); 所以,我们自己处理,就是要自己覆盖(不是重载)该函数,在自己的类中添加该消息,写处理代码,最后返回给CSizingControlBarG,如果是给最上层CSizingControlBar,将隐藏不了该停靠框。
void CDockDataEdit::OnNcLButtonUp(UINT nHitTest, CPoint point)
return;
//当前页数为1,那么关闭 这样就可以自己处理关闭消息了。 顺便提下: 如果要设置成有标题栏,而不是两条横线的风格,需要使用CSizingControlBarCF类,同时在CMainFrame::OnCreate函数中,在EnableDocking(CBRS_ALIGN_ANY);的后面加上:
#ifdef _SCB_REPLACE_MINIFRAME 这样就OK了。
可以在stdafx.h头文件中加上: 然后在自己的类中继承:
class CDockDataEdit : public baseCMyBar |
| 【发表评论】【告诉好友】【打印此文】【收藏此文】【关闭窗口】 | |