最近在學MFC,看的是孫鑫的VC++視頻,感覺還不錯。在看到第九節課的時候,講到工具欄的時候,做了個小功能:工具欄的隱藏和顯示,但是有個bug就是一個懸浮的工具欄隱藏後再顯示,就會變成停靠狀態。這裡我又把工具欄的隱藏與顯示又實現了一遍,去掉了這個bug,做到跟MFC中自帶的菜單欄中視圖->工具欄菜單項一樣的功能。
其實,關於工具欄的隱藏與顯示問題,只需要考慮三種狀態:(1)在停靠狀態下工具欄的顯示與隱藏;(2)在懸浮狀態下工具欄的顯示與隱藏;(3)在懸浮狀態下,通過點擊關閉按鈕去關閉工具欄,然後在顯示工具欄的問題。
對於上面所述的第二種情況,要記住工具欄在將要隱藏時刻的窗口坐標(x,y),這一點可以在點擊菜單項去隱藏工具欄的時候可以做到。同樣對於第三種情況,要記住工具欄在關閉時刻的坐標位置,在這裡我們可以自己創建一個類CMyToolbar,這個類繼承於CToolbar,在這個類裡面添加WM_WINDOWPOSCHANGED消息處理函數OnWindowPosChanged。這個消息每當工具欄的大小或者位置發生變化是就會觸發,因此我們在每次觸發這個消息的時候,在其處理函數裡面先判讀是否為懸浮狀態,如果是再獲取當前窗口的位置,然後保存起來。
好了,上面說了那麼多現在開始上代碼。首先先看一下在CMainFrame.h中要添加的變量成員。
然後在CMainFrame.cpp中添加工具欄菜單項的相應函數,具體代碼如下:
最後我們要創建一個CMyToolbar的類,繼承於CToolbar類,其中CMyToolbar.h添加代碼如下:
然後在CMyToolbar中實現OnWindowPosChanged函數
到此,代碼部分全部結束。運行結果演示: