首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Windows 程式設計核心:Win32 常用型別與常見結構體速查

     編輯:關於C語言

Windows API 程式設計必備的資料型別定義與核心結構體速查表。

Win32 基本資料型別

型別定義備註
CALLBACK回調函式慣例取代 FAR PASCAL
HANDLE32 位無號整數通用控制代碼
HDC裝置內容控制代碼GDI 繪圖核心
HWND32 位無號整數視窗控制代碼
LONG32 位有號整數
LPARAM訊息參數 lParam32 位
LPCSTR常數字串指標唯讀
LPSTR32 位字串指標可讀寫
LPVOID通用指標等同 void*
LRESULT視窗程序回傳值
NULL0 值預設參數/空指標
UINT無號整數32 位 (NT 系列)
WCHAR16 位 Unicode 字元通用字元集
WINAPIAPI 函式慣例取代 FAR PASCAL
WPARAM訊息參數 wParam32 位

常見結構體

結構體用途
MSG訊息佇列項目 (hwnd, message, wParam, lParam, time, pt)
PAINTSTRUCT繪圖資訊 (hdc, fErase, rcPaint, fRestore, fIncUpdate, rgbReserved)
RECT矩形區域 (left, top, right, bottom)
WNDCLASS視窗類別註冊資訊 (style, lpfnWndProc, hInstance, hIcon, hCursor, hbrBackground, lpszMenuName, lpszClassName, ...)

標準 WinMain 入口點範例

#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
char szProgName[] = "ProgName";

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) {
    HWND hWnd; MSG msg; WNDCLASS wc;

    wc.lpszClassName = szProgName;
    wc.hInstance = hInst;
    wc.lpfnWndProc = WndProc;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hIcon = 0;
    wc.lpszMenuName = 0;
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.cbClsExtra = 0; wc.cbWndExtra = 0;

    if (!RegisterClass(&wc)) return 0;

    hWnd = CreateWindow(szProgName, "範例視窗",
        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
        CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL);

    ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);

    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    HDC hdc; PAINTSTRUCT ps;
    switch (msg) {
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // 繪圖範例:線、弦、餅圖、橢圓、矩形
        MoveToEx(hdc, 0, 0, NULL); LineTo(hdc, 639, 429);
        MoveToEx(hdc, 639, 0, NULL); LineTo(hdc, 0, 429);
        TextOut(hdc, 120, 30, "一些線", 6);
        Chord(hdc, 450, 20, 430, 80, 455, 25, 425, 70);
        TextOut(hdc, 470, 30, "弧線", 4);
        Pie(hdc, 350, 50, 400, 150, 300, 50, 300, 100);
        TextOut(hdc, 350, 50, "餅圖", 4);
        Ellipse(hdc, 100, 100, 400, 400);
        Ellipse(hdc, 249, 249, 251, 251);
        TextOut(hdc, 250, 250, "圓心", 4);
        Rectangle(hdc, 50, 300, 150, 400);
        ValidateRect(hWnd, NULL);
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0); break;
    default:
        return DefWindowProc(hWnd, msg, wParam, lParam);
    }
    return 0;
}

WinMain 參數說明

  • hInst:目前執行個體控制代碼,識別應用程式。
  • hPrevInst:Win32 下永為 NULL (無前一實例)。
  • lpCmdLine:命令列參數字串。
  • nCmdShow:視窗初始顯示狀態 (SW_SHOW/SW_HIDE 等)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved