2014-08-29 80 views
0

我對C++編程相當陌生,所以這可能是一個非常簡單的修復。我最近創建了一個基本的WinMain窗口。當我從IDE或.exe文件運行程序時,應用程序無法以適當的大小打開。爲什麼WinAPI不能創建配置大小的窗口?

enter image description here

我可以調整窗口的大小,但我不知道爲什麼它不以該尺寸設定打開。

#define WIN32_LEAN_AND_MEAN 
#include <windows.h> 

// Function prototypes 
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int); 
bool CreateMainWindow(HINSTANCE, int); 
LRESULT WINAPI WinProc(HWND, UINT, WPARAM, LPARAM); 
// global variable 
HINSTANCE hinst; 

// Constants 
const char CLASS_NAME[] = "WinMain"; 
const char APP_TITLE[] = "Hello World"; 
const char WINDOW_WIDTH = 400; 
const char WINDOW_HEIGHT = 400; 

//================================== 
// Starting point for the windows application 
// Parameters are 
// hInstance. Handle to the current instance of the application 
// hPrevInstance. Always NULL, obsolete parameter 
// lpCmdLine. Pointer to null-terminated string of command arguements 
// nCmdShow. Specifies how the window is to be shown 
//================================= 
int WINAPI WinMain(HINSTANCE hInstance, 
    HINSTANCE hPrevInstance, 
    LPSTR  lpCmdLine, 
    int   nCmdShow) 

{ 
    MSG msg; 
    // Create thw window 
    if (!CreateMainWindow(hInstance, nCmdShow)) 
     return false; 
    // Main message loop 
    int done = 0; 
    while (!done) 
    { 
     // PeekMessage is a non blocking message for Windows messages 
     if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) 
     { 
      // Look for quit message 
      if (msg.message == WM_QUIT) 
       done = 1; 
      // Decode and pass messages on to WinProc 
      TranslateMessage(&msg); 
      DispatchMessage(&msg); 

     } 

    } 
    return msg.wParam; 

    } 

// Window event callback function 
LRESULT WINAPI WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) 
    { 
    switch (msg) 
    { 
    case WM_DESTROY: 
      //Tell windows to kill this program 
      PostQuitMessage(0); 
      return 0; 
    } 
    return DefWindowProc(hWnd, msg, wParam, lParam); 

} 

// Create the window, returns False on error 
bool CreateMainWindow(HINSTANCE hInstance, int nCmdShow) 
{ 
    WNDCLASSEX wcx; 
    HWND hwnd; 

    // Fill in the window class structure with parameters 
    // That describe the main window 
    wcx.cbSize = sizeof(wcx);    // Size of the structure 
    wcx.style = CS_HREDRAW | CS_VREDRAW; // Redraw if the size changes 
    wcx.lpfnWndProc = WinProc;    // Points to windows procedure 
    wcx.cbClsExtra = 0;      // No extra class memory 
    wcx.cbWndExtra = 0;      // No extra window memory 
    wcx.hInstance = hInstance; 
    wcx.hIcon = NULL; 
    wcx.hCursor = LoadCursor(NULL, IDC_ARROW);  // Predifined arrow 
    // Background brush 
    wcx.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); 
    wcx.lpszMenuName = NULL; // Name of menu resource 
    wcx.lpszClassName = CLASS_NAME; // Name of window class 
    wcx.hIconSm = NULL; 

    // Register the window class 
    // RegisterClassEx return 0 on error 
    if (RegisterClassEx(&wcx) == 0) // if error 
     return false; 
    // Create Window 
    hwnd = CreateWindow(
     CLASS_NAME,      // Name of window class 
     APP_TITLE,      // Title bar text 
     WS_OVERLAPPEDWINDOW,   // Window style 
     CW_USEDEFAULT,     // Default horizontal postion of window 
     CW_USEDEFAULT,     // Default vertical postion of window 
     WINDOW_WIDTH,     // Width of window 
     WINDOW_HEIGHT,     // Height of window 
     (HWND) NULL,     // No parent window 
     (HMENU) NULL,     // No menu 
     hInstance,      // Handle to application window 
     (LPVOID) NULL);     // No window parameters 
    // If there was an error the window 
    if (!hwnd) 
     return false; 
    // Show the window 
    ShowWindow(hwnd, nCmdShow); 
    // Send a WM_PAINT message to the window procedure 
    UpdateWindow(hwnd); 
     return true; 
} 

回答

7

變化從charint兩個常量定義:

const int WINDOW_WIDTH = 400; 
const int WINDOW_HEIGHT = 400; 

假設一個符號字符是8位,然後char x = 400實際上是設置X爲16

+0

有效和良好斑點點! – Ajay 2014-08-29 12:40:17

+0

不錯,我的+1! – duDE 2014-08-29 12:45:01

+0

你不知道我盯着那段代碼多久了!非常感謝,我不知道爲什麼我的編程書告訴我這樣做。 – PapaSmurf 2014-08-29 12:46:48

相關問題