Другие языки программирования и технологии

C++ Win32 API - Как создать окно фиксированного размера?

Собственно, создаётся главное окно: как сделать его конкретным расмером (допустим, 640x480) и сделать невозможным его растягивание, то есть размер всегда фиксированный?
#include <windows.h>

LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
    switch(Message) {
        case WM_DESTROY: {
            PostQuitMessage(0);
            break;
        }
        default:
            return DefWindowProc(hwnd, Message, wParam, lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    WNDCLASSEX wc;
    HWND hwnd;
    MSG Msg;

    memset(&wc,0,sizeof(wc));
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.lpfnWndProc = WndProc;
    wc.hInstance    = hInstance;
    wc.hCursor    = LoadCursor(NULL, IDC_ARROW);
   
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszClassName = "WindowClass";
    wc.hIcon        = LoadIcon(NULL, IDI_APPLICATION);
    wc.hIconSm    = LoadIcon(NULL, IDI_APPLICATION);

    if(!RegisterClassEx(&wc)) {
        MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }

    hwnd = CreateWindowEx(0, "WindowClass", "WinApp",
        WS_VISIBLE| WS_SYSMENU | WS_MINIMIZEBOX,
        CW_USEDEFAULT, CW_USEDEFAULT,
        640, 480, NULL, NULL, hInstance, NULL);

    if(hwnd == NULL) {
        MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }

    while(GetMessage(&Msg, NULL, 0, 0) > 0) { /* If no error is received... */
        TranslateMessage(&Msg); /* Translate key codes to chars if present */
        DispatchMessage(&Msg); /* Send it to WndProc */
    }
    return Msg.wParam;
}
Данил Шайхутдинов
Данил Шайхутдинов
50 160
Лучший ответ
Вот так. http://pastebin.com/8t7vjpTh

Procedure WindowCallback(hWnd, Msg, wParam, lParam)

Select Msg
Case #WM_CLOSE
DestroyWindow_(hWnd)
Case #WM_DESTROY
PostQuitMessage_(0) : Result = 0
Default
Result = DefWindowProc_(hWnd, Msg, wParam, lParam)
EndSelect

ProcedureReturn Result
EndProcedure

InitCommonControls_()
DefaultFont = GetStockObject_(#DEFAULT_GUI_FONT)

WindowClass.s = "PureBasic_Win"
wc.WNDCLASSEX
wc\cbsize = SizeOf(WNDCLASSEX)
wc\lpfnWndProc = @WindowCallback()
wc\hCursor = LoadCursor_(0, #IDC_ARROW)
wc\hbrBackground = #COLOR_WINDOW
wc\lpszClassName = @WindowClass
RegisterClassEx_(@wc)

hWndMain = CreateWindowEx_(0, WindowClass, "", #WS_SYSMENU | #WS_MINIMIZEBOX, 100, 100, 640, 480, 0, 0, 0, 0)

ShowWindow_(hWndMain, #SW_SHOWDEFAULT)
UpdateWindow_(hWndMain);

While GetMessage_(msg.MSG, #Null, 0, 0 )
TranslateMessage_(msg)
DispatchMessage_(msg)
Wend
End
Бродяга Бородач А можно комментарии? А то у меня походу вообще аж синтаксис другой