当前位置: 首页 > 图文教程 > 开发语言 > VC++ > VC界面的实现

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 VC界面的实现


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 114 ::
收藏到网摘: n/a

VC界面的实现

作者:wwei

下载源代码

  微软C++开发工具VC++由于其界面友好,实用而被许多软件开发者所模仿,但是直接用MFC来实现VC界面不仅要耗费大量时间,而且在实现类似VC工具条停靠,拉伸算法,菜单项和工具条按钮自定义功能时,由于涉及到很多关于 MFC 本身实现的细节问题很容易使程序存在各种BUG。本文在实现类似VC界面时,使用了一个MFC扩展界面库SYGUI,从而轻松的实现了VC界面,下图是本文所附例子代码运行时的界面:


图一 本文例子运行时的界面

下面对例子代码作详细说明:

1、为使用SYGUI,你需要在stdafx.h中加入

 #include "sygui.h"
2、创建左边和底部的BAR在MainFrame.h中声明
 CSYTabBar	m_wndWorkSpace; //左边BAR CSYAutoSizeBar	m_wndOutput; //底部BAR CSYSheetTabCtrl	m_wndTabCtrl; //底部BAR中的TAB控制 TSYNoFlickerControl m_treeClass; //左边BAR中的类视图 TSYNoFlickerControl m_treeResource; //左边BAR中的资源视图 TSYNoFlickerControl m_treeFile; //左边BAR中的文件视图 TSYNoFlickerControl m_editOutput; //底部BAR中的编辑视图 
在MainFrame.cpp中创建左边和底部的BAR
 CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { .... //其它代码	//create WorkSpace Bar if (!m_wndWorkSpace.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP	| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC, CRect(0,0,100,100),1000)) {	return -1; } m_wndWorkSpace.SetImage(m_pImgTree); CreateClassView(); CreateResourceView(); CreateFileView(); m_wndWorkSpace.AddView(&m_treeClass,FALSE,0); m_wndWorkSpace.AddView(&m_treeResource,FALSE,7); m_wndWorkSpace.AddView(&m_treeFile,FALSE,14); m_wndWorkSpace.SetActiveView(1); //Create Output Bar if (!m_wndOutput.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP	| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,	CRect(0,0,100,100),1001)) {	return -1; } CreateEditView(); m_wndOutput.AddView(&m_editOutput); ... //其它代码 m_wndWorkSpace.EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndWorkSpace,AFX_IDW_DOCKBAR_LEFT); m_wndOutput.EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndOutput,AFX_IDW_DOCKBAR_BOTTOM); ... //其它代码 } 
3、保存/恢复BAR布局状态,在MainFrame.cpp中加入以下语句
 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { ... //其它代码 LoadBars("Bars.dat"); //恢复布局 } void CMainFrame::OnClose() { SaveBars("Bar.data"); //保存布局 CMDIFrameWnd::OnClose(); } 
4、有效类似.Net中的MDITab,在MainFrame.cpp中加入以下语句:
 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { ... //其它代码 EnabledMDITab(2,TRUE); //有效MDITAB,TRUE: MDIChild保持最大化 EnableMDITabColor(TRUE); //使用OneNotes风格的彩色标签 } 
5、界面风格设定,本例子使用了Office2003风格,如果你不喜欢可在VisualstudioApp.cpp中将以下三行注释掉
 BOOL CVisualstudioApp::InitInstance() { ... //其它代码 CSYDrawMgrOffice2003* pDM2003 = new CSYDrawMgrOffice2003; pDM2003->SetAutoDel(); CSYGUIMgr::S_SetDrawMgr(pDM2003); ... //其它代码}
6、工具条按钮和菜单项的自定义功能,由于SYGUI中封装了该功能,因此不需要加入任何代码。

结束语
  在本文的例子中还使用了SYGUI库中的TaskPane,PropertyGridCtrl,FontComboBox等控制,由于本文主要是介绍VC界面的一种实现方法,因此对这些控制的使用不再作详细介绍,对这些控制感兴趣的读者可通过 [email protected]和作者交流或访问http://www.sygui.com获取更详细的资料。关于本例子代码的编译可参考例子代码目录中的 (编译说明.txt)。最后希望该文对你有所帮助。