簡體   English   中英

如何在Win32中使用Dialog資源?

[英]How do I use Dialog resources in Win32?

沒有資源,我可以使用CreateWindow()CreateWindowEx()以及WndProc()的復雜數組創建UI來處理事件。

我注意到如果右鍵單擊資源視圖並單擊“添加資源”,則可以繪制一個包含所有控件的對話框。 如果像我通常使用C#那樣繪制界面,這將為我節省大量時間。

使用資源編輯器繪制界面后,如何使用代碼創建窗口? 有人可以提供一個帶有按鈕的非常簡單的示例,並請演示如何處理該按鈕上的WM_COMMAND事件嗎?

另外,這通常是人們創建GUI的方式嗎? 這樣做會不會有任何損失? 即使在C#中,我也經常不得不用自己的代碼生成的UI來補充設計器生成的UI,但是大多數時候我很高興使用設計器。

在資源編輯器中創建對話框后,調用CreateDialog (無模式對話框;您需要像使用CreateWindow一樣手動分派消息)或DialogBox (模式對話框;該函數直到關閉對話框后才會返回。)給您)以顯示對話框。 就像將窗口proc傳遞給RegisterClass一樣,您也將對話框proc傳遞給那些用於對話框回調的函數。 DialogProc的示例如下所示:

BOOL DialogProc( HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam ){
    switch( iMessage ){
    case WM_COMMAND:
        switch( LOWORD( wParam ) ){
        case BTOK:
            MessageBox( hDlg, "Hello, World!", NULL, NULL );
            return TRUE;
            break;
        }
        break;
    }
    return FALSE;
}

這是創建對話框的基本方法。 更復雜的方法通常涉及OOP,通常將每個資源(按鈕,窗口等)包裝為C ++對象或使用MFC。

如果您已將按鈕或任何控件放在某個對話框上,則該控件已經處於創建狀態。 為了在此對話框上處理這些子控件的消息,您必須在實現您的對話框的類中重寫OnCommand方法。

例如:

//CDialog_ControlDlg is my Dialog class derived from CDialog

//IDC_BUTTON_SAMPLE is the ID of the button which was palced on the dialog in the resource Editor..

BOOL CDialog_ControlDlg::OnCommand(WPARAM wParam,LPARAM lparam){
      int iNotiFicationMsg=HIWORD(wParam);//This is thenotification Msg from the child control
      int iCommandId=LOWORD(wParam);//And Control ID of the Child control which caused that Msg
      BOOL result=FALSE;
      switch(iCommandId){
    case IDC_BUTTON_SAMPLE:
        if(iNotiFicationMsg==BN_CLICKED)
        {
         //Your Code for handling this type of Msg for this control..

        }
        break;
    default:
    {
        //Specific Code;

    }

    return result;
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM