当前位置:文档之家› 第六章 通用控件

第六章 通用控件

第六章通用控件6.1 概述6.1.1 分类用其功能6.1.2 创建创建通用控件包含以下三个步骤:1.在源文件中包含COMCTL.H文件除在源文件中包含COMCTL.H文件外,还应将COMCTL32.LIB库文件加入到链接程序可访问的库文件中。

2.初始化通用控件通过调用API函数InitCommonControls初始化通用控件,该函数的原型为: Void InitCommonControls();3. 调用API函数生成通用控件Windows通用控件也是应用程序创建的子窗口,因此可通过调用函数CreateWindow创建。

应用程序救灾可调用特定函数创建某些通用控件,例如调用函数CreateToolBarEx创建工具栏,调用函数CreateStatusWindowEx创建状态栏等。

6.1.3 通用控件与应用程序间消息传递与Windows标准控件相似,应用程序操作Windows通用控件也通过消息传递完成。

1.通用控件向应用程序发送消息大多数的通用控件向应用程序发送WM_NOTIFY消息而非WM_COMMAND消息,以通知用户的交互请求。

通常情况下,WM_NOTIFY消息的字参数(wParam)中包含通用控件的标识(ID),长参数(lParam)中包含如下定义的NMHDR数据结构地址:typedef struct tagNMHDR{HWND hwndFrom;//控件句柄UINT idFrom; //控件标识UINT code; //通知码}NMHDR;下面的程序段说明应用程序在窗口函数中处理通用控件的常用过程:LPNMHDR lpnmhdr;……case WM_NOTIFY{……lpnmhdr=(LPNMHDR)lParam;……switch(lpnmhdr->idFrom){case …://通用控件标识switch(lpnmhdr->code){case…: //通知码…break;case…:…break;}break;case…: //通用控件标识……break;}并非所有通用控件均响应用程序发出WM_NOTIFY消息。

例如当用户单击工具栏中的按钮后,工具将向应用程序发出WM_COMMAND消息,该消息的字参数和长参数所包含的内容与标准控件中按钮相似。

当用户操作滚动类通用控件时,该类控件将向应用程序发出WM_VSCROLL或WM_HSCROLL消息,而非WM_NOTIFY消息。

2.应用程序向通用控件发送消息与标准控件相似,应用程序通过函数Sendmessage发送消息给通用控件。

6.2 窗口控件类通用控件窗口类通用控件包括工具栏、工具栏提示和状态栏。

6.2.1 工具栏工具栏是WindowsGUI中常使用的控件。

1.功能与特点工具栏实际上是一种图形化的菜单按钮,程序员通过工具栏将常用选项以图形化、平面化方式提供给用户,不但使图形用户界面生动形象,而且方便了用户操作。

2.创建应用程序中工具栏的创建常使用函数CreateToolBarEx完成,该函数原型为:HWND CreateToolBarEx(HWND hwnd,//工具栏父窗口句柄DWORD dwStyle, //工具栏风格UINT wID, //工具栏标识int nBitMaps, //工具栏按钮数HINSTANCE hInstBitMap, //位图的实例句柄UINT wBitMapID, //工具栏位图资源标识LPCTBUTTON lpButtons,//指向TBBUTTON数据结构指针Int nNumButtons, //工具栏中按钮数目Int nButtonWidth, //工具栏宽度Int nButtonHeight, //工具栏高度Int nBitMapWidth,//按钮位图宽度Int nBitMapheight,//按钮位图高度UINT uStructSize//TBBUTTON结构的大小)每个工具栏按钮均定义在一个TBBUTTON数据结构中,其定义如下:typedef struct tagTBBUTTON{int idBitMap;int idCommand;BYTE fsState;BYTE fsStyle;BYTE bReserved[2];DWORD dwData;int iString;}TBBUTTON;工具栏中按钮的定义常通过定义TBBUTTON结构的数组实现,下面程序段为定义一个文件操作工具栏按钮的常用语法:……TBBUTTON tbButton[]={index0,IDM_NEW, TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,0,index1,IDM_OPEN,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,0, ……}3.工具栏与应用程序之间的消息传递(1)工具栏向应用程序发送消息用户按下工具栏按钮后,工具栏控件向应用程序发送WM_COMMAND消息。

其中字参数(wParam)包含按钮的命令标识,应用程序获取该标识并转入相应的处理过程。

(2)应用程序向工具栏控件发送消息应用程序调用函数SendMessag向工具栏发送消息。

常用工具栏及消息说明:6.2.2 工具栏提示工具栏提示经常与工具栏一同使用的通用控件。

1.功能工具栏提示是指将光标停在工具栏按钮上时显示的关于该按钮的文本说明,其功能是使用户可快速地了触该按钮的作用。

2.编程在具有 TBSTYLE_TOOLTIPS风格的工具栏中,当用户将光标停在工具栏按钮上时,工具栏将向应用程序发出WM_NOTIFY消息。

其长参数(lParam)包含一个指向TOOLTIPTEXT数据结构的指针,可通过该结构确定用户所指按钮并显示按钮的说明文本。

Typedef struct tagTOOLTIPTEXT{NMHDR hdr;LPTSTR lpszText;Char szText[80];HINSTANCE hInst;UINT uFlags;}TOOLTIPTEXT;6.2.3 状态栏1.功能状态栏常位于窗口的底部,其主要功能是显示窗口的一些辅助信息。

应用程序可通过状态栏提示用户可使用的热键、指示程序的进展状态及说明注意事项等等。

2.创建创建状态栏可通过调用CreateStatusWindow函数实现,该函数的原型为:HWND CreateStatusWindow(DWORD dwStyle,LPCTSTR lpstr,HWND hwndParent,DWORD dwID}3. 发送消息创建状态栏后,并不向应用程序发送消息。

而应用程序可通过调用SendMessage函数向状态栏发送消息,实现对状态栏的操作。

例如:应用程序向状态栏发送消息SB_SETPART,状态栏划分为若干个部分,其形式为:SendMessage(hwndStatus,SB_SETPART,(WPARAM)nPart,(LPARAM)nRightEnd);应用程序划分状态栏后,即可使用各部分的标识值操作有关部分。

例如通过向状态栏发送消息SB_SETPART,设置各部分的状态文本,其形式为:SendMessage(hwndStatus,SB_SETPART,dwPartID,(LPARAM)lpstr);6.2.4 综合示例6.3 滚动类通用控件除包括窗口控制类通用控件外,资源管理器中还包括两种资源管理类通用控件:树形视图和列表视图。

6.3.1 跟踪条控件跟踪条控件是Windows应用程序中常使用的控件类型。

1.功能跟踪条控件的功能是使用用户可便捷地设置某一对象(如音量)的量度,用户可通过拖动跟踪条控件中的量度指示指针到跟踪条的某一特定位置完成设置。

此外,跟踪条还可作为指示任务完成进度的标志。

2.创建应用程序调用函数CreateWindow创建跟踪条,其形式如下:hwndTrack= CreateWindow (TRACKBAR_CLASS,NULL,WS_CHILD|WS_VISIBLE|TBS_…,0, 0,0,0,hwnd,NULL,hInst,NULL);其中TRACKBAR_CLASS为跟踪条控件的窗口句柄,TBS_为可选用的跟踪条风格。

常用的跟踪条风格及其说明如下:3.发送消息当用户与滚动类控件交互时,该类控件发出WM_HSCROLL或WM_VSCROLL消息,其长参数(lParam)中包含跟踪条句柄,字参数的低字节包含用户的动作标识。

应用程序通过检测滚动条消息中的字参数获取动作标识,并转入相应的处理过程。

4.应用程序发送消息应用程序通过调用函数SendMessage向跟踪条发送消息。

例如:获取当前指示指针位置的形式如下:iPos=Sendmessage(hwndTrack,TBM_GETPOS,0,0L);设置指示指针位置的形式如下:Sendmessage(hwndTrack,TBM_SETPOS,0,(LPARAM)iPos);6.3.2 微调按钮控件微调按钮控件是一种特殊的滚动类控件。

1.功能一般情况下,跟踪条既可作为独立的控件,也可与文本框一起使用。

通过单击上下按钮即可实现相关内容按指定的步长滚动。

例如:“时间/日期”对话框中的微调按钮。

2.创建通过调用函数CreateUpDownControl创建微调按钮,该函数的原型如下:HWND CreateUpDownControl(DWORD dwStyle,Int x,int y,Int cx,int cy,HWND hParent,Int iID,HINSTANCE hInst,HWND hBuddy,Int nUpper,int nLower,Int nPos);3.微调按钮控件发送消息用户与微调按钮控件交互时,该控件所发消息的长参数中包含微调按钮句柄。

应用程序通过该句柄确定交互请求的资源,并转入相应的处理过程。

提示:当微调按钮与其他窗口(常为文本框)关联时,其操作由系统完成,无需编程。

4.应用程序发送消息应用程序通过调用函数SendMessage向微调按钮发送消息。

例如:获取微调按钮当前位置的形式如下:nPos= SendMessage(hwndUpdown,UDM_GETPOS,0,0L);设置微调按钮步长的形式如下:SendMessage(hwndUpdown,UDM_SETBASE,0,(LPARAM)nBase);6.3.3 示例6.4 基于MFC的通用控件编程方法MFC类库为程序员提供了丰富的Windows通用控件类资源,并封装了通用控件的大部分烦琐操作,提供了更加便利的编程手段。

MFC中通用控件类主要包括工具栏类(CToolBar)、状态栏类(CStatusBar)、树型视图类(CTreeView)和列表视图类(ClistView)。

相关主题