文档视图应用程序实例
2012-08-24 18:15 BytesLoop 阅读(328) 评论(0) 收藏 举报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;
}
}
作者:skyXnet
邮箱:iwanc@qq.com
出处:http://www.iwanc.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
浙公网安备 33010602011771号