当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 编写多文档应用程序

VC++
透明窗体的又一实现
橡皮区矩形 CRectTracker C# 实现
Visual Basic .NET 中多 Windows 窗体的同步
轻松实现类 MSDN 2002 界面(二)
轻松实现类 MSDN 2002 界面
数据库开发之窗体编程
一个打印报表的简单的类
SDK 程序使用SkinMagic工具包换皮肤
Windows SDK笔记(七):创建MDI窗口
Windows SDK笔记(六):使用对话框资源建立窗口
Windows SDK笔记(五):非模式对话框
Windows SDK笔记(四):模式对话框
也谈如何隐藏显示在任务栏中的对话框程序
一个托盘程序演示 -闹钟 Alert
think window procedure
再谈 CFileDialog 对话框的定制
获得 Win32 窗口句柄的更好的方法
个人考勤软件开发实例配套代码 2.1版(Update)
介绍一个操作DHTML表格的C++对象
Windows资源管理器Web视图界面

VC++ 中的 编写多文档应用程序


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

编写多文档应用程序
作者:王雪松

下载本文示例代码

一、 动态菜单与工具栏


(未登录状态)


(登陆状态)

实现原理:

1.菜单

BOOL SetMenu( HWND hWnd, // handle to window HMENU hMenu // handle to menu);	
可以改变菜单。

2.工具栏
BOOL CToolBarCtrl::SetState( int nID, UINT nState );
可以改变工具栏按钮状态。
还要调用CFrameWnd::RecalcLayout()函数计算工具栏尺寸。

二、 自制对话条


//创建对话条if(!m_wndBar.Create(this,IDD_DIALOGBAR,WS_CHILD|WS_VISIBLE|	CBRS_BOTTOM|CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY |	CBRS_SIZE_DYNAMIC,IDD_DIALOGBAR))//操纵对话条上的CTabCtrl控件CTabCtrl * ptab=(CTabCtrl *)m_wndBar.GetDlgItem(IDC_TAB_INFO);ptab->InsertItem(0,"操作信息");ptab->SetImageList(&((CMainFrame *)AfxGetMainWnd())->m_imageList);……………//隐藏和显示CListBox控件CListBox * plistInfo = (CListBox*)m_wndBar.GetDlgItem(IDC_LIST_INFO);plistInfo->SetWindowPos(NULL,	0,	0,	GetSystemMetrics(SM_CXSCREEN)-11,	75,	SWP_NOMOVE|SWP_NOZORDER | SWP_NOACTIVATE|SWP_SHOWWINDOW);
三、 位图按钮与菜单

由于按钮和菜单比较少,没有采用自绘技术,而是采用了
CButton::SetBitmap()和CMenu::SetMenuItemBitmaps()函数,相信读者比作者更清楚这两个函数的用法。

四、 只能运行程序的一个实例

当程序已经运行时,如果再次运行,则激活前一个实例。
实现原理:

1. 只运行一个实例

#define UNIQE_NAME "{1AB792D6-EEF2-4528-9A84-91356811E7A4}"
BOOL CRaclientApp::InitInstance()函数中加入
m_hOneInstance = ::CreateMutex( NULL,FALSE,UNIQE_NAME);if ( GetLastError() == ERROR_ALREADY_EXISTS )//如果存在前一个{//发送消息,激活实例	DWORD dwRecipients = BSM_APPLICATIONS;	::BroadcastSystemMessage( BSF_NOHANG,&dwRecipients,	ID_RA_MSG, // registered window message	0,0 ); // user defined parameters	return FALSE;}
还要在CRaclientApp::ExitInstance()中
CloseHandle(m_hOneInstance);
2、激活前一个实例
#define ra_MSG "{D48CA923-4925-41cb-8F56-ABAAAFCEF787}"const UINT ID_RA_MSG =::RegisterWindowMessage(ra_MSG);//注册消息
然后再CmainFrame中添加相应的消息处理函数。

五、 自定义视图类

没有用向导生成的类,因此三个子窗口各自不同,比较简单,不介绍了。
详细代码请参看源程序。还有一个数据库版本的,没有更高的价值,因此没拿出来现丑。
错误和不足请看客们指出,共同研究。
Email:[email protected]