2013-10-17 34 views
0

你好,歡迎大家.. 我想建立一個使用sdk 7.1的win32應用程序,我使用visual C++ 2012資源編輯器創建對話框,我複製RESOURCE.RC和RESOURCE.H我的文件夾,我寫這個簡單的main.cpp文件:我的對話框沒有顯示當我編譯使用sdk 7.1,

#include <windowsx.h> 
#include <Windows.h> 
#include <tchar.h> 

#include "resource.h" 

#define my_PROCESS_MESSAGE(hWnd, message, fn) \ 
    case(message): \ 
     return(\ 
      SetDlgMsgResult(hWnd, uMsg, \ 
       HANDLE_##message((hWnd), (wParam), (lParam), (fn)))) \ 

LRESULT CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM); 
BOOL Cls_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam); 
void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify); 

int WINAPI _tWinMain( HINSTANCE hInstance, 
         HINSTANCE, 
         LPTSTR, 
         int   iCmdLine ) 
{ 
    DialogBoxParam( hInstance, 
         MAKEINTRESOURCE(IDD_INJECTOR), 
         NULL, 
         (DLGPROC) DlgProc, 
         NULL 
         ); 

    return FALSE; 
} 

LRESULT CALLBACK DlgProc( HWND hwnd, 
          UINT uMsg, 
          WPARAM wParam, 
          LPARAM lParam ) 
{ 
    switch (uMsg) 
    { 
     my_PROCESS_MESSAGE(hwnd, WM_INITDIALOG, Cls_OnInitDialog); 
     my_PROCESS_MESSAGE(hwnd, WM_COMMAND, Cls_OnCommand); 

    default: 
     break; 
    } 

    return DefWindowProc(hwnd, uMsg, wParam, lParam); 
} 


BOOL Cls_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) 
{ 


    return TRUE; 
} 

void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) 
{ 
    switch(id) 
    { 
    case IDCANCEL: 
     EndDialog(hwnd, id); 
     break; 

    default: 
     break; 
    } 
} 

然後我用下面的命令行編譯我的代碼,我至極這個論壇上發現

cl main.cpp /link /SUBSYSTEM:WINDOWS user32.lib 

我的問題是我的對話框沒有顯示出來,當我使用procexp,t o看看會發生什麼,我發現我的應用程序是在同一時間創建並關閉的,而我想知道的是它在visual C++ 2012上的工作很好。

我的sdk 7.1,安裝正確,我測試了它沒有任何資源文件中的基本窗口

任何想法,生病是真的很感謝

最佳, Zirek

+1

檢查DialogBoxParam'的'的返回值,如果它是'-1'檢查GetLastError'的'的返回值。這可能有助於說明發生了什麼。 – icabod

回答

1

你需要「編譯」與資源編譯器的資源文件:

rc -r resource.rc 

這會給你resource.res。您需要鏈接,當你創建你的可執行文件中:

cl main.cpp resource.res /link /SUBSYSTEM:WINDOWS user32.lib 

我沒有測試你的代碼,看看它是否工作,然後,但至少與.res文件鏈接中,它站在免得一些機會加工。

+0

傑裏棺材,謝謝你,你救了我的一天,從Zirek致敬 我面臨兩個其他問題,我很快解決,我想包括新的解決方案,以防任何人再次面對這個問題。 結束線錯誤......,這個錯誤是編譯器上的一個錯誤,你只需要在resource.h,ET瞧,第一個問題解決的末尾添加一對空行。 afxres.h未找到,這是一個mfc文件,只需在Resource.rc中將其替換爲windows.h,然後重新編譯即可 就是這樣,再次感謝您Jerry Coffin。 – zirek

0

這不是你的唯一的問題,但是,從MSDN

雖然對話框過程類似於一個窗口過程,它必須調用DefWindowProc函數來處理垃圾信息。不需要的消息由對話框窗口過程在內部處理。

[着重號。]

+0

我改變:返回FALSE,問題是,我需要編譯資源文件1st然後繼續,TNX。 – zirek

相關問題