2011-12-16 61 views
0

我正在編譯一個簡單的Win32 api程序,但問題是它編譯好,但沒有窗口出現。我在taskmanager中檢查了進程,程序在那裏,但沒有顯示一個窗口。我在Windows 7 32位下使用CodeBlocks IDE 10.05和GNU GCC編譯器。 我知道這裏有一個類似的問題在stackoverflow但解決給出了'=='而不是'='。這裏是代碼:Win32程序編譯,但沒有窗口出現

#include <windows.h> 
#include <tchar.h> 

/* Global Vars */ 
HINSTANCE hInst; 
HWND wndHandle; 
int winWidth = 640; 
int winHeight = 480; 

//func prototypes 
bool InitWindow(HINSTANCE hInst, int width, int height); 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 
/******************************************************** 
* WINMAIN FUNCTION 
*********************************************************/ 
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) 
{ 
hInst = hInstance; 

//app window 

if (!InitWindow(hInst, winWidth, winHeight)) 
{ 
    return false; 
} 

// MESSAGE LOOP 
MSG msg = {0}; 
while (WM_QUIT != msg.message) 
{ 
    //window messages 
    while(PeekMessage(&msg, NULL,0,0, PM_REMOVE) == TRUE) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 
    //additional logic 
} 
return (int)msg.wParam; 
} 

/******************************************************************* 
* InitWindow 
* Inits and creates and main app window 
* Inputs - application instance - HINSTANCE 
      Window width - int 
      Window height - int 
* Outputs - true if successful, false if failed - bool 
*******************************************************************/ 
bool InitWindow(HINSTANCE hInstance, int width, int height) 
{ 
// Register class 
WNDCLASSEX wcex; 
wcex.cbSize = sizeof(WNDCLASSEX); 
wcex.style   = CS_HREDRAW | CS_VREDRAW; 
wcex.lpfnWndProc = WndProc; 
wcex.cbClsExtra  = 0; 
wcex.cbWndExtra  = 0; 
wcex.hInstance  = hInstance; 
wcex.hIcon   = 0; 
wcex.hCursor  = LoadCursor(NULL, IDC_ARROW); 
wcex.hbrBackground = (HBRUSH) + (COLOR_WINDOW+1); 
wcex.lpszMenuName = NULL; 
wcex.lpszClassName = TEXT("DirectX 10 Example"); 
wcex.hIconSm  = 0; 

if(!RegisterClassEx(&wcex)) 
{ 
    return false; 
} 

// resize window 
RECT rect = { 0, 0, width, height }; 
AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, false); 

// create the window from the class above 
wndHandle = CreateWindow( TEXT("DX 10 Example"), 
          TEXT("DX10 WINDOW"), 
          WS_OVERLAPPEDWINDOW, 
          CW_USEDEFAULT, 
          CW_USEDEFAULT, 
          rect.right - rect.left, 
          rect.bottom - rect.top, 
          0, 
          0, 
          hInstance, 
          0); 
if(wndHandle == 0) 
{ 
    return false; 
} 
ShowWindow(wndHandle, SW_SHOW); 
UpdateWindow(wndHandle); 
return true; 
} 
/******************************************************************* 
* WndProc 
* The main window procedure for the application 
* Inputs - application window handle - HWND 
      message sent to the window - UINT 
      wParam of the message being sent - WPARAM 
      lParam of the message being sent - LPARAM 
* Outputs - LRESULT 
*******************************************************************/ 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    switch (message) 
{ 
    // Allow the user to press the escape key to end the application 
    case WM_KEYDOWN: 
     switch(wParam) 
     { 
      // Check if the user hit the escape key 
      case VK_ESCAPE: 
       PostQuitMessage(0); 
      break; 
     } 
    break; 

     // The user hit the close button, close the application 
    case WM_DESTROY: 
      PostQuitMessage(0); 
    break; 
    } 

    return DefWindowProc(hWnd, message, wParam, lParam); 
} 
+0

使用斷言()捕獲錯誤 – 2011-12-16 14:34:08

+0

我建議使用MSVC F。或Windows開發 - 它可以說是最好的Windows編譯器(和快速版是免費的,但也很好) – RageD 2011-12-16 14:50:37

回答

3

你有 wcex.lpszClassName = TEXT( 「DirectX 10的實施例」);

wndHandle = CreateWindow的(TEXT( 「DX 10實施例」), TEXT( 「DX10 WINDOW」),

3

你必須使用相同的類名 「CreateWindow的」 當你使用對於

在你的源代碼 「的RegisterClass」 這兩個不同:

wcex.lpszClassName = TEXT("DirectX 10 Example"); 
... 
wndHandle = CreateWindow(TEXT("DX 10 Example"), ...