Windows SDK笔记(二):在窗口上建立控件

来源:互联网 发布:歌词创作软件 编辑:程序博客网 时间:2024/04/27 22:40
一、概述

控件是子窗口,它们是系统已经定义好的窗口类,因此不需要注册、
也不需要写消息处理函数。
在主窗口得到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 ::DefWindowProc (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. 

原创粉丝点击