仿“影音传送带”界面

来源:百度文库 编辑:神马文学网 时间:2024/04/30 01:30:49
发表日期:2004年12月25日          【编辑录入:webmaster】
最近需要在对话框中使用分割控件,也就是CSplitterWnd了,但是,CSplitterWnd只能用于CFrameWnd或CFrameWnd的子类中,在对话框中还不知道如何处理。研究我们常用的一个工具“影音传送带”,上面实现分割和我需要的差不多,于是研究了一下,原来还是可以的。
首先明白CSplitterWnd还是需要在CFrameWnd中创建,其实也就是我们把CFrameWnd分割了,然后将CFrameWnd放到我们需要的地点。
以下说明针对我提供的模仿程序代码
首先我们建立一个SDI的MFC框架,不要DOC支持,在CMainFrame中添加一个CTabCtrlEx的对象,CTabCtrlEx的CTabCtrl的派生类
然后在OnCreate中添加如下代码
m_TabCtrl.Create(TCS_TABS | TCS_FIXEDWIDTH | WS_CHILD |
WS_VISIBLE | TCS_SINGLELINE, CRect(), this, AFX_IDW_PANE_FIRST);
m_TabCtrl.SetFont(m_wndToolBar.GetFont());
m_TabCtrl.InsertItem(0, "下载");
m_TabCtrl.InsertItem(1, "代理服务器");
m_TabCtrl.InsertItem(2, "站点探测器");
将其ID设置为:AFX_IDW_PANE_FIRST这样我们就不需要维护他的显示控制了,当窗体变化大小的时候,TabCtrl会自动变化大小,当然大家可以删除原来创建的那个VIEW
然后我们添加一个新类CTabCtrlEx,父类为CTabCtrl,增加OnCreate,OnPaint,OnSize,TCN_SELCHANGE,处理
在定义中增加CTestFrameWnd的一个指针对象,CTestFrameWnd是CFrameWnd的派生
在OnCreate中添加
m_pwndFrame1 = new CTestFrameWnd;
m_pwndFrame1->Create(NULL, "下载", WS_CHILD|WS_VISIBLE, CRect(), this);
这个对象我们必须定义为指针,而且不能主动delete,因为系统会对创建的CFrameWnd对象自动调用delete
OnPaint中主要处理闪烁问题(主窗体大小变化的时候,CTabCtrl默认会重画界面,从而出现闪烁),解决原理主要是修改了系统默认的处理函数OnPaint,注意不是简单的修改OnEraseBkgnd就能解决问题的,参考代码,这个还是有点用处哦。OnSize中处理m_pwndFrame1 的位置,TCN_SELCHANGE处理显示控制
上面需要CTestFrameWnd,当然我们就要新建CTestFrameWnd类
在CTestFrameWnd中唯一要做的就是虚函数OnCreateClient,代码请参考文件,主要窗体分割,比较简单就不说明了,代码写的非常简化且没有检查,这是不对的,不过这是DEMO也就不计较了,大家不要模仿
这样框架就完成了,效果如下:


申明:DEMO中代码不是很规范,希望大家不要学习
欢迎大家互相交流学习
很多信息http://zhugang.net  http://www.zhugang.net
请点击图标下载浏览:

附件