分享
 
 
 

VC界面的实现

王朝vc·作者佚名  2006-01-17
窄屏简体版  字體: |||超大  

VC界面的实现

作者:wwei

下载源代码

微软C++开发工具VC++由于其界面友好,实用而被许多软件开发者所模仿,但是直接用MFC来实现VC界面不仅要耗费大量时间,而且在实现类似VC工具条停靠,拉伸算法,菜单项和工具条按钮自定义功能时,由于涉及到很多关于 MFC

本身实现的细节问题很容易使程序存在各种BUG。本文在实现类似VC界面时,使用了一个MFC扩展界面库SYGUI,从而轻松的实现了VC界面,下图是本文所附例子代码运行时的界面:

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

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

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

#include "sygui.h"

2、创建左边和底部的BAR在MainFrame.h中声明

CSYTabBarm_wndWorkSpace; //左边BAR

CSYAutoSizeBarm_wndOutput; //底部BAR

CSYSheetTabCtrlm_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界面的

一种实现方法,因此对这些控制的使用不再作详细介绍,对这些控制感兴趣的读者可通过 wwei@zj165.com和作者交流

或访问http://www.sygui.com获取更详细的资料。关于本例子代码的编译可参考例子代码目录中的 (编译说明.txt)。

最后希望该文对你有所帮助。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有