2014-01-06 98 views

回答

0

通常,子窗口的大小,位置會在小孩的init代碼中改變。 如果在父窗口代碼中更改此值,則必須始終檢查子窗口句柄值是否有效。 我輸入此代碼WM_CREATE處理程序CAboutDlg

int CAboutDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
    if (CDialogEx::OnCreate(lpCreateStruct) == -1) 
     return -1; 

    // TODO: Add your specialized creation code here 

    RECT desktop; 

    const HWND hDesktop = ::GetDesktopWindow(); 
    ::GetWindowRect(hDesktop,&desktop); 

    MoveWindow(&desktop,TRUE); 

    return 0; 
} 
+0

我創建了一個對話框,CFormView SDI顯示它。但是,我無法調整對話框的大小。我不關心對話框的其他控件,只是對話框。 –

+0

另外,我無法獲得初始對話框的句柄。 –

+0

@PaulGuzis由於從CWnd派生的Mfc對話框,您只需使用'm_hWnd'成員作爲對話句柄。 – hyun

2

在SDI程序中,通過大型機窗口調整對話框的大小以填充客戶區。調整框架窗口的大小,隨後將出現對話框。將這個FormView控件的OnInitialUpdate中

AfxGetMainWnd()->MoveWindow(....); 
0

關鍵的事情:

  1. 最小尺寸 - 設置 - 對話框模板 - 或表格視圖 - 你做是絕對的最小尺寸CFormview將使用

  2. MAXIMUM SIZE - 自動調整大小 - 對話框模板沒有最大值。 CFormview動態地擴展它以適合CMainFrame窗口。

  3. 開始模板尺寸的應用 當然,你可能想在CMainFrame窗口儘可能緊湊,這是使用的代碼3條強制性線在你的CFormView實現:: OnInitialUpdate中()

void CSimpleSDIView::OnInitialUpdate() {

CFormView::OnInitialUpdate(); 
GetParentFrame()->RecalcLayout(); 
ResizeParentToFit(); // FORCES CMainframe to be as small as the dialog template 

}

  1. 強制CMainFrame限制最小尺寸 - 如有必要。使用WM_GETMINMAXINFO下面的代碼:

void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI) {

lpMMI->ptMinTrackSize.x = 500; // absolute minimum width for CMainFrame 
lpMMI->ptMinTrackSize.y = 500; // absolute minimum height for CMainFrame 

CFrameWnd::OnGetMinMaxInfo(lpMMI); 

}

  • SET TO理想尺寸這可以在的CFormView實現:: OnInitialUpdate通過使用下面的代碼(仍然需要步驟3):

    AfxGetMainWnd()->MoveWindow(0, 0, 1024, 600, 1); 
    
  • TWEAK控制倉位隨着MFC的東西帶的出現正在尋找好的,但使用步驟1 - 5不,無需額外的調整工作。基本上,功能區會發送一個額外的調整大小,因爲即使您發送了最小的模板大小,由於額外調整大小,事情會有點不成比例 - 主要是因爲功能區內的組可能會被摺疊成一個單一的圖標。 **在做之前STEP 5 **,你可能要添加以下代碼:

  • if(::GetSystemMetrics(SM_CXSCREEN) > 1024) {

    RECT r; 
        CWnd *someControl = GetDlgItem(IDC_SOMECONTROL); 
        someControl->GetWindowRect(&r); 
        ScreenToClient(&r); 
    
         r.right += 300;//r.right += 30; 
          r.bottom += 150; 
          someControl->MoveWindow(&r) 
         } 
    

    說明:

    簡短的回答,你不!基本上,我有同樣的問題,做了一個對話框模板在CFormView派生類中使用。當我想像任何普通窗口一樣展開CMainFrame窗口時,我希望formview的內容相應地調整大小。這對一些代碼來說工作得很好,但是當我把窗戶做得很小時,問題就來了。當我這樣做時,我會得到這些醜陋的滾動條。我的想法是滾動條在那裏,因爲他們試圖尊重原始對話框模板大小。那個想法是正確的!例如,您將對話框設置爲500 x 500,如果調整大小小於此值,您將獲得滾動條 - 因爲CFormview尊重應用程序必須處於最小500x500。最小尺寸由您製作的模板控制,您無法動態縮小尺寸。

    相關問題