MFC个人问答

Edit on Github

MDI 程序,如何在启动时不自动建立新文档?

BOOL CPoissonApp::InitInstance()
{
    ......
    CCommandLineInfo cmdInfo;
    // Alter behaviour to not open window immediately
    cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
}

如何启动窗口时,主窗口和子窗口就最大化?

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT cs)
{
    cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE | WS_THICKFRAME |
        WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE;
    return TRUE;
}

BOOL CPoissonApp::InitInstance()
{
    ......
    // The main window has been initialized, so show and update it.
    pMainFrame- ShowWindow(SW_SHOWMAXIMIZED);//正常显示改为 SW_SHOWNORMAL
    pMainFrame- UpdateWindow();
    return TRUE;
}

BOOL CChildFrame::PreCreateWindow(CREATESTRUCT cs)
{
    ......
    cs.style = WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU |
        FWS_ADDTOTITLE | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE;
    return TRUE;
} 

请问如何使用代码改变子窗口的大小?

在用MFC库开发的应用程序中, 视图是被框架窗口所围绕的一个子窗口。为了改变一个视图的大小,可以通过在视图的InitialUpdate(...)中调用函数GetParentFrame()来得到框架窗口的指针,然后调用函数MoveWindow()/SetWindowPos()来改变父窗口的大小。当父框架窗口改变大小时,视图也会自动地改变大小来适应父窗口。如下:

CFrameWnd *pFrame = this->GetParentFrame(); 

if (pFrame)
{ 
    pFrame->SetWindowPos(NULL, 0, 0, 160, 160, SWP_NOZORDER); 
}

ON_UPDATE_COMMAND_UI_RANGE 的用法

afx_msg void OnUpdateMenu(CCmdUI *pCmdUI);

在 cpp 文件 messgae map 处添加 ON_UPDATE_COMMAND_UI_RANGE( id2, id2, OnUpdateMenu)id1id2 是你的菜单项的起始和最终ID,在 OnUpdateMenu(CCmdUI *pCmdUI) 中通过判断pCmdUIm_nIDm_nIndex来实现你自己的逻辑。

为 MFC 程序添加 XP 主题

C***App的cpp中:

BOOL CFaceliftApp::InitInstance()
{
    // 主题风格
    InitCommonControls();
} 

参考

http://hi.baidu.com/shilyx/blog/item/837fa5ec7babc62663d09f3f.html *