首页 > 代码库 > 创建一个Windows窗体

创建一个Windows窗体

vs2010下的代码提示快捷键:CTRL + J

step:

窗口类赋值(12个参数)

注册窗口类

创建窗口

消息循环

 

 

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

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    const TCHAR pClassName[] = _T("MyWindow");
    WNDCLASSEX wcex;
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);
    wcex.hCursor = ::LoadCursor(NULL, IDC_ARROW);
    wcex.hIcon = ::LoadIcon(NULL, IDI_APPLICATION);
    wcex.hIconSm = ::LoadIcon(NULL, IDI_APPLICATION);
    wcex.hInstance = hInstance;
    wcex.lpfnWndProc = WindowProc;
    wcex.lpszClassName = pClassName;
    wcex.lpszMenuName = NULL;
    wcex.style = CS_HREDRAW | CS_VREDRAW;
    BOOL bRet = ::RegisterClassEx(&wcex);
    if(!bRet)
    {
        MessageBox(NULL, _T("提示"), _T("注册窗口类失败"), MB_OK);
        return FALSE;
    }
    HWND hWnd = ::CreateWindowEx(0, pClassName, _T("WinDemo"), WS_VISIBLE|WS_OVERLAPPEDWINDOW, 
                                CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
                                NULL, NULL, hInstance, NULL);
    
    if(NULL == hWnd)
    {
        MessageBox(NULL, _T("提示"), _T("创建窗口失败!"), MB_OK);
        return FALSE;
    }
    ::ShowWindow(hWnd, SW_SHOW);
    ::UpdateWindow(hWnd);

    MSG msg;
    while(GetMessage(&msg, NULL, 0, 0))
    {
        ::TranslateMessage(&msg);
        ::DispatchMessage(&msg);
    }
    return TRUE;
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        case WM_CLOSE:
            ::DestroyWindow(hwnd);
            return 0;
        case WM_DESTROY:
            ::PostQuitMessage(0);
            return 0;
        default:
            break;
    }
    return ::DefWindowProc(hwnd,uMsg,wParam,lParam);
}