第8章Windows标准控件.ppt
《第8章Windows标准控件.ppt》由会员分享,可在线阅读,更多相关《第8章Windows标准控件.ppt(61页珍藏版)》请在三一办公上搜索。
1、第8章 Windows 标准控件,作为一般窗口,控件具有通用的窗口属性,并且可以使用ShowWindows()和MoveWindows()等窗口管理函数来显示或隐藏控件、改变控件的位置、尺寸以及其它操作。,控件创建形式,对话框中制定控件:如按钮控件,调用CreateWindows()或CreateWindowsEx()函数创建,必须指定控件的窗口类,这种窗口类要在应用程序中定义并注册,但更多的是使用系统预定义窗口类,控件,Windows 图形用户界面的主要组成部分之一用户通过操作控件对象完成与应用程序之间的交互体现了Windows 系统面向对象的特点,控件以独立的子窗口或对话框两种形式存在,8
2、.1概述,应用程序窗口可调用函数SendMessage向特定的子窗口发送消息,例如用户单击圆按钮时,可调用SendMessage向该圆按钮发送BM_SETCHECK消息,为该按钮设置选中符号,其形式为:SendMessage(hwndRadioButton,BM_SETCHECK,1,0);使用对话框控件时,可调用SendDlgItemMessage向指定的对话框控件发送消息,其形式为:SendDlgItemMessage(hdlg,ID,message,wParam,lParam);,应用程序向控件发送的消息的字参数与长参数包含该消息的相关信息其含义取决于具体的控件消息,8.2 常用子窗口操
3、作函数,按钮控件,普通按钮,圆按钮,复选框按钮,组框按钮,按钮控件的创建方式,创建控件型的子窗口,在对话框中定义控件,创建并注册一个窗口类的实例,创建并显示窗口实例,8.3 按钮控件的分类与创建,按钮控件与应用程序之间的消息传递,1 接收按钮控件消息,当用户与控件交互时,控件向其父窗口发送WM_COMMAND消息。,消息的wParam参数,低字节包含控件的标识值(ID),高字节中包含控件向父窗口发出的通知代码,3.按钮控件示例,【例8-1】创建如右上图所示的按钮控件系列,当单击每一个按钮后,就出现如右下图所示的响应。,LRESULT CALLBACK WndProc(.)int X=50,Y=
4、30;/控件起始坐标 switch(message)case WM_CREATE:/通过响应WM_CREATE消息创建控件子窗口hwndPush=CreateWindow(lpszClassName1,/按钮子窗口 这里是一个按钮,按我吧!,BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,X,Y,240,25,hwnd,(HMENU)IDB_PUSHBUTTON,hInst,NULL);hwndDefPush=CreateWindow(lpszClassName1,/默认按钮子窗口 这是缺省按钮,按下试试看!,BS_DEFPUSHBUTTON|WS_CHILD|WS_VIS
5、IBLE,X,Y+30,240,25,hwnd,(HMENU)IDB_DEFPUSHBUTTON,hInst,NULL);,/创建自动圆按钮子窗口hwndAutoRadio=CreateWindow(lpszClassName1,自动圆形按钮,看看有何区别?,BS_AUTORADIOBUTTON|WS_CHILD|WS_VISIBLE,X,Y+90,240,25,hwnd,(HMENU)IDB_AUTORADIOBUTTON,hInst,NULL);,hwndRadio=CreateWindow(lpszClassName1,/圆按钮控件子窗口 圆形按钮,你喜欢吗?,BS_RADIOBUTTO
6、N|WS_CHILD|WS_VISIBLE,X,Y+60,240,25,hwnd,(HMENU)IDB_RADIOBUTTON,hInst,NULL);,/创建自动复选框控件子窗口hwndAutoCheckBox=CreateWindow(lpszClassName1,自动复选框,你会用吗?,BS_AUTOCHECKBOX|WS_CHILD|WS_VISIBLE,X,Y+150,240,25,hwnd,(HMENU)IDB_AUTOCHECKBOX,hInst,NULL);,/创建复选框控件子窗口hwndCheckBox=CreateWindow(lpszClassName1,复选框,BS_C
7、HECKBOX|WS_CHILD|WS_VISIBLE,X,Y+120,240,25,hwnd,(HMENU)IDB_CHECKBOX,hInst,NULL);,/处理控件消息case WM_COMMAND:switch(LOWORD(wParam)case IDB_PUSHBUTTON:/当用户单击按钮时,改变按钮文本 SetWindowText(hwndPush,你已按下了按钮!);break;case IDB_DEFPUSHBUTTON:/当用户单击按钮时,改变按钮文本 SetWindowText(hwndDefPush,按钮已被按下);break;,/创建组框控件子窗口hwndGrou
8、pBox=CreateWindow(lpszClassName1,组框,BS_GROUPBOX|WS_CHILD|WS_VISIBLE,X+290,Y+30,100,140,hwnd,(HMENU)IDB_GROUPBOX,hInst,NULL);break;,case IDB_RADIOBUTTON:/当用户单击圆按钮时,设置按钮为选中状态 SendMessage(hwndRadio,BM_SETCHECK,1,0);break;case IDB_AUTORADIOBUTTON:break;case IDB_CHECKBOX:/根据复选框状态设置复选框 if(nCheckBoxSt=0)Se
9、ndMessage(hwndCheckBox,BM_SETCHECK,1,0);nCheckBoxSt=1;else/如果当前为非选中状态,则设置为选中状态 SendMessage(hwndCheckBox,BM_SETCHECK,0,0);nCheckBoxSt=0;break;case IDB_AUTOCHECKBOX:break;case IDB_GROUPBOX:break;break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd,message,wParam,lParam);ret
10、urn 0;,本程序运行时将在主窗口用户区的中央显示一个普通按钮,上面写有“启动一个对话框”,按下按钮弹出一个对话框,对话框含有三个成组框,其中分别是圆按钮、自动圆按钮和复选框,此外,还有一个普通按钮和一个默认按钮。,LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)RECT rect;switch(message)case WM_CREATE:/通过响应WM_CREATE消息创建控件子窗口 GetClientRect(hwnd,BOOL CALLBACK DialogProc(HWND hd
11、lg,UINT message,WPARAM wParam,LPARAM lParam)switch(message)case WM_COMMAND:switch(LOWORD(wParam)case IDOK:EndDialog(hdlg,0);return 1;case IDCANCEL:EndDialog(hdlg,0);return 1;case IDC_RADIO1:if(HIWORD(wParam)=BN_CLICKED)SendDlgItemMessage(hdlg,IDC_RADIO1,BM_SETCHECK,1,0);SendDlgItemMessage(hdlg,IDC_R
12、ADIO2,BM_SETCHECK,0,0);return 1;break;case IDC_RADIO2:if(HIWORD(wParam)=BN_CLICKED)SendDlgItemMessage(hdlg,IDC_RADIO1,BM_SETCHECK,0,0);SendDlgItemMessage(hdlg,IDC_RADIO2,BM_SETCHECK,1,0);return 1;break;break;case WM_CLOSE:EndDialog(hdlg,0);return 1;return 0;,滚动条控件最直接的功能是当应用程序显示的内容超过窗口的范围时,用户可通过拖动滚动条
13、遍历整个窗口内容。滚动条在功能上分为垂直与水平滚动条,分别实现窗口内容纵向和横向的滚动。,8.4 滚动条控件8.4.1 滚动条控件的功能特点与分类,三种方法,创建窗口滚动条,创建滚动条子窗口控件,创建对话框中的滚动条控件,SB_BOTTOM到滚动条最底端或最左端SB_RIGHT滚动到右边SB_LEFT滚动到左边SB_PAGEUP向上滚动一页SB_PAGEDOWN 向下滚动一页,8.4.2 滚动条控件的创建,SetScrollRange:设置滚动条的滚动范围,int SetScrollRange(HWND hwnd,int nBar,/滚动条特性标识 int nMaxPos,/滚动条最大滚动位置
14、 int nMinPos,/滚动条最小滚动位置 BOOL bRedraw)/当滚动条改变时是否重绘;非0表示重绘,SB_CTL 为控件滚动条 SB_HORZ 为窗口水平滚动条 SB_VERT 为窗口垂直滚动条,SetScrollPos:设置滚动块的位置,int SetScrollPos(HWND hwnd,int nBar,/滚动条的特性标识,同SetScrollRange函数 int nPos,/滚动块的位置 BOOL bRedraw/意义同SetScrollRange函数),8.4.3 常用滚动条操作函数,GetSystemMetrics:获取系统提供的滚动条尺寸,如:获取系统水平滚动条的
15、高度:GetSystemMetrics(SM_CYHSCROLL);,GetScrollpos:获取滚动块的位置,int GetScrollPos(HWND hwnd,/窗口句柄,同SetScrollRange函数 int nBar/滚动条特性标识);,GetScrollRange:获取滚动条的滚动范围,BOOL GetScrollRange(HWND hwnd,int nBar,LPINT lpMinPos,/接收最小位置的整形变量的地址LPINT lpMaxPos)/接收最大位置的整形变量的地址,【例8-2】本例要求创建一个带滚动条的颜色框,在颜色框中,通过拉动滚动条,使其显示的区域产生变
16、化,同时,可以通过颜色的设置,来改变颜色框的颜色。,8.4.4 滚动控件示例,LRESULT APIENTRY MainWndProc(.)HDC hDC;HBRUSH hBrush;static HWND hWndScrollBar;static SCROLLINFO stScrollInfo;static int nRectWidth;switch(message)case WM_CREATE:hWndScrollBar=CreateWindowEx(0L,SCROLLBAR,(LPSTR)NULL,WS_CHILD|SBS_VERT,10,30-GetSystemMetrics(SM_C
17、YVSCROLL),19,100+2*GetSystemMetrics(SM_CYVSCROLL),hWnd,(HMENU)NULL,hInst,(LPVOID)NULL);stScrollInfo.cbSize=sizeof(SCROLLINFO);stScrollInfo.fMask=SIF_POS|SIF_RANGE|SIF_PAGE;stScrollInfo.nMin=1;stScrollInfo.nMax=100;stScrollInfo.nPos=1;stScrollInfo.nPage=10;/设置滚动条控件的各方面的特性参数SetScrollInfo(hWndScrollBar
18、,SB_CTL,制作垂直滚动条,滚动条结构,设置为滚动条控件,1.case WM_VSCROLL:2.if(HWND)lParam!=hWndScrollBar)break;3.switch(LOWORD(wParam)4.case SB_LINEUP:nRectWidth+=1;break;5.case SB_LINEDOWN:nRectWidth-=1;break;6.case SB_PAGEUP:nRectWidth+=10;break;7.case SB_PAGEDOWN:nRectWidth-=10;break;8.case SB_THUMBPOSITION:nRectWidth=1
19、01-HIWORD(wParam);break;9.default:return(DefWindowProc(hWnd,message,wParam,lParam);10.if(nRectWidth100)nRectWidth=100;12.stScrollInfo.fMask=SIF_POS;13.stScrollInfo.nPos=101-nRectWidth;14.SetScrollInfo(hWndScrollBar,SB_CTL,1.case WM_COMMAND:2.switch(LOWORD(wParam)3.case IDM_RGB:4.DialogBox(hInst,RGBD
20、lg,hWnd,(DLGPROC)RGBDlgProc);break;5.case IDM_DRAW:6.hDC=GetDC(hWnd);7.hBrush=CreateSolidBrush(RGB(255,255,255);8.SelectObject(hDC,hBrush);9.Rectangle(hDC,30,30,130,130);10.hBrush=CreateSolidBrush(RGB(crRGB0,crRGB1,crRGB2);11.SelectObject(hDC,hBrush);12.Rectangle(hDC,30,130-nRectWidth,30+nRectWidth,
21、130);13.ReleaseDC(hWnd,hDC);14.break;15.case IDM_EXIT:16.PostQuitMessage(0);break;17.case IDM_ABOUT:18.DialogBox(hInst,AboutBox,hWnd,(DLGPROC)About);break;19.default:20.return(DefWindowProc(hWnd,message,wParam,lParam);21.22.break;23.case WM_DESTROY:PostQuitMessage(0);break;24.default:return(DefWindo
22、wProc(hWnd,message,wParam,lParam);25.26.return(0);27.,1.BOOL APIENTRY RGBDlgProc(.)2.3.static int CurrentVal3,PrevVal3;4.static HWND hwScroll3;5.char szString10;6.int i;7.switch(message)8.9.case WM_INITDIALOG:/分别设置滚动条的范围和初始位置。10.for(i=0;i3;i+)11.12.CurrentVali=crRGBi;13.PrevVali=crRGBi;14.hwScrolli=
23、GetDlgItem(hDlg,IDC_RED+i);15.SetScrollRange(hwScrolli,SB_CTL,0,255,FALSE);16.SetScrollPos(hwScrolli,SB_CTL,CurrentVali,TRUE);17.SetDlgItemText(hDlg,IDC_VALRED+i,itoa(CurrentVali,szString,10);18.19.SetFocus(hwScroll0);20.break;,1./处理滚动条通知消息2.case WM_HSCROLL:3.i=0;4.while(hwScrolli!=(HWND)lParam)i+;5
24、.switch(LOWORD(wParam)6.case SB_LINEDOWN:7.CurrentVali+;8.if(CurrentVali255)CurrentVali=255;9.break;10.case SB_LINEUP:11.CurrentVali-;12.if(CurrentVali0)CurrentVali=0;13.break;case SB_PAGEDOWN:CurrentVali+=(255-CurrentVali)/2;15.break;16.case SB_PAGEUP:CurrentVali-=CurrentVali/2;break;17.case SB_THU
25、MBTRACK:CurrentVali=HIWORD(wParam);break;18.case SB_TOP:CurrentVali=0;break;19.case SB_BOTTOM:CurrentVali=255;break;,/设定滚动条的位置及其对应的文字1.SetScrollPos(hwScrolli,SB_CTL,CurrentVali,TRUE);2.SetDlgItemText(hDlg,IDC_VALRED+i,itoa(CurrentVali,szString,10);3.crRGBi=CurrentVali;4.SendMessage(hWndMain,WM_COMMA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Windows 标准 控件
链接地址:https://www.31ppt.com/p-2275259.html