2016-07-07 62 views
2

我有MFC SDI應用程序。
它具有功能區,狀態欄,屬性窗口,...更改客戶區視圖

我需要使視圖的客戶區域爲x % 16。 所以我不能調整整個窗口,但我需要調整CMyView可以被16個像素整除。

有沒有辦法做到這一點?

此代碼不起作用:=(

void CMyView::OnSize(UINT nType, int cx, int cy) 
{ 
    cx -= cx % 16; 
    cy -= cy % 16; 

    CView::OnSize(nType, cx, cy); 

    RECT wr = { 0, 0, cx, cy }; 
    AdjustWindowRect(&wr, WS_OVERLAPPEDWINDOW, FALSE); 
} 
+0

'AdjustWindowRect'不調節任何東西,它僅僅_calculates窗口矩形的所需尺寸,基於所期望的客戶端 - 矩形size_(引文從[MS文檔】(HTTPS:// MSDN .microsoft.com/EN-US /庫/窗/桌面/ ms632665(V = vs.85)的.aspx))。並調用不同大小的'CView :: OnSize'並沒有太大的作用(不記得我讀過的文檔的哪一部分)。 –

+0

你看過使用[MoveWindow](https://msdn.microsoft.com/en-us/library/windows/desktop/ms633534(v = vs.85).aspx)嗎? –

+0

我發現了一些解決方法:1.爲視圖創建額外的子窗口; 2.在調整大小時將其對齊16個像素並居中視圖。 –

回答

3

處理這WM_SIZE/OnSize是爲時已晚,因爲窗口已到那個時候調整使用ON_WM_WINDOWPOSCHANGING代替,以監視對窗口大小和應用以下。變化:

void CMyWnd::OnWindowPosChanging(WINDOWPOS* wpos) 
{ 
    wpos->cx -= wpos->cx % 16; 
    wpos->cy -= wpos->cy % 16; 
    __super::OnWindowPosChanging(wpos); 
}