Windows SDK編程之建立控制項

來源:互聯網
上載者:User
 Windows SDK編程之建立控制項

一、概述

  控制項是子視窗,它們是系統已經定義好的視窗類別,因此不需要註冊、也不需要寫訊息處理函數。

  在主視窗得到WM_CREATE訊息時,建立子視窗即可。

  二、執行個體

//參數:視窗控制代碼,訊息,訊息參數,訊息參數
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 //處理感興趣的訊息
 switch (message)
 {
  case WM_CREATE:
   CreateWindow(TEXT("BUTTON"), //控制項"類名稱"
   TEXT("按鈕(&A)"),
   WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON, 10, 10, 100, 100, hwnd, (HMENU)1000, //控制項ID
((LPCREATESTRUCT) lParam)->hInstance, //執行個體控制代碼
NULL);

   return 0;
  case WM_DESTROY:
   //當使用者關閉視窗,視窗銷毀,程式需結束,發退出訊息,以退出訊息迴圈
   PostQuitMessage (0) ;
   return 0 ;
 }
 //其他訊息交給由系統提供的預設處理函數
 return :efWindowProc (hwnd, message, wParam, lParam) ;
}

  三、關於WM_CREATE訊息

  WM_CREATE 的lParam參數將會傳入一個建立時資訊結構指標(LPCREATESTRUCT)。結構中包含了一些有用資訊(視窗建立時的參數)。

typedef struct tagCREATESTRUCT {
 LPVOID lpCreateParams;
 HINSTANCE hInstance; //執行個體控制代碼
 HMENU hMenu;
 HWND hwndParent;
 int cy;
 int cx;
 int y;
 int x;
 LONG style;
 LPCTSTR lpszName;
 LPCTSTR lpszClass;
 DWORD dwExStyle;
} CREATESTRUCT, *LPCREATESTRUCT;

四、控制項與父視窗的協作

  1.控制項上發生動作時,將向父視窗發送通知訊息WM_COMMAND。

WM_COMMAND:
HIWORD(wParam):通知碼(notification code)
LOWORD(wParam):控制項ID
(HWND)lParam: 控制項控制代碼

  除了WM_COMMAND外,每種控制項還有可能有其他的通知訊息(如WM_DRAWITEM)。

  2.父視窗需要控制控制項時,向控制項發控制項訊息。

  事先應記錄下控制項控制代碼,或由ID擷取控制項控制代碼

  3.備忘:

  各種控制項的通知消碼和控制訊息可由

MSDN-> Platform SDK-> User Interface Services->Windows User Interface->Controls

  查得。

  五、控制項"類名稱"

  1.標準控制項

  BUTTON :按鈕
  COMBOBOX :複合框
  EDIT :編輯
  LISTBOX :列表
  RichEdit :Rich Edit version 1.0
  RICHEDIT_CLASS :Rich Edit version 2.0
  SCROLLBAR :捲軸
  STATIC :靜態

  2.外殼附帶的公用控制項

  注:建立前需要用InitCommonControlsEx進行初始化

INITCOMMONCONTROLSEX icex;// Ensure that the common control DLL is loaded.
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_LISTVIEW_CLASSES;
InitCommonControlsEx(&icex);

HWND hWndListView =CreateWindowEx(0,WC_LISTVIEW, //WC_LISTVIEW不需要加引號
TEXT(""),
WS_CHILD | WS_VISIBLE|WS_BORDER | LVS_ICON | LVS_EDITLABELS | WS_EX_CLIENTEDGE ,
10,
10,
100,
100,
hwnd,
(HMENU)1000, //控制項ID
((LPCREATESTRUCT) lParam)->hInstance, //執行個體控制代碼
NULL);
}
ANIMATE_CLASS
DATETIMEPICK_CLASS
HOTKEY_CLASS
MONTHCAL_CLASS
PROGRESS_CLASS
REBARCLASSNAME
STATUSCLASSNAME
TOOLBARCLASSNAME
TOOLTIPS_CLASS
TRACKBAR_CLASS
UPDOWN_CLASS
WC_COMBOBOXEX
WC_HEADER
WC_IPADDRESS
WC_LISTVIEW
WC_PAGESCROLLER
WC_TABCONTROL
WC_TREEVIEW

  3.特殊視窗

  MDIClient :MDI客戶區視窗
  

ComboLBox :The class for the list box contained in a combo box.

DDEMLEvent :Windows NT/2000: The class for DDEML events.
Message :Windows 2000: The class for a message-only window.
#32768 :The class for a menu.
#32769 :The class for the desktop window.
#32770 :The class for a dialog box.
#32771 :The class for the task switch window.
#32772 :Windows NT/2000: The class for icon titles.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.