坐票可以去卧铺车厢吗:Visual C .NET编程讲座之四(3)

来源:百度文库 编辑:微思作业网 时间:2019/08/24 19:50:15
工具栏设计及与菜单命令的联动
工具栏上通常有一系列的工具按钮,所有的按钮图像都具有相同的尺寸,一般是15像素高,16像素宽,借助它们可以提高用户的工作效率,并且将常用的菜单命令也放在工具栏上,它们实际是命令不同的用户方式。
1. 添加并设计工具栏
(1) 将解决方案资源管理器窗口切换到"资源视图",展开后右击Toolbar,在弹出的快捷菜单中单击"插入Toolbar"。这样,一个工具栏资源就添加到项目中,默认的标识为IDR_TOOLBAR1。
(2) 添加并设计2个工具按钮,结果如图10所示。

 
图11 工具按钮的设计
由于其编辑操作与Windows的画图相类似,故这里仅列出操作的一些技巧:
① 单击空白按钮后就可以编辑其图像,同时系统在随后的位置自动添加一个空白按钮。
② 用鼠标可以将一个按钮拖放到工具栏上的其他位置上。若拖动时按下Ctrl键,则复制一个工具按钮。若将工具按钮拖出工具栏,则该工具按钮被删除。
③ 按Delete键可以将当前工具按钮的图像用背景色填充。
④ 在工具按钮之间添加间隔时,可按不同情况来操作。若工具按扭前没有任何间隔,拖动该工具按钮向右直到它覆盖相邻工具按钮的一半以上后,释放鼠标键,则此工具按钮前出现间隔。若工具按钮前面有间隔而后面没有间隔,拖动该工具按钮向左直到它的左边界接触到它前面的工具按钮为止,释放鼠标键,则此工具按钮后面将出现间隔。
⑤ 若工具按钮前后均有间隔,拖动该工具按钮向右直到它接触相邻工具按钮,则此工具按钮前的间隔保留,工具按钮后的间隔消失。反之,若拖动该工具按钮向左直到它接触相邻的前一个工具按钮,则此工具按钮前面的间隔消失,后面的间隔仍保留。
⑥ 删除工具按钮间隔时,只要将间隔一端的工具按钮拖向间隔另一端的工具按钮,直到与另一个按钮重叠一半以上即可。
(3) 单击第一个工具按钮,在工具按钮的属性窗口中,将其ID号选择为ID_FORMAT_TXTFONT,这是将工具按钮与菜单命令联动的关键。将其Prompt属性内容改成"改变显示的字体\n字体"。Prompt属性是用来指定工具按钮的提示文本。例如若为"改变显示的字体\n字体"时,则表示当鼠标移至该工具按钮时,在状态栏中就会显示"改变显示的字体",稍等片刻后还会弹出一个小的提示窗口,显示出"字体"字样。注意:提示窗口显示的内容是Prompt属性字符串中"\n"后的内容。
(4) 将第二个工具按钮的ID号选择为ID_FORMAT_TXTCOLOR,Prompt设为"改变文本的显示颜色\n颜色"。
2. 工具栏代码的实现
(1) 在CMainFrame类中添加一个成员变量m_wndFormatBar,变量类型为CToolBar。CToolBar类封装了工具栏的操作。
(2) 在CMainFrame::OnCreate()函数中添加工具栏的创建代码,如图11所示的加框部分。

图12 添加的工具栏的创建代码
 
程序说明:
① 主框架类CMainFrame用来负责窗口的菜单栏、工具栏和状态栏的创建和更新工作。因此我们将工具栏的创建代码添加在CMainFrame的OnCreate()函数中。
② CreateEx()是CToolBar类的成员函数,用来创建一个工具栏对象。
③ if语句的LoadToolBar()函数是用来装载工具栏资源。若CreateEx()或LoadToolBar()的返回值为0,即调用不成功,则显示诊断信息"未能创建工具栏"。TRACE0是一个用于程序调试的跟踪宏。OnCreate()函数返回-1时,主框架窗口被清除。
④ 应用程序中的工具栏一般具有停靠或浮动特性,m_wndFormatBar.EnableDocking()使得m_wndFormatBar对象可以停靠,CBRS_ALIGN_ANY表示可以停靠在窗口的任一边。 EnableDocking(CBRS_ALIGN_ANY)是调用的是CFrameWnd类的成员函数,用来让工具栏或其他控制条在主框架窗口可以进行停靠操作。DockControlBar()也是CFrameWnd类的成员函数,用来将指定的工具栏或其他控制条进行停靠。
⑤ AFX_IDW_TOOLBAR是系统内部的工具栏子窗口标识,并将AFX_IDW_TOOLBAR+1的值表示默认的状态栏子窗口标识。如果在创建新的工具栏时没有指定相应的子窗口标识,则会使用默认的AFX_IDW_TOOLBAR。这样,当打开"视图"菜单时,单击"工具栏"菜单时,显示或隐藏的工具栏不是原来的工具栏而是新添加的工具栏。因此,我们需要重新指定工具栏子窗口的标识,并使其值等于AFX_IDW_TOOLBAR + 10。
(3) 运行程序,可以看到新添加的工具栏,如图12所示,左图是工具栏开始的停靠情况,右图是工具栏浮动的情形。


图13 新工具栏的停靠和浮动
 
需要说明的是,上述工具按钮是与菜单命令联动,因此无需进行工具按钮命令的消息映射,因为该命令已在菜单操作该命令已映射过。若是单独一个工具按钮,则需要对该工具按钮进行命令消息的映射,否则按钮是灰显的。工具按钮的命令消息映射方法与菜单命令相同。