第一個 Windows 應用程式

來源:互聯網
上載者:User
#include <windows.h>

//視窗過程聲明
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdline, int nCmdShow)
{
    const char* szWindowName = "第一個 Windows 應用程式";    //視窗標題
    const char* szClassName = "WindowClass";                    //視窗類別名

    //建立一個 WNDCLASSEX 結構體變數, 為其設定成員的值
    WNDCLASSEX wndclass;
    wndclass.cbSize        = sizeof(WNDCLASSEX);                    //結構大小
    wndclass.style         = CS_HREDRAW | CS_VREDRAW;               //水平重畫,豎直重畫
    wndclass.lpfnWndProc   = (WNDPROC)WndProc;                      //視窗過程
    wndclass.cbClsExtra    = 0;                                     //沒有額外的類記憶體
    wndclass.cbWndExtra    = 0;                                     //沒有額外的視窗記憶體
    wndclass.hInstance     = hInstance;                             //執行個體控制代碼
    wndclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);       //程式表徵圖
    wndclass.hCursor       = LoadCursor(NULL, IDC_CROSS);           //滑鼠樣式
    wndclass.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH); //背景白色
    wndclass.lpszMenuName  = NULL;                                    //沒有菜單名
    wndclass.lpszClassName = szClassName;                           //視窗類別名
    wndclass.hIconSm       = NULL;                                  //沒有類的小表徵圖

    //註冊 WNDCLASSEX 結構體
    ::RegisterClassEx(&wndclass);

    //建立主視窗
    HWND hWnd = ::CreateWindowEx(
        0,                   //dwExstyle, 擴充樣式
        szClassName,         //lpClassName, 類名
        szWindowName,         //lpWindowName, 標題
        WS_OVERLAPPEDWINDOW, //dwStyle, 視窗風格
        CW_USEDEFAULT,       //X, 初始 X 座標
        CW_USEDEFAULT,       //Y, 初始 Y 座標  
        CW_USEDEFAULT,       //nWidth, 寬度
        CW_USEDEFAULT,       //nHeight, 高度
        NULL,                //hWndParent, 父視窗控制代碼
        NULL,                //hMenu, 菜單控制代碼
        hInstance,           //hInstance, 程式執行個體控制代碼
        NULL);               //lpparam, 使用者資料

    if(hWnd == NULL)
    {
        ::MessageBox(NULL, "建立視窗出錯!", "error", MB_OK);
        return FALSE;
    }

    //顯示視窗
    ::ShowWindow(hWnd, nCmdShow);

    //重新整理視窗
    ::UpdateWindow(hWnd);

    //訊息迴圈
    MSG msg;
    while(::GetMessage(&msg, NULL, 0, 0))
    {
        ::TranslateMessage(&msg);
        ::DispatchMessage(&msg);
    }

    return msg.wParam;
}

//視窗過程函數
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    const char* szHello = "Hello World";

    switch(message)
    {
    //重繪視窗
    case WM_PAINT:
        HDC hdc;
        PAINTSTRUCT ps;
        hdc = ::BeginPaint(hWnd, &ps);
        ::TextOut(hdc, 10, 10, szHello, strlen(szHello));
        ::EndPaint(hWnd, &ps);
        break;
    //銷毀視窗
    case WM_DESTROY:
        ::PostQuitMessage(0);
        break;
    }

    //交給系統做預設處理
    return ::DefWindowProc(hWnd, message, wParam, lParam);
}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.