《高级WIN32控件丰富界面.ppt》由会员分享,可在线阅读,更多相关《高级WIN32控件丰富界面.ppt(23页珍藏版)》请在三一办公上搜索。
1、1,使用高级WIN32控件丰富界面,2,本章主要知识点:窗体的菜单应用窗体的工具栏的使用窗体的状态栏的使用,3,窗体菜单使用案例,4,窗体菜单使用案例,1、菜单资源的添加:在ResourcView卡中选择操作插入资源MENU2、菜单资源的编辑如同一般菜单的编辑方式样3、与菜单有关的结构体类型:MENUITEMINFO,5,typedef struct tagMENUITEMINFO UINT cbSize;/结构的大小,字节 UINT fMask;/重新获取或设置成员 UINT fType;/菜单项类型 UINT fState;/菜单项的状态.UINT wID;/应用程序定义16位的值来识别那
2、个菜单项 HMENU hSubMenu;/下拉菜单或相关联的子菜单的菜单项的句柄 HBITMAP hbmpChecked;/如果条目被选中,这个显示项是位图的句柄 HBITMAP hbmpUnchecked;DWORD dwItemData;/应用程序定义的菜单项相关联的值 LPTSTR dwTypeData;/菜单项的内容 UINT cch;/菜单项文本的长度息 MENUITEMINFO,FAR*LPMENUITEMINFO;,6,fMask重新获取或设置成员,这个成员可以使用一个或多个这些值MIIM_CHECKMARKS 重新获取或设置hbmpChecked和hbmpUnchecked成员
3、MIIM_DATA 重新获取或设置dwItemData成员 MIIM_ID 重新获取或设置wID成员MIIM_STATE 重新获取或设置fState成员MIIM_SUBMENU 重新获取或设置hSubMenu成员MIIM_TYPE 重新获取或设置fType和dwTypeData成员,7,fState 菜单项的状态.这个成员可以是一个或多个的这些值:MFS_CHECKED 复选的菜单项.至于更多关于菜单项选中的信息,看hbmpChecked成员.MFS_DEFAULT 指定那个是默认的菜单项。一个菜单仅仅只可以包含一个默认的菜单项,粗体显示那个。MFS_DISABLED 禁止菜单项所以它不能被选
4、择.但是不使它变灰.MFS_ENABLED 激活菜单项所以它可以被选择。这是默认的状态.MFS_GRAYED 禁止菜单项和变灰它,所以它不可以被选择.MFS_HILITE 加亮菜单项 MFS_UNCHECKED 取消复选菜单项.至于更多关于菜单项unchecked信息,看hbmpUnchecked成员变量 MFS_UNHILITE 移除来自菜单项的加亮区.这是默认状态.,8,4、菜单中相关的成员函数的使用菜单的使用过程:1、添加菜单资源2、定义菜单句柄 HMENU3、加载菜单资源4、设置窗体菜单加载菜单LoadMenuHMENU LoadMenu(HINSTANCE hlnstance,LPC
5、TSTR lpMenuName);hlnstance:含有被加载菜单资源的事例模块的句柄。LpMenuName:指向含有菜单资源名的以空结束的字符串的指针。返回值:如果函数调用成功,返回值是菜单资源句柄;如果函数调用失败,返回值是NULL。,9,设置窗体菜单SetMenu BOOL SetMenu(HWND hWnd,HMENU hMenu);hWnd:菜单被分配到其中的窗口的句柄。hMenu:新菜单的句柄。如果菜单参数为NULL,则窗口的当前菜单被删除。CMenu:GetMenuItemInfoBOOL GetMenuItemInfo(UINT nIDItem,LPMENUITEMINFO
6、lpMenuItemInfo,BOOL ByPos=FALSE)nIDItem 要获取信息菜单项的标识符或位置。lpMenuItemInfo 指向MENUITEMINFO结构的指针,如联机文档“平台SDK”中所述,它包含了菜单的有关信息。ByPos 该值指定了nIDItem的意义。缺省情况下,ByPos是FALSE,它指定uItem为菜单项标识符。若ByPos没有设置为FALSE,那么它标识了菜单项的位置。,10,弹出式菜单使用实例,弹出式菜单和普通窗体菜单的加载和属性设置的方法完全相同在窗体上右击鼠标,通常可引发“WM_CONTEXTMENU”消息,可在此消息中处理函数显示弹出式菜单弹出式菜
7、单函数:TrackPopupMenu BOOL TrackPopupMenu(HMENU hMenu,UINT uFlags,int x,int y,int nReserved,HWND hWnd,CONST RECT*prcRect);,11,hMenu:被显示的快捷菜单的句柄。此句柄可为调用CreatePopupMenu创建的新快捷菜单的句柄,也可以为调用GetSubMenu取得的与一个已存在菜单项相联系的子菜单的句柄。uFlags:一种指定功能选项的位标志。用下列标志位之一来确定函数如何水平放置快捷菜单:TPM_CENTERALIGN:若设置此标志,函数将按参数x指定的坐标水平居中放置快
8、捷菜单。TPM_LEFTALIGN:若设置此标志,函数使快捷菜单的左边界与由参数X指定的坐标对齐。TPM_RIGHTALIGN:若设置此标志,函数使快捷菜单的右边界与由参数X指定的坐标对齐。用下列标志位之一来确定函数如何垂直放置快捷菜单:TPM_BOTTOMALIGN:若设置此标志,函数使快捷菜单的下边界与由参数y指定的坐标对齐。TPM_TOPALIGN:若设置此标志,函数使快捷菜单的上边界与由参数y指定的坐标对齐。TPM_VCENTERALIGN;若设置此标志,函数将按参数y指定的坐标垂直居中放置快捷菜单 用下列标志位之一来确定在菜单没有父窗口的情况下用户的选择:TPM_NONOTIFY:若
9、设置此标志,当用户单击菜单项时函数不发送通知消息。TPM_RETURNCMD;若设置此标志;函数将用户所选菜单项的标识符返回到返回值里。(补充:当TrackPopupMenu的返回值大于0,就说明用户从弹出菜单中选择了一个菜单。以返回的ID号为参数wParam的值,程序给自己发送了一个WM_SYSCOMMAND消息)用下列标志位之一来确定在快捷菜单跟踪哪一个鼠标键:TPM_LEFTBUTTON:若设置此标志,用户只能用鼠标左键选择菜单项。TPM_RIGHTBUTTON:若设置此标志,用户能用鼠标左、右键选择菜单项。,12,ModifyMenu 函数功能:该参数修改已存在的菜单项,并指定菜单项的
10、内容、外观和性能。BOOL ModifyMenu(HMENU hMnu,UINT uPosition,UINT uFlags,UINT uIDNewltem,LPCTSTR IpNewltem);hMnu:将被修改的菜单的句柄。uPosition:指定将被修改的菜单项,其含义由参数UFlags决定。UFlags:指定控制参数uPosition的解释的标志、菜单项的内容、外观和性能。MF_BYCOMMAND:表示uPostion给出菜单项的标识符。如果MF_BYCOMMAND和MF_BYPOSITION都没被指定则MF_BYCOMMAND为缺省的标志。MF_BYPOSITION:表示uPosit
11、ion给出菜单项基于零的相对位置。UIDNewltem:指定被修改菜单项的标识符,或者当参数uFlags设置为MF_POPUP时,指定下拉式菜单或子菜单的句柄。lpNewltem:指定被修改菜单项的内容。其含义依赖于参数UFlags是否包含标志MF_BITMAP,MF_OWNERDRAW或MF_STRING。,13,CheckMenuItem 函数功能:该函数取得与指定菜单项相联系的菜单标志。如果该菜单项打开了一个子菜单,该函数也返回子菜单里的菜单项数。DWORDCheckMenuItem(HMENUhmenu,UINTuIDCheckItem,UINTuCheck);hmenu:含有其菜单项
12、的标志将被提取得的菜单的句柄。uIDCheckItem:制定要修改的菜单项。uCheck:表示标记的状态。此参数可取下列值之一:MF_BYCOMMAND:表示参数uId给出菜单项的标识符。如果MF_BYCOMMAND和MF_BYPOSITION都没被指定,则MF_BYCOMMAND是缺省值。MF_BYPOSITION:表示参数uId给出菜单项相对于零的位置。MF_CHECKED:放置选取标记于菜单项旁边(只用于下拉式菜单、子菜单或快捷菜单)。MF_DISABLED:使菜单项无效。MF_GRAYED:使菜单项无效并交灰。MF_HILITE:加亮菜单项。MF_MENUBARBREAK:对下拉式菜单
13、、子菜单和快捷菜单,新列和旧列由垂直线隔开,其余功能同MF_MENUBREAK标志。MF_MENUBREAK:将菜单项放于新行(对菜单条)或无分隔列地放于新列(对下拉式菜单、子菜单或快捷菜单)。MF_SEPARATOR:创建一个水平分隔线(只用于下拉式菜单、子菜单或快捷菜单)。,14,工具栏使用实例,15,工具栏的封装类:CToolBar使用工具栏的步骤:1、创建工具栏 CreateEx2、加载工具栏 LoadToolBarvirtual BOOL CreateEx(CWnd*pParentWnd,DWORD dwCtrlStyle=TBSTYLE_FLAT,DWORD dwStyle=WS_
14、CHILD|WS_VISIBLE|CBRS_ALIGN_TOP)BOOL LoadToolBar(LPCTSTR lpszResourceName);函数CWnd:RepositionBars()功能是将可用的客户区区域信息放到消息WM_SIZEPARENT的消息参数里,然后枚举本窗口的所有子窗口,给每个子窗口 都发送这个消息,每个响应这个消息的子窗口都会把可用客户区切去一块。最后把那个特定的子窗口的尺寸和位置调整到刚好放在最后剩下的可用区域里。,16,256色工具栏使用实例,17,本章要点:将256色以上的图片粘贴到工具栏中1、插入一个工具栏2、插入位图3、在程序中处理图像的加载,18,BO
15、OL Create(int cx,int cy,UINT nFlags,int nInitial,int nGrow);nFlags:ILC_COLOR24:图片为24位真彩色ILC_MASK:添加的图片显示时要让指定的颜色透明nInitial:列表的初始大小nGrow:动态调整大小时的增量Add:将位图添加到图片列表,图片列表按创建时指定的大小来切分图片int Add(CBitmap*pbmImage,COLORREF crMask);,19,状态栏输出信息实例,20,状态栏实际上是个窗口,一般分为几个窗格,每个窗格显示不同的信息。AppWizard会为应用程序自动创建一个状态栏,该状态栏包
16、括几个窗格,分别用来显示状态栏提示和CAPS LOCK、NUM LOCK、SCROLL LOCK键的状态。在MFC中,状态栏的功能由CStatusBar类实现。创建一个状态栏需要以下几个步骤:构建一个CStatusBar对象。调用CStatusBar:Create创建状态栏窗口。调用CStatusBar:SetIndicators函数分配窗格,并将状态栏的每一个窗格与一个字符串ID相联系。,21,static UINT indicators=ID_SEPARATOR,/状态行指示器ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,;,22
17、,ToolTip显示即时提示实例,CToolTipCtrl:UpdateTipTextvoid UpdateTipText(LPCTSTR lpszText,CWnd*pWnd,UINT nIDTool=0);void UpdateTipText(UINT nIDText,CWnd*pWnd,UINT nIDTool=0);参数:lpszText 指向工具的文本的指针。pWnd 指向包含此工具的窗口的指针。nIDTool 工具的ID。nIDText 包含工具文本的字符串资源的ID。说明:此成员函数用来为此控件的工具更新工具提示文本。,23,CToolTipCtrl:AddToolBOOL Ad
18、dTool(CWnd*pWnd,UINT nIDText,LPCRECT lpRectTool=NULL,UINT nIDTool=0);BOOL AddTool(CWnd*pWnd,LPCTSTR lpszText=LPSTR_TEXTCALLBACK,LPCRECT lpRectTool=NULL,UINT nIDTool=0);返回值:如果成功则返回非零值;否则返回0。参数:pWnd 指向包含此工具的窗口的指针。nIDText 包含工具的文本的字符串资源的ID。lpRectTool 指向一个RECT结构的指针,该结构包含了工具的边界矩形的坐标。此坐标是相对于由pWnd指定的窗口的客户区的左上角的。nIDTool 该工具的ID。lpszText 指向工具的文本的指针。如果这个参数包含的值是LPSTR_TEXTCALLBACK,则TTN_NEEDTEXT通知消息被发送给pWnd指向的窗口的父窗口。说明:一个工具提示控件可以与多于一个的工具相关联。此成员函数用来向工具提示控件注册一个工具,这样当光标位于这个工具上面时,保存在工具提示中的信息就被显示。,