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; }
具有图片背景的 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; } }