OpenGL + MFC界面設置優化

一、最大化子窗口並隱藏標題欄:
1.在類視圖中打開CChildFrame的類嚮導,添加OnCreate函數:
這裏寫圖片描述
這裏寫圖片描述
(On…什麼的函數都是在消息那個標籤裏,輸入後面的單詞就能快速查找到了)
鍵入代碼:

int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
        return -1;

    // 隱藏最大化,最小化,關閉按鈕  
    ModifyStyle(WS_SYSMENU, 0);


    // 隱藏標題欄  
    ModifyStyle(WS_CAPTION, 0);
    // TODO:  在此添加您專用的創建代碼

    return 0;
}

這裏注意一下,如果是VS2010以及之前的版本,隱藏按鈕的函數要註釋掉,否則會編譯報錯。(在學校機房碰見的問題)

2.將子窗口最大化,並隱藏標題(這個標題顯示在主窗口的標題旁,看起來很難看,建議隱藏了)(類嚮導虛函數裏)

BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    // TODO:  在此處通過修改 CREATESTRUCT cs 來修改窗口類或樣式
    if (!CMDIChildWnd::PreCreateWindow(cs))
        return FALSE;
    cs.style &= ~FWS_ADDTOTITLE | WS_VISIBLE | WS_MAXIMIZE;//取消窗口上的文檔標題
    cs.style |= WS_VISIBLE | WS_MAXIMIZE; // 最大化
    return TRUE;
}

二、修改主窗口的標題:
那當然是修改主窗口的PreCreateWindow函數啦。
這裏寫圖片描述

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    if (!CMDIFrameWnd::PreCreateWindow(cs))
        return FALSE;
    // TODO:  在此處通過修改
    //  CREATESTRUCT cs 來修改窗口類或樣式
    cs.style &= ~FWS_ADDTOTITLE | WS_VISIBLE | WS_MAXIMIZE;//取消窗口上的文檔標題
    cs.lpszName = _T("直線剪裁"); // 文件上方標題重命名
    return TRUE;
}

三、啓動程序時自動佔滿屏幕(我的電腦比較奇怪,這個操作用起來效果不好):
仍然是修改CMainFrame類,在OnCreate函數的return 0前面加上以下代碼:

RECT rc;
    ::GetWindowRect(::GetDesktopWindow(), &rc);
    this->MoveWindow(&rc);

四、右下角的NUM太醜了,改成顯示當前時間好了:
在CMainFrame中添加Timer函數:
這裏寫圖片描述

void CMainFrame::OnTimer(UINT_PTR nIDEvent)
{
    // TODO:  在此添加消息處理程序代碼和/或調用默認值
    CTime t = CTime::GetCurrentTime();
    CString str = t.Format("當前時間 %H:%M:%S");

    CClientDC dc(this);
    CSize sz = dc.GetTextExtent(str);
    int index = 0;
    index = m_wndStatusBar.CommandToIndex(ID_INDICATOR_NUM);
    m_wndStatusBar.SetPaneInfo(index, ID_INDICATOR_NUM, SBPS_NORMAL, sz.cx);
    m_wndStatusBar.SetPaneText(index, str);
    CMDIFrameWnd::OnTimer(nIDEvent);
}

然後在窗口創建時啓動這個函數,在OnCreate裏添加:

SetTimer(1, 10, NULL);

五、去掉多餘的頂部菜單:
這裏寫圖片描述
右鍵刪除掉不想要的菜單就行啦。


六、刪除工具欄:(OnCreate函數註釋掉下面的代碼)

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;

    /*if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
        !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
    {
        TRACE0("未能創建工具欄\n");
        return -1;      // 未能創建
    }*/

    if (!m_wndStatusBar.Create(this))
    {
        TRACE0("未能創建狀態欄\n");
        return -1;      // 未能創建
    }
    m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));

    // TODO:  如果不需要可停靠工具欄,則刪除這三行
    /*m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar);*/


    return 0;
}

七、解決縮放窗口閃爍的問題:
在View類修改消息函數OnEraseBkgnd()

BOOL CMFCTestView::OnEraseBkgnd(CDC* pDC)
{
    // TODO:  在此添加消息處理程序代碼和/或調用默認值
    return true;
    // return CView::OnEraseBkgnd(pDC);
}

最後的效果是這樣的:
這裏寫圖片描述

發佈了688 篇原創文章 · 獲贊 134 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章