工具條的??靠刂?/h3>
發表于:2007-07-14來源:作者:點擊數: 標簽:
----在VC5.0中 開發 大型應用程序時,工具條通常是程序中必不可少的功能因素,在整個窗口的??课恢糜绕潢P鍵,它直接影響到程序界面的外觀形象。本文介紹各類工具條??课恢玫目刂萍记?,供參閱。 ----標準工具條的??靠刂?----VC5.0應用程序向導生成的框架
----在VC5.0中開發大型應用程序時,工具條通常是程序中必不可少的功能因素,在整個窗口的??课恢糜绕潢P鍵,它直接影響到程序界面的外觀形象。本文介紹各類工具條??课恢玫目刂萍记?,供參閱。

----標準工具條的??靠刂?br>
----VC5.0應用程序向導生成的框架代碼中,都具有普通工具條的控制方法。正常情況下工具條類CToolBar是控制條類CControlBar的派生類,其顯示的初始??课恢檬峭ㄟ^調用繼承的函數CControlBar::EnableDocking(DWORDdwStyle)來確定的,其參數dwStyle用來指定??康木唧w位置,與本文有關的格式如下(其余請參閱VC5.0的聯機文檔):

----CBRS-ALIGN-TOP??吭诳蚣艽翱诳蛻魠^域頂部;

----CBRS-ALIGN-BOTTOM??吭诳蚣艽翱诳蛻魠^域底部;

----CBRS-ALIGN-LEFT??吭诳蚣艽翱诳蛻魠^域左邊;

----CBRS-ALIGN-RIGHT??吭诳蚣艽翱诳蛻魠^域右邊;

----CBRS-ALIGN-ANY??吭诳蚣艽翱诳蛻魠^域任何位置。

----在利用應用程序向導AppWizard生成的應用程序中,其控制代碼默認的??课恢脼镃BRS-ALIGN-ANY,即允許??吭诳蚣艽翱诳蛻魠^域的任何邊上。工具條在正常顯示時??吭诖翱诳蛻魠^域的頂部,控制指令為EnableDocking(CBRS_ALIGN_ANY)或m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY),注意在實際程序控制時前者必須處于所有其他控制代碼的前面,否則浮動工具條或特殊工具條等部分代碼可能無法奏效。具體控制方法請參考利用應用程序向導生成的任何一個程序實例框架代碼部分中建立的函數ONCREATE()。

----應用程序的單文檔和多文檔的窗口框架類均由CFrameWnd::EnableDocking(DWORDdwDockStyle)來實現的,其可選的參數除上述五種之外,還增加了CBRS?FLOAT?MULTI參數,該參數主要是為設計浮動工具條而增加的,用來確定一個框架窗口中允許存在多個浮動工具條。同樣利用應用程序向導AppWizard生成的應用程序,其默認的??课恢靡彩荂BRS-ALIGN-ANY,即允許工具條??吭诳蚣艽翱诘娜魏芜吷?,其默認的初始位置為框架窗口的頂部,即EnableDocking(CBRS_ALIGN_ANY)或m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY)。

----浮動工具條的??靠刂?br>
----當一個框架窗口中存在多個標準或浮動工具條時,則需要利用函數voidDockControlBar(CControlBar*pBar,UINTnDockBarID=0,LPCRECTlpRect=NULL)來確定要控制??课恢玫墓ぞ邨l,它也是CFrameWnd類的成員函數。其中參數pBar用來指向被控制??课恢玫墓ぞ邨l對象指針,參數nDockBarID用來確定工具條??吭诳蚣艽翱诘哪臈l邊上,其控制的具體取值為:

----AFX-IDW-DOCKBAR-TOP??吭诳蚣艽翱诘捻敳?;

----AFX-IDW-DOCKBAR-BOTTOM??吭诳蚣艽翱诘牡撞?;

----AFX-IDW-DOCKBAR-LEFT??吭诳蚣艽翱诘淖筮?;

----AFX-IDW-DOCKBAR-RIGHT??吭诳蚣艽翱诘挠疫?。

----當參數nDockBarID的取值為0時,則工具條可??吭诳蚣艽翱谥械娜魏我粋€可??康倪吷?,其默認的初始位置為窗口頂部。

----并列工具條的??靠刂?br>
----很多大型應用程序中都存在將多個工具條同時并列??吭谀炒翱诘哪骋粭l邊上的情況。對這種??糠椒?,可利用上述工具條控制函數DockControlBar的lpRect參數,通過控制工具條的??烤匦螀^域的方法來實現。實現的函數如下:

----1.在實現文件MainFrm.h中增加如下成員函數定義:

----voidDockControlBarLeftOf(CToolBar*Bar,CToolBar*LeftOf);

----2.在實現文件MainFrm.cpp中增加如下成員函數:

----voidCMainFrame::DockControlBarLeftOf(CToolBar*Bar,CTooIBar*LeftOf)

----{//設置工具條并列??吭谕粭l邊上

----CRectrect;//矩形區域定義

----DWORDdw;

----UINTn=0;

----RecalcLayout();//重新顯示

----LeftOf->GetWindowRect(&rect);

----rect.Offset(1,0);//設置偏移植以??吭谕贿吷?br>
----dw=LeftOf->GetBarStyle();

----n=(dw&CBRS_ALIGN_TOP)?AFX_IDW_DOCKBAR_TOP:n;

----n=(dw&CBRS_ALIGN_BOTTOM&&n==0)?AFX_IDW_DOCKBAR_BOTTOM:n;

----n=(dw&CBRS_ALIGN_LEFT&&n==0)?AFX_IDW_DOCKBAR_LEFT:n;

----n=(dw&CBRS_ALIGN_RIGHT&&n==0)?AFX_IDW_DOCKBAR_RIGHT:n;

----DockControlBar(Bar,n,&rect);

----}

----在這個函數中應注意對RecalcLayout()函數和OffestRect()函數的調用,前者用來重新顯示被調整的客戶區和工具條,后者用來重新確定矩形區域,這相當于利用鼠標將第二個工具條窗口拖動到前一個工具條上然后釋放。

----3.修改應用程序建立函數OnCreate()中的相應DockControlBar()函數為DockControlBarOf()函數,并正確設置工具條對象的指針。筆者在實現程序中的控制代碼如下:

----EnableDocking(CBRS_ALIGN_ANY);//??课恢帽仨氃谧钋懊?br>
----//工具條建立函數

----m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

----m_wndTestToolBar.EnableDocking(CBRS_ALIGN_ANY);

----DockControlBar(&m_wndToolBar,AFX_IDW_DOCKBAR_TOP);

----//使兩個工具條并列???br>
----DockControlBarLeftOf(&m_wndTestToolBar,&m_wndToolBar);

----工具條的頂部??靠刂?br>
----1.打開菜單資源增加頂部位置控制菜單項IDD_DLGBARTOP;

----2.在實現文件MainFrm.h中增加成員控制變量m_bDialogTop:

----BOOLm_bDialogTop;

----并在構造函數中設置初始值;

----3.利用類向導ClassWizard為菜單項設置響應函數;

----4.在實現文件MainFrm.cpp中通過充分利用SetWindowPos()成員完善消息映射功能。


voidCMainFrame::OnButtonDIgbartop()

{//定制工具條頂部位置控制函數
if(m_bDialogTop)
m_wndDIgBar.SetWindowPos(&m_wndStatusBar,0,0,0,0,
SWP_NOSIZE|SWP_NOMOVE);
//頂部工具條??吭诖翱谶?,左右工具條??科湎?br> else
m_wndDIgBar.SetWindowPos(&wndTop,0,0,0,0,
SWP_NOSIZE|SWP_NOMOVE);//??吭谧铐敳?br> RecalcLayout();//重新顯示窗口
m_bDialogTop=!m_bDialogTop;//改變變量標志
}
voidCMainFrame::OnUpdateButtonDIgbartop(CCmdUI*pCmdUI)
{//設置菜單項檢查狀態更新函數
pCmdUI-SetCheck(m_bDialogTop);
}

----這樣,就可利用菜單項來控制定制工具條的頂部??课恢?。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97