天天看點

win32 建立視窗

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

// 常量定義
//
#define _WINDOWS_CLASS_NAME _T("Win32")
#define _WINDOWS_TITLE_NAME _T("SampleWindow by wjh")
const UINT _WINDOWS_WIDTH = 640;
const UINT _WINDOWS_HEIGHT = 480;

// 全局變量定義
//
HWND g_hWndMain;        //視窗句柄
HINSTANCE g_hInsApp;    //視窗程序執行個體
HDC g_RenderDC;         //繪圖用

// 函數聲明
//
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);   //視窗回調函數
WNDCLASSEX WinClassRegister(HINSTANCE hInstance);
int APIENTRY _tWinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPTSTR lpCmdLine,
    int nCmdShow
    )
{
    WNDCLASSEX wndclassex = WinClassRegister(hInstance);
    MSG msg;
    HWND hwnd;
    //向系統注冊視窗
    if (!RegisterClassEx(&wndclassex))
    {
        //若注冊失敗顯示提示并結束程式
        MessageBox(NULL, L"注冊視窗失敗!", L"Error", MB_OK);
        return -1;
    }
    hwnd = CreateWindowEx(
        0, _WINDOWS_CLASS_NAME, _WINDOWS_TITLE_NAME,                //視窗附加風格參數 視窗類名 視窗标題名
        WS_OVERLAPPED | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU,   //視窗風格
        CW_USEDEFAULT, CW_USEDEFAULT,                               //視窗初始位置x y
        _WINDOWS_WIDTH, _WINDOWS_HEIGHT,                            //視窗寬高
        NULL, NULL, hInstance, NULL                                 //父視窗句柄 菜單句柄 目前程序執行個體 附加參數
        );
    if (hwnd == NULL)
    {
        //若視窗建立失敗 顯示提示并結束程式
        MessageBox(NULL, L"建立視窗失敗!", L"Error", MB_OK);
        return -2;
    }
    g_hWndMain = hwnd;
    g_hInsApp = hInstance;
    UpdateWindow(hwnd);         //更新視窗
    ShowWindow(hwnd, SW_SHOW);  //顯示視窗
    //消息循環
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return (int)msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    case WM_CLOSE:
        DestroyWindow(hwnd);
        break;
    default:
        break;
    }
    return DefWindowProc(hwnd, uMsg, wParam, lParam);;
}
WNDCLASSEX WinClassRegister(HINSTANCE hInstance)
{
    WNDCLASSEX wndclassex;
    wndclassex.cbSize = sizeof(WNDCLASSEX);                         //視窗類大小
    wndclassex.cbClsExtra = 0;                                      //視窗附加風格參數
    wndclassex.cbWndExtra = 0;                                      //視窗附加參數
    wndclassex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //視窗背景色
    wndclassex.hCursor = LoadCursor(NULL, IDC_ARROW);               //滑鼠樣式
    wndclassex.hIcon = LoadIcon(NULL, IDI_APPLICATION);             //應用程式圖示
    wndclassex.hIconSm = LoadIcon(NULL, IDI_WINLOGO);               //應用程式小圖示
    wndclassex.hInstance = hInstance;                               //目前程序執行個體句柄
    wndclassex.lpfnWndProc = WndProc;                               //視窗回調函數
    wndclassex.lpszClassName = _WINDOWS_CLASS_NAME;                 //視窗類名
    wndclassex.lpszMenuName = NULL;                                 //視窗菜單名
    wndclassex.style = CS_OWNDC;                                    //視窗風格
    return wndclassex;
}
           

win32确實很難學啊。