User Tools

Site Tools


prog:dev_cpp:250724-02:index

WIN32 建立控件 (2025-07-24)

Local Backup

  • 在WIN32程式設計中,控制項是預先定義的視窗類,如BUTTON。建立控制項使用CreateWindow或CreateWindowEx函數,樣式參考Control Library。當需要繪製控制項時,靜態控制項會傳送WM_CTLCOLORSTATIC訊息到其父窗口,允許父視窗自訂文字顏色。
  • 控制項也是視窗,只不過是被微軟預先創建好的一種視窗類別,例如button就是一個類別名為「BUTTON」的類別。既然控制項其實是視窗,當然也是用CreateWindow或CreateWindowEx這個函數來完成的。
  • HWND CreateWindow(
     LPCTSTR lpClassName, //控制項的類別名
     LPCTSTR lpWindowName, //控制項的名字或文字
     DWORD dwStyle, //控制風格
     int x, int y, int nWidth, int nHeight, //控制項的座標和寬高
     HWND hWndParent, //控制項的父窗口
     HMENU hMenu, //控制項的ID
     HANDLE hInstance,
     PVOID lpParam
    );
  • 建立控制
    • //建立靜態文字框
       HWND hStatic = CreateWindow(TEXT("STATIC"), TEXT("Test String"), WS_CHILD|WS_VISIBLE, 10, 10, 80, 20,  hWnd, (HMENU)IDC_STATIC, NULL, NULL);
       SetWindowText(hStatic, L"更改後的內容!");
       //建立button
       CreateWindow(TEXT("BUTTON"), TEXT("Click Me"), WS_CHILD | WS_VISIBLE, 10, 40, 80, 20, hWnd, (HMENU)IDC_BUTULLTON, N, N, NUTULL);
       //建立單選框
       CreateWindow(TEXT("BUTTON"), TEXT("radio button"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 134, 10, 40, 20, hWnd, (HMENU)IDC_RADIO, NULL, NULL); 
       //建立複選框
       CreateWindow(TEXT("BUTTON"), TEXT("radio button"), WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, 134, 40, 40, 20, hWnd, (HMENU)IDC_RADIO, NULL, NULL);
       //建立捲軸
       CreateWindow(TEXT("SCROLLBAR"), NULL, WS_CHILD | WS_VISIBLE | SBS_HORZ, 10, 70, 200, 20, hWnd, (HMENU)IDC_SCBL, NULL, NULL);
       //建立組合框
       CreateWindow(TEXT("COMBOBOX"), NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWNLIST, 10, 100, 100, 90, hWnd, (HMENU)IDC_COMBOX, NULL, NULL);
       //建立列錶框
       CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("LISTBOX"), NULL, WS_CHILD | WS_VISIBLE | LBS_STANDARD, 10, 140, 80, 90, hWnd, (HMENU)IDC_LISTBOX, NULL, NULL);
  • 樣式
  • 全部控件可以参考
  • 訊息
    • 若要繪製控制項時,靜態控制項或唯讀或停用的編輯控制項會將 WM _ CTLCOLORSTATIC 訊息傳送至其父視窗。 透過回應此訊息,父視窗可以使用指定的裝置上下文句柄來設定靜態控制項的文字前景色和背景色。
    • 參數
      • wParam 控制項設備上下文的句柄。
      • lParam 控制項的句柄。
    • 傳回值
      • 如果應用程式處理此訊息,它必須傳回畫筆的句柄。
      • 系統使用畫筆繪製列錶框的背景。

prog/dev_cpp/250724-02/index.txt · Last modified: 2025/07/24 17:41 by jethro