一、子窗口基础知识
1.利用Windows预定义的窗口类(窗口过程函数),建立标准的子窗口。
2.用户只须捕获WM_COMMAND消息,来响应子窗口的动作。
二、按钮类
1.按钮类:button
2.一般是在应用程序窗口过程函数处理WM_CREATE消息时创建按钮,
hButton=CreateWindow(TEXT("button"), //按钮类名称,Button也可以?
TEXT("确定"), //按钮显示文字
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
200,
200,
50,
30,
hwnd,//父窗口句柄
(HMENU)0,//按钮id
((LPCREATESTRUCT)lParam)->hInstance,//实例
NULL
);
3.子窗口向父窗口发送消息
WM_COMMAND消息含义
LOWORD(wParam):子窗口ID
HIWORD(wParam):通知码
lParam :子窗口句柄
4.其它设置
(1)更改按钮文本
SetWindowText(hwnd,newButtonText);
(2)设置按钮是否可见
创建按钮子窗口时,若指定按钮风格有WS_VISIBLE,则CreateWindow后就会产生按钮子窗口;若未指定,则须在CreateWindow后加:
ShowWindow(hwndchild,SW_SHOWNORMAL);//正常显示按钮子窗口
ShowWindow(hwndchild,SW_HIDE);//隐藏子窗口
(3)设置按钮是否可用
EnableWindow(hwndChild,FALSE);//设置按钮不可用
EnableWindow(hwndChild,TRUE);//设置按钮可用
三、静态类
1.静态文本类:static
2.创建静态文本子窗口
hStaticText=CreateWindow("static",
TEXT("文本标签"),
WS_CHILD|WS_VISIBLE|SS_LEFT,
100,
200,
60,
20,
hwnd,
(HMENU)2,
((LPCREATESTRUCT)lParam)->hInstance,
NULL
);
四、编辑类
1.编辑类:edit
2.创建编辑子窗口
hEdit=CreateWindow(TEXT("edit"),
TEXT("编辑框"),
WS_CHILD|WS_VISIBLE|ES_LEFT,
100,
400,
40,
20,
hwnd,
(HMENU)3,
((LPCREATESTRUCT)lParam)->hInstance,
NULL
);
3.获取编辑框输入内容:
GetWindowText(hEdit,szbuffer,100);
如:
GetWindowText(hEdit,szbuffer,100);
MessageBox(NULL,szbuffer,"输入内容",MB_OK|MB_ICONINFORMATION);
五、列表框类
1.列表框类:listbox
2.创建列表框子窗口
hListBox=CreateWindow(TEXT("listbox"),
TEXT("语文"),
WS_CHILD|WS_VISIBLE|LBS_STANDARD,
250,
250,
60,
50,
hwnd,
(HMENU)5,
((LPCREATESTRUCT)lParam)->hInstance,
NULL
);
3.消息处理
(1)当列表框中的某项被选中时,列表框向父窗口发送WM_COMMAND消息,父窗口可确定选中的是哪一项。消息含义与按钮、编辑框的相同。
LOWORD(wParam) 子窗口ID
HIWORD(wParam) 通知码
lParam() 子窗口句柄
(2)可以通过调用SendMessage给列表框窗口过程函数发送信息来操作列表框内容
4.常见操作:
(1)添加列表项
SendMessage(hListBox,LB_ADDSTRING,0,(LPARAM)szString);
其中,szString为列表项名称
如:
GetWindowText(hEdit,szbuffer,100);
SendMessage(hListBox,LB_ADDSTRING,0,(LPARAM)szbuffer);
(2)获得当前选中列表项索引
SendMessage(hListBox,LB_GETCURSEL,0,0);
若当前有列表项被选中,则返回其索引(第一个列表项索引为0!);否则返回LB_ERR(-1).
如:
index=SendMessage(hListBox,LB_GETCURSEL,0,0);
(3)删除某列表项
SendMessage(hListBox,LB_DELETESTRING,index,0);
删除索引为index的列表项.
(4)清空列表
SendMessage(hListBox,LB_RESETCONTENT,0,0);
(5)获得列表框列表项个数
SendMessage(hListBox,LB_GETCOUNT,0,0);
(6)获得指定索引列表项名称
iLength=SendMessage(hListBox,LB_GETTEXT,index,(LPARAM)szBuffer);