1、创建按钮控件
::CreateWindow(TEXT("button"),
TEXT("button 1"),
WS_CHILD|WS_VISIBLE|(BS_PUSHBUTTON +i),
20,20+i*20,100,20,
hWnd,
NULL,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
响应过程
case WM_COMMAND:
wmId = LOWORD(wParam); //子窗口ID
wmEvent = HIWORD(wParam); //通知吗:BN_CLICK|BN_PAINT|BN_SETFOCUS|BN_KILLFOCUS....
如果响应BN_DBCLIK,需在样式中加入BS_NOTIFY ---本人验证失败
2、对于自绘按钮的自绘过程原则
1~Windows会为你获得设备环境,并保存在DRAWITEMSTRUCT结构的一个字段中,必须原样保持这个设备环境的状态。
2~任何被选入该设备环境的GDI对象,必须设置回原来不被选中状态。
3~在自绘的窗口过程中,不能再按钮的区域以外绘制任何图形
3、静态类
::CreateWindow(TEXT("static"),
TEXT("SS_GRAYRECT "),
WS_CHILD|WS_VISIBLE,
350,40,100,20,
hWnd,
NULL,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
静态类非常良好,不接受鼠标或键盘的输入,液不会向其父窗口发送WM_COMMAND消息。当你在一个静态自控上移动或者单击鼠标时,子窗口会俘获WM_NCHITTST消息,并向窗口返回HTTRANSPARENT值。这导致Windows向其底层窗口(通常是父窗口)发送相同的WM_NCHITTST消息。父窗口通常将该消息传给DefWindowProc,在哪里它会被转换成客户区鼠标消息。
4、滚动条类
::CreateWindow(TEXT("scrollbar"),
TEXT("SS_GRAYRECT "),
WS_CHILD|WS_VISIBLE|WS_TABSTOP | SBS_VERT,
350,40,20,300,
hWnd,
NULL,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
它与带滚动条的窗口(其样式WS_VSCROLL WS_HSCROLL)不一样,它是窗口的一个子控件;但是他们有相同之处,都是发送WM_VSCROLL、WM_HSCROLL消息,使用lParam参数区别窗口滚动条和滚动条控件。
它是一个系统已经注册的窗口类,所以它的窗口过程是Windows默认窗口过程,所以必须使用SetWindowLong(hScrollWnd, GWL_WNDPROC,(long)ScrollProc);
5、编辑类
::CreateWindow(TEXT("edit"),
TEXT("edit1 "),
WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|WS_BORDER|ES_LEFT|ES_MULTILINE|ES_AUTOHSCROLL|ES_AUTOVSCROLL,
350,40,200,300,
hWnd,
NULL,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
对于单行编辑控件,如果设置了边框,那么它的高度按照一个字的1.5倍进行计算。
***复制文本到缓存区iLength = SendMessage(hEdit,EM_GETLINE, iLine, (LPARAM) szBuffer)
***替换默认的换行功能:SendMessage(hEdit,EM_SETWORDBREAKPROC,0, (LPARAM)EditWordBreakkProc);
6、列表框类
hListBox = ::CreateWindow(TEXT("listbox"),
TEXT("listbox1 "),
WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_BORDER|LBS_NOTIFY|LBS_SORT|WS_SIZEBOX|WS_CAPTION,
350,40,200,300,
hWnd,
NULL,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
其中:WS_SIZE允许用户调整尺寸,WS_CAPTION允许用户在父窗口客户区移动它。
使用LBS_SORT的列表控件,插入LB_INSERTSTRING,但是列表的内容不会重新排序。
如果有大量的字符串需要插入和删除,那么必须在操作前抑制重绘,结束后再打开
SendMessage(hListBox,WM_SETREDRAW,FALSE,0);
SendMessage(hListBox,LB_ADDSTRING,0,(LPARAM)TEXT("1..............."));
SendMessage(hListBox,LB_ADDSTRING,0,(LPARAM)TEXT("2..............."));
//....add lines code
SendMessage(hListBox,WM_SETREDRAW,TRUE,0);
本文介绍如何在Windows应用程序中创建多种类型的控件,包括按钮、静态文本、滚动条、编辑框及列表框等,并详细说明了这些控件的创建方法及特性,特别是自绘按钮的过程原则。

被折叠的 条评论
为什么被折叠?



