《第8章Windows标准控件.ppt》由会员分享,可在线阅读,更多相关《第8章Windows标准控件.ppt(61页珍藏版)》请在优知文库上搜索。
1、第第8 8章章 Windows Windows 标准控件标准控件作为一般窗口,控件具有通用的窗口属性,并且可以使用作为一般窗口,控件具有通用的窗口属性,并且可以使用ShowWindows()ShowWindows()和和MoveWindowsMoveWindows()()等窗口管理函数来显示或隐藏控件等窗口管理函数来显示或隐藏控件、改变控件的位置、尺寸以及其它操作。、改变控件的位置、尺寸以及其它操作。控件创控件创建形式建形式对话框中制定控件对话框中制定控件:如按钮控件如按钮控件调用调用CreateWindows()CreateWindows()或或CreateWindowsExCreateWi
2、ndowsEx()()函数创建函数创建必须指定控件的窗口类,必须指定控件的窗口类,这种窗口类要在应用程序这种窗口类要在应用程序中定义并注册,但更多的中定义并注册,但更多的是使用系统预定义窗口类是使用系统预定义窗口类控件控件Windows 图形用户界面的主要组成部分之一图形用户界面的主要组成部分之一用户通过操作控件对象完成与应用程序之间的交互用户通过操作控件对象完成与应用程序之间的交互体现了体现了Windows 系统面向对象的特点系统面向对象的特点控件以独立控件以独立的子窗口或对话框的子窗口或对话框两种形式存在两种形式存在8.1概述概述 应用程序窗口可调用函数应用程序窗口可调用函数SendMes
3、sageSendMessage向特定的子窗口发送消息,向特定的子窗口发送消息,例如用户单击圆按钮时,可调用例如用户单击圆按钮时,可调用SendMessageSendMessage向该圆按钮发送向该圆按钮发送BM_SETCHECKBM_SETCHECK消息,为该按钮设置选中符号,其形式为:消息,为该按钮设置选中符号,其形式为:SendMessageSendMessage(hwndRadioButton,BM_SETCHECK,1,0)(hwndRadioButton,BM_SETCHECK,1,0);使用对话框控件时,可调用使用对话框控件时,可调用SendDlgItemMessage向指定的对话
4、框控向指定的对话框控件发送消息,其形式为:件发送消息,其形式为:SendDlgItemMessageSendDlgItemMessage(hdlg,ID,message,(hdlg,ID,message,wParam,lParamwParam,lParam););应用程序向控件发送的消息的字参应用程序向控件发送的消息的字参数与长参数包含该消息的相关信息数与长参数包含该消息的相关信息其含义取决于具体的控件消息其含义取决于具体的控件消息1EnableWindow函数函数(功能为激活或禁止窗口功能为激活或禁止窗口)BOOL EnableWindowBOOL EnableWindow(HWND (HW
5、ND hwnd,BOOL,BOOL bEnable)激活或激活或禁止标识禁止标识Ture:该窗口可接收输入该窗口可接收输入False:禁止该窗口接收输入禁止该窗口接收输入2MoveWindow函数函数(移动或改变窗口的大小移动或改变窗口的大小)BOOL MoveWindowBOOL MoveWindow(HWND hwndHWND hwnd,int X,int Y,int X,int Y,int nWidthint nWidth,int nHeightint nHeight,BOOL bReprintBOOL bReprint/表明窗口移动后是否重画表明窗口移动后是否重画)8.2 常用子窗口操
6、作函数常用子窗口操作函数3SetWindowText(设置窗口的标题或文本设置窗口的标题或文本)BOOL SetWindowText(HWND hwnd,LPCTSTR lpszStringBOOL SetWindowText(HWND hwnd,LPCTSTR lpszString)设置的设置的文本内容文本内容4GetWindowText函数函数(获取指定窗口标题或文本获取指定窗口标题或文本)int GetWindowText(HWND hwnd,LPSTR lpszString,int nMaxint GetWindowText(HWND hwnd,LPSTR lpszString,int
7、 nMax)存放文本字符串的缓冲区存放文本字符串的缓冲区最大可获取的字符串长度最大可获取的字符串长度对于对话框按钮控件,可调用函数对于对话框按钮控件,可调用函数SetDlgItemTextSetDlgItemText和和GetDlgItemTextGetDlgItemText BOOL SetDlgItemText(HWND hdlg,int ID,LPCTSTR lpszStringBOOL SetDlgItemText(HWND hdlg,int ID,LPCTSTR lpszString)Int GetDlgItemText(HWND hdlg,int ID,LPSTR lpszStri
8、ng,int nMaxInt GetDlgItemText(HWND hdlg,int ID,LPSTR lpszString,int nMax)该函数返回从指定的控件获取的文本字节数该函数返回从指定的控件获取的文本字节数。5DestroyWindow函数函数关闭窗口函数关闭窗口函数 BOOL DestroyWindow(HWND hwndBOOL DestroyWindow(HWND hwnd)如果关闭父窗如果关闭父窗口,则其中的子口,则其中的子窗口同时被关闭窗口同时被关闭按钮控按钮控件件普通按钮普通按钮圆按钮圆按钮复选框按钮复选框按钮组框按钮组框按钮在对话框定义中创建控件,其一般形式为:在
9、对话框定义中创建控件,其一般形式为:Control-type Title,ID,X,Y,nWidth,nHeight,Style控件样式控件样式控件的宽度与高度控件的宽度与高度控件类型控件类型控件标题或内容控件标题或内容控件起始坐标控件起始坐标按钮控按钮控件的创件的创建方式建方式创建控件型的子窗口创建控件型的子窗口在对话框中定义控件在对话框中定义控件创建并注册一个窗口类的实例创建并注册一个窗口类的实例创建并显示窗口实例创建并显示窗口实例控控件件类类型型 说说 明明 PUSHBUTTON 按按钮钮控控件件 DEFPUSHBUTTON 默默认认按按钮钮控控件件 CHECKBOX 复复选选框框控控件
10、件 RADIOBUTTON 圆圆按按钮钮控控件件 GROUPBOX 组组合合框框控控件件 LTEXT 左左对对齐齐静静态态控控件件 8.3 按钮控件的分类与创建按钮控件的分类与创建按钮控件与应用程序之间的消息传递按钮控件与应用程序之间的消息传递1 接收按钮控件消息接收按钮控件消息 当用户与控件交互时,控件向其父窗口发送当用户与控件交互时,控件向其父窗口发送WM_COMMANDWM_COMMAND消息消息。消息的消息的wParamwParam参数参数低字节包含控件的标识值(低字节包含控件的标识值(ID)高字节中包含控件向父窗口发出的通知代码高字节中包含控件向父窗口发出的通知代码2 向按钮控件发送
11、消息向按钮控件发送消息调用函数调用函数SendMessageSendMessage向按钮控件发出消息:向按钮控件发出消息:SendMessage(hwnd,message,wParam,lParamSendMessage(hwnd,message,wParam,lParam););设置复选框和圆按钮的选中标志时字参数应取设置复选框和圆按钮的选中标志时字参数应取 1:SendMessage(hwnd,BM_SETCHECK,1,0);取消选中标志时字参数应取取消选中标志时字参数应取0,其形式为:,其形式为:SendMessage(hwnd,BM_SETCHECK,0,0);SendMessage
12、SendMessage使用使用字参数确定同种字参数确定同种消息中的不同动作消息中的不同动作对话框按钮控件对话框按钮控件,可用可用SendDlgItemMessage完成相同操作完成相同操作向控件子窗口向控件子窗口发出的消息发出的消息3.按钮控件示例按钮控件示例【例【例8-1】创建如右上图所】创建如右上图所示的按钮控件系列,当单示的按钮控件系列,当单击每一个按钮后击每一个按钮后,就出现如就出现如右下图所示的响应。右下图所示的响应。LRESULT CALLBACK WndProcLRESULT CALLBACK WndProc(.)(.)int X=50,Y=30;/int X=50,Y=30;/
13、控件起始坐标控件起始坐标 switch(message)switch(message)case WM_CREATE:case WM_CREATE:/通过响应通过响应WM_CREATEWM_CREATE消息创建控件子窗口消息创建控件子窗口hwndPushhwndPush=CreateWindow(lpszClassName1,/=CreateWindow(lpszClassName1,/按钮子窗口按钮子窗口 这里是一个按钮,按我吧这里是一个按钮,按我吧!,!,BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,X
14、,Y,X,Y,240,25,240,25,hwnd hwnd,(HMENU)IDB_PUSHBUTTON,(HMENU)IDB_PUSHBUTTON,hInst hInst,NULL);NULL);hwndDefPushhwndDefPush=CreateWindow(lpszClassName1,/=CreateWindow(lpszClassName1,/默认按钮子窗口默认按钮子窗口 这是缺省按钮,按下试试看这是缺省按钮,按下试试看!,!,BS_DEFPUSHBUTTON|WS_CHILD|WS_VISIBLE,BS_DEFPUSHBUTTON|WS_CHILD|WS_VISIBLE,X,
15、Y+30,X,Y+30,240,25,240,25,hwnd hwnd,(HMENU)IDB_DEFPUSHBUTTON,(HMENU)IDB_DEFPUSHBUTTON,hInst hInst,NULL);NULL);/创建自动圆按钮子窗口创建自动圆按钮子窗口hwndAutoRadiohwndAutoRadio=CreateWindow(lpszClassName1,=CreateWindow(lpszClassName1,自动圆形按钮,看看有何区别自动圆形按钮,看看有何区别?,?,BS_AUTORADIOBUTTON|WS_CHILD|WS_VISIBLE,BS_AUTORADIOBUTT
16、ON|WS_CHILD|WS_VISIBLE,X,Y+90,X,Y+90,240,25,240,25,hwndhwnd,(HMENU)IDB_AUTORADIOBUTTON,(HMENU)IDB_AUTORADIOBUTTON,hInsthInst,NULL);NULL);hwndRadiohwndRadio=CreateWindow(lpszClassName1,/=CreateWindow(lpszClassName1,/圆按钮控件子窗口圆按钮控件子窗口 圆形按钮,你喜欢吗圆形按钮,你喜欢吗?,?,BS_RADIOBUTTON|WS_CHILD|WS_VISIBLE,BS_RADIOBUTTON|WS_CHILD|WS_VISIBLE,X,Y+60,X,Y+60,240,25,240,25,hwnd hwnd,(HMENU)IDB_RADIOBUTTON,(HMENU)IDB_RADIOBUTTON,hInst hInst,NULL);NULL);/创建自动复选框控件子窗口创建自动复选框控件子窗口hwndAutoCheckBoxhwndAutoCheckBox=CreateWind