2013-04-24 261 views
1

我不太明白這是如何工作的。所以我做了我的對話框..或盒子。而且我不知道如何讓它們出現在我的代碼中。現在我試圖讓他們在我開始我的程序時彈出,這樣我就可以基本瞭解它是如何工作的。打開對話框

switch (message) 
{ 
case WM_CREATE: 
    HINSTANCE hInstance = ((LPCREATESTRUCT) lParam)->hInstance; 
    CreateDialog(hInstance, "Whatever", hwnd, ABOUT_DIALOG); 

這給了我CreateDialog中的一個錯誤,說一個int類型的參數與DLGPROC不兼容。我假設我需要在某處聲明我的對話框?

如果我在第一次啓動窗口時有一個按鈕,我怎麼會知道用戶按下了按鈕?我將再次假設並說我需要在WM_COMMAND命令的某處捕獲它?

+1

爲此目的MSDN存在。 – chris 2013-04-24 20:35:27

+1

並相信我我看了,您的評論是無用的 – 2013-04-24 20:36:36

+0

好吧,'WM_COMMAND'文章包含所有與處理控制通知相關的信息,'CreateDialog'文章有一個方便的鏈接到文章的過程。 – chris 2013-04-24 20:38:04

回答

3

最後一個參數,你通過ABOUT_DIALOG的東西需要是DLGPROC。這是這種形式的函數:

INT_PTR CALLBACK DialogProc(
    HWND hwndDlg, 
    UINT uMsg, 
    WPARAM wParam, 
    LPARAM lParam 
); 

編譯器告訴你,ABOUT_DIALOG不是形式的功能。事實上,編譯器告訴你,ABOUT_DIALOG是一個int這絕對不是正確的!

爲了得到它,並用默認無所事事對話框程序運行實現這樣的:

INT_PTR CALLBACK DialogProc(
    HWND hwndDlg, 
    UINT uMsg, 
    WPARAM wParam, 
    LPARAM lParam 
) 
{ 
    return FALSE; 
} 

documentation這樣說:

通常,對話框程序應返回TRUE如果它處理了該消息,並且如果它沒有處理,則返回FALSE。如果對話框過程返回FALSE,則對話框管理器將執行默認對話框操作以響應該消息。

所以通過返回FALSE我們要求默認處理。

一旦啓動並運行了對話框,就可以使用所需的任何功能填寫對話框過程。

+0

這工作,但我遇到的問題是現在它說我無法打開我的文件的寫作..它不打開在背景或任何東西,我不明白爲什麼。其他項目開放並運行得很好。 – 2013-04-24 21:01:48

+0

關於編寫文件的問題沒有任何內容。 – 2013-04-24 21:08:00

+0

@JesseMoreland,在寫你的可執行文件時有點麻煩。如果沒有別的,你可以註銷並開啓。 – chris 2013-04-24 21:41:32