Win32 框架文档视图(1)
2011-04-03 15:58 Clingingboy 阅读(1353) 评论(0) 编辑 收藏 举报
5.1 如何禁止框架窗口在标题中显示文档名
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CMDIFrameWnd::PreCreateWindow(cs) )
return FALSE;
//删除FWS_ADDTOTITLE风格
cs.style &= ~FWS_ADDTOTITLE;
return TRUE;
}
修改样式
5.2 如何设置文档的标题
SetTitle方法
BOOL CDemoDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
SetTitle(_T("NewDoc"));
return TRUE;
}
5.3 如何设置框架窗口的标题
两步
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
if( !CMDIChildWnd::PreCreateWindow(cs) )
return FALSE;
//删除FWS_ADDTOTITLE风格
cs.style &= ~FWS_ADDTOTITLE;
return TRUE;
}
使用SetWindowText函数
int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
return -1;
SetWindowText(_T("Child Frame"));
return 0;
}
5.4 如何使主框架窗口初始时最大化或最小化
即ShowWindow函数的参数
//最大化
m_nCmdShow = SW_SHOWMAXIMIZED;
// //最小化
// m_nCmdShow = SW_SHOWMINIMIZED;
pMainFrame->ShowWindow(m_nCmdShow);
5.5 如何使MDI子框架窗口初始时最大化或最小化
重写ActivateFrame方法
void CChildFrame::ActivateFrame(int nCmdShow)
{
//最大化
nCmdShow = SW_SHOWMAXIMIZED;
// //最小化
// nCmdShow = SW_SHOWMINIMIZED
CMDIChildWnd::ActivateFrame(nCmdShow);
}
5.6 如何使框架窗口保持最小化
同上方法
//最小化
m_nCmdShow = SW_SHOWMINIMIZED;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
5.7 如何设置框架窗口最大化时的大小和位置
OnGetMinMaxInfo方法,即WM_GETMINMAXINFO消息方法
参考:http://blog.csdn.net/FlowShell/archive/2009/11/10/4795581.aspx
当最大化时则有如下限制
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
//设置窗口最大化时的大小
lpMMI->ptMaxSize.x = 800;
lpMMI->ptMaxSize.y = 600;
//设置窗口最大化时的位置
lpMMI->ptMaxPosition.x = 0;
lpMMI->ptMaxPosition.y = 0;
CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
5.8 如何设置框架窗口的大小范围
还是OnGetMinMaxInfo方法的使用,设置的参数发生了变化.
犹如MaxWidth,MaxHeight和MixWidth,MixHeight
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
//设置窗口的最大尺寸
lpMMI->ptMaxTrackSize.x = 800;
lpMMI->ptMaxTrackSize.y = 600;
//设置窗口的最小尺寸
lpMMI->ptMinTrackSize.x = 400;
lpMMI->ptMinTrackSize.y = 300;
CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
5.9 如何保存或恢复框架窗口的状态
在关闭窗体时,将窗体相关状态信息写入注册表,下次初始化化时,读取注册表信息
WriteProfileInt和GetProfileInt方法,
ActivateFrame事件和OnClose事件
void CMainFrame::ActivateFrame(int nCmdShow)
{
if (m_bFirst)
{
m_bFirst = FALSE;
WINDOWPLACEMENT* pWndpl = new WINDOWPLACEMENT;
pWndpl->length = sizeof(WINDOWPLACEMENT);
CWinApp* pApp = AfxGetApp();
//恢复窗口位置
pWndpl->flags = pApp->GetProfileInt(_T("WINDOWPLACEMENT"),
_T("FLAGS"), 0);
pWndpl->showCmd = pApp->GetProfileInt(_T("WINDOWPLACEMENT"),
_T("SHOWCMD"), 0);
nCmdShow = pWndpl->showCmd;
pWndpl->ptMinPosition.x = pApp->GetProfileInt(_T("WINDOWPLACEMENT"),
_T("MINX"), 0);
pWndpl->ptMinPosition.y = pApp->GetProfileInt(_T("WINDOWPLACEMENT"),
_T("MINY"), 0);
pWndpl->ptMaxPosition.x = pApp->GetProfileInt(_T("WINDOWPLACEMENT"),
_T("MAXX"), 0);
pWndpl->ptMaxPosition.y = pApp->GetProfileInt(_T("WINDOWPLACEMENT"),
_T("MAXY"), 0);
pWndpl->rcNormalPosition.top = pApp->GetProfileInt(_T("WINDOWPLACEMENT"),
_T("TOP"), 0);
pWndpl->rcNormalPosition.left = pApp->GetProfileInt(_T("WINDOWPLACEMENT"),
_T("LEFT"), 0);
pWndpl->rcNormalPosition.right = pApp->GetProfileInt(_T("WINDOWPLACEMENT"),
_T("RIGHT"), 0);
pWndpl->rcNormalPosition.bottom = pApp->GetProfileInt(_T("WINDOWPLACEMENT"),
_T("BOTTOM"), 0);
//设置窗口位置
SetWindowPlacement(pWndpl);
delete pWndpl;
}
CFrameWnd::ActivateFrame(nCmdShow);
}
void CMainFrame::OnClose()
{
WINDOWPLACEMENT* pWndpl = new WINDOWPLACEMENT;
pWndpl->length = sizeof(WINDOWPLACEMENT);
//获得窗口位置
GetWindowPlacement(pWndpl);
CWinApp* pApp = AfxGetApp();
//保存窗口位置
pApp->WriteProfileInt(_T("WINDOWPLACEMENT"), _T("FLAGS"),
pWndpl->flags);
pApp->WriteProfileInt(_T("WINDOWPLACEMENT"), _T("SHOWCMD"),
pWndpl->showCmd);
pApp->WriteProfileInt(_T("WINDOWPLACEMENT"), _T("MINX"),
pWndpl->ptMinPosition.x);
pApp->WriteProfileInt(_T("WINDOWPLACEMENT"), _T("MINY"),
pWndpl->ptMinPosition.y);
pApp->WriteProfileInt(_T("WINDOWPLACEMENT"), _T("MAXX"),
pWndpl->ptMaxPosition.x);
pApp->WriteProfileInt(_T("WINDOWPLACEMENT"), _T("MAXY"),
pWndpl->ptMaxPosition.y);
pApp->WriteProfileInt(_T("WINDOWPLACEMENT"), _T("TOP"),
pWndpl->rcNormalPosition.left);
pApp->WriteProfileInt(_T("WINDOWPLACEMENT"), _T("LEFT"),
pWndpl->rcNormalPosition.top);
pApp->WriteProfileInt(_T("WINDOWPLACEMENT"), _T("RIGHT"),
pWndpl->rcNormalPosition.right);
pApp->WriteProfileInt(_T("WINDOWPLACEMENT"), _T("BOTTOM"),
pWndpl->rcNormalPosition.bottom);
delete pWndpl;
CFrameWnd::OnClose();
}