MFC 工具栏隐藏与显示

时间:2021-01-19 17:09:53

最近在学MFC,看的是孙鑫的VC++视频,感觉还不错。在看到第九节课的时候,讲到工具栏的时候,做了个小功能:工具栏的隐藏和显示,但是有个bug就是一个悬浮的工具栏隐藏后再显示,就会变成停靠状态。这里我又把工具栏的隐藏与显示又实现了一遍,去掉了这个bug,做到跟MFC中自带的菜单栏中视图->工具栏菜单项一样的功能。

其实,关于工具栏的隐藏与显示问题,只需要考虑三种状态:(1)在停靠状态下工具栏的显示与隐藏;(2)在悬浮状态下工具栏的显示与隐藏;(3)在悬浮状态下,通过点击关闭按钮去关闭工具栏,然后在显示工具栏的问题。

对于上面所述的第二种情况,要记住工具栏在将要隐藏时刻的窗口坐标(x,y),这一点可以在点击菜单项去隐藏工具栏的时候可以做到。同样对于第三种情况,要记住工具栏在关闭时刻的坐标位置,在这里我们可以自己创建一个类CMyToolbar,这个类继承于CToolbar,在这个类里面添加WM_WINDOWPOSCHANGED消息处理函数OnWindowPosChanged。这个消息每当工具栏的大小或者位置发生变化是就会触发,因此我们在每次触发这个消息的时候,在其处理函数里面先判读是否为悬浮状态,如果是再获取当前窗口的位置,然后保存起来。

好了,上面说了那么多现在开始上代码。首先先看一下在CMainFrame.h中要添加的变量成员。

MFC 工具栏隐藏与显示

然后在CMainFrame.cpp中添加工具栏菜单项的相应函数,具体代码如下:

MFC 工具栏隐藏与显示

最后我们要创建一个CMyToolbar的类,继承于CToolbar类,其中CMyToolbar.h添加代码如下:

MFC 工具栏隐藏与显示

然后在CMyToolbar中实现OnWindowPosChanged函数

MFC 工具栏隐藏与显示

到此,代码部分全部结束。运行结果演示:

MFC 工具栏隐藏与显示

MFC 工具栏隐藏与显示

MFC 工具栏隐藏与显示