DockBar和ControlBar的邊框

2021-04-09 04:11:20 字數 1083 閱讀 3608

相信用過dock功能的程式設計師都知道,cdockbar也是從ccontrolbar派生出來的,當使用者建立乙個controlbar並呼叫dockcontrolbar()使之停靠時,系統會為它指定乙個父親,該父親就是乙個dockbar,用spy可以看到他們的父子關係。

預設情況下,兩個dockbar之間會有乙個邊界,它兩個畫素寬,現在有個問題:如何用自己指定的顏色來繪製這一邊框呢?剛開始以為很簡單:只要把ccontrolbar中的drawborders()給過載了就ok了,實際情況是無論做怎樣的調整,都無法繪製邊界!看來只能再求助spy了,再次察看dockbar和controlbar,發現乙個奇怪的現象:dockbar比controlbar向右向下偏移了2個畫素,但dockbar的屬性中又有ws_clipchildren和ws_clipsiblings,這就意味著即使我們在controlbar的邊界上繪製邊框也會被dockbar給剪下掉,那麼怎樣讓dockbar和controlbar的位置、大小相同呢?又嘗試了各種方法:setborders(0, 0, 0, 0)、movewindow(controlbar)、movewindow(dockbar)、onsize()....均失敗;然後又試著修改建立controlbar時的style...均失敗。

還是踏下心來跟一下mfc的源**吧!跟蹤可知,當系統呼叫dockcontrolbar()時,系統會用到乙個全域性變數來設定controlbar在dockbar中的位置,而此變數中afxdata.cxborder2和afxdata.cyborder2的預設值為2,正好是偏出的兩個畫素,於是在mainframe中重新設定這兩個值:

#include <../src/mfc/afximpl.h>

cmainframe::cmainframe()

{// todo: add member initialization code here

afxdata.cxborder2 = 0;

afxdata.cyborder2 = 0;

....

哈哈,controlbar和dockbar的位置終於一致了!後面的工作就簡單多了,無非是計算一下非客戶區(onnccalcsize),然後過載controlbar的drawborders()函式,在onncpaint()中呼叫它。

control變數和value變數

control型變數是這個控制項所屬類的乙個例項 物件 可以通過這個變數來對該控制項進行一些設定。而value只是用來傳遞資料,不能對控制項進行其它的操作。control型變數可以獲得控制項的例項,通過這個變數,你可以操縱控制項 value型變數僅僅可以獲得該控制項的public型變數 如果你新增了...

MFC 控制項中control和value的區別

最近學習vc,又被這個問題搞糊塗了,上網查了下,終於搞清楚了。control型變數是這個控制項所屬類的乙個例項 物件 可以通過這個變數來對該控制項進行一些設定。而value只是用來傳遞資料,不能對控制項進行其它的操作。control型變數可以獲得控制項的例項,通過這個變數,你可以操縱控制項 valu...

SpringMvc如何找到Controller

最近乙個朋友,碰到了這樣乙個問題 為什麼 springmvc 的必須定義為 controller,它是如何找到的?當定義為 service時為什麼找不到,當定義為 service時,也想訪問怎麼辦?我這邊首先貼出我找到的答案,然後給出我分析問題的思路 protected boolean ishand...