文档视图应用程序实例

1.窗体操作 实现启动时无子窗口的 MDI 程序

BOOL CNoChildWndApp::InitInstance()
{
	CCommandLineInfo cmdInfo;         //命令行信息类
	ParseCommandLine(cmdInfo);

	//禁止程序启动时自动创建子窗口
	cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
	cmdInfo.m_strFileName = "c:\\test.txt";
}

实现 MDI 应用程序启动时子窗口默认最大化

BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CMDIChildWnd::PreCreateWindow(cs) )
		return FALSE;
	//修改子窗口的类型为最大化样式
	cs.style = cs.style | WS_MAXIMIZE | WS_VISIBLE;
	return TRUE;
}

MDI 应用程序启动时主窗口默认最大化

BOOL CNoChildWndApp::InitInstance()
{
	//pMainFrame->ShowWindow(m_nCmdShow);               //原程序代码
	pMainFrame->ShowWindow(SW_SHOWMAXIMIZED); //修改的代码
	pMainFrame->UpdateWindow();

	return TRUE;
}
  • SW_HIDE   隐藏窗口,激活另外一个窗口.
  • SW_MINIMIZE   最小化窗口,激活另外一个窗口.
  • SW_RESTORE   显示窗口.如果窗口是最大化或最小化,显示为原来大小.
  • SW_SHOW   显示窗口,窗口处于活动状态.
  • SW_SHOWMAXIMIZED   最大化显示窗口,窗口处于活动状态.
  • SW_SHOWMINIMIZED   最小化显示窗口,窗口处于活动状态.
  • SW_SHOWMINNOACTIVE   最小化窗口,保持原来活动状态.
  • SW_SHOWNA   保持原活动状态显示窗口.
  • SW_SHOWNOACTIVATE   以最近的大小位置显示窗口.
  • SW_SHOWNORMAL   显示窗口.如果窗口是最大化或最小化,显示为原来大小.  

具有图片背景的 MDI 主窗口①导入背景位图 IDB_BITMAP1. ②添加新类 CBgWnd(基类:generic CWnd). ③重载 CBgWnd 类中的 OnEraseBkgnd(CDC* pDC)函数.

BOOL CBgWnd::OnEraseBkgnd(CDC* pDC) 
{
	CRect rectClient;				// 客户区
	CDC dcMen;						// 内存设备描述表 
	CBitmap bmp;					// 位图对象 
	bmp.LoadBitmap(IDB_BITMAP1);	// 从资源加载位图
	
	BITMAP tmpBitmap; 
	bmp.GetObject(sizeof(BITMAP), &tmpBitmap); 
	CSize bmpSize(tmpBitmap.bmWidth, tmpBitmap.bmHeight);	// 得到位图的大小 
	
	dcMen.CreateCompatibleDC(pDC);							// 创建兼容的设备描述表 
	CBitmap *pOld=dcMen.SelectObject(&bmp);					// 选入新的位图对象并保存旧的位图对象 
	GetClientRect(&rectClient);									// 取得客户区的大小 
	// 从内存向屏幕复制位图对象 
	pDC->StretchBlt(rectClient.left, rectClient.top, rectClient.Width(), rectClient.Height(), 
		&dcMen, 0, 0, bmpSize.cx, bmpSize.cy, SRCCOPY); 
	
	dcMen.SelectObject(pOld);		// 恢复旧的位图对象 
	dcMen.DeleteDC();				// 删除内存设备描述表
	return true;
}

④重载 CBgWnd 类中的 OnSize(UINT nType,int cx,int cy)函数.

void CBgWnd::OnSize(UINT nType, int cx, int cy) 
{
	CWnd::OnSize(nType, cx, cy);
	Invalidate();	
}

⑤在 CMainFrame 类中增加 CBgWnd 类型变量.

private:
	CBgWnd m_wndBg;

⑥CMainFrame 类中添加实现代码.

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// 把m_wndBg子类化为主窗口的客户窗口
	if(!m_wndBg.SubclassWindow(m_hWndMDIClient))
	{
		TRACE("Fail to subclass MDI client window\n");
		return -1;
	}
}
原文地址:https://www.cnblogs.com/iwanc/p/2654625.html