人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

VC++環(huán)境下菜單與工具欄的動(dòng)態(tài)更改技術(shù)

VC++環(huán)境下菜單與工具欄的動(dòng)態(tài)更改技術(shù)

更新時(shí)間:2022-09-05 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

Visual C++是一種可視化很強(qiáng)的編程工具,其內(nèi)置的向?qū)ppWizard可以自
動(dòng)生成程序的基本框架,減少了大量程序開(kāi)發(fā)基本工作。比如利用的AppWizard
可以自動(dòng)為應(yīng)用程序生成菜單和工具欄,非常方便。如果是編寫(xiě)一般的應(yīng)用程
序,完全可以在其提供的菜單和工具欄上進(jìn)行修改,添加或刪除菜單項(xiàng)。但在實(shí)
際使用中,如果遇上些比較復(fù)雜的程序,僅用系統(tǒng)提供的菜單和工具欄是遠(yuǎn)遠(yuǎn)不
夠的。應(yīng)用程序應(yīng)該可以按照用戶的不同狀態(tài),顯示不同菜單項(xiàng)和工具欄,以
實(shí)現(xiàn)動(dòng)態(tài)的對(duì)菜單和工具欄進(jìn)行修改,加載新的菜單和工具欄。在編程過(guò)程中
實(shí)現(xiàn)菜單和工具欄的動(dòng)態(tài)修改基本上有兩種方法。
  一是在程序運(yùn)行過(guò)程中利用Cmenu類的AppendMenu和Cmenu類的InsertMenu按
需在菜單上插入新的菜單項(xiàng),但此方法如果只是用在動(dòng)態(tài)改變少數(shù)菜單項(xiàng),其編
程工作量還是可以接收,但如果需要改變的部分較多則編程工作量就很大,而且
最大問(wèn)題是如果采用此法插入的菜單項(xiàng),CLASS WIZARD不能產(chǎn)生相應(yīng)的消息響
應(yīng)函數(shù),程序員必須自己編寫(xiě)消息響應(yīng)循環(huán)。
  因此,提出第二種動(dòng)態(tài)修改方法。該方法的關(guān)鍵是不對(duì)菜單和工具欄進(jìn)行修
改,而是通過(guò)加載不同的菜單和工具欄實(shí)現(xiàn)對(duì)菜單和工具欄的動(dòng)態(tài)修改。該方
法的優(yōu)點(diǎn)在于不必編寫(xiě)大量的菜單項(xiàng)插入命令,只需事先在資源內(nèi)根據(jù)實(shí)際的
情況定義不同的菜單和工具欄,然后在程序中根據(jù)用戶狀態(tài)加載不同的菜單和
工具欄資源實(shí)現(xiàn)菜單和工具欄的動(dòng)態(tài)更新。而且此方法適用于CLASS WIZARD,
可以在CLASS WIZARD中直接產(chǎn)生各菜單項(xiàng)的消息響應(yīng)和其它相關(guān)函數(shù),大大減少
了程序的開(kāi)發(fā)工作量。
  其具體步驟如下:
  首先分析程序運(yùn)行過(guò)程中所出現(xiàn)的各種變化情況,按照不同的菜單狀態(tài)在資
源管理中創(chuàng)建不同的菜單資源和工具欄資源。然后在需要修改菜單和工具欄的地
方利用LoadToolBar函數(shù)和LoadMenu函數(shù)調(diào)入相應(yīng)的菜單資源和工具欄資源。
void CMainFrame::OnSwitch)
//調(diào)入以IDR_NEWTOOLBAR表示的工具欄資源;
m_wndToolBar.LoadToolBar(IDR_NEWTOOLBAR);
//調(diào)入新的工具欄后,調(diào)用Invalidate函數(shù)以確保使用新的位圖圖象重畫(huà)工具欄;
m_wndToolBar.Invalidate();
CMenu cMenu;
//調(diào)用新的以IDR_NEWMENU表示的菜單資源;
cMenu.LoadMenu(IDR_NEWMENU);
//將cMenu設(shè)置為當(dāng)前菜單;
SetMenu(&cMenu);
//釋放菜單句柄 cMenu.Detach();
//重畫(huà)菜單條;
DrawMenuBar();
//重新繪制窗口區(qū)域;
RecalcLayout(TRUE);
  在切換菜單時(shí)注意一定要在調(diào)用SetMenu函數(shù)設(shè)置當(dāng)前窗口菜單后立即調(diào)
用Detach函數(shù)從CMenu對(duì)象中釋放菜單句柄,這樣可以防止Cmenu在移出作用域
時(shí)新菜單被破壞,當(dāng)前的函數(shù)終止時(shí)回發(fā)生這種情況。最后要調(diào)用RecalcLayout
重新計(jì)算窗口大小重新繪制窗口。如果是僅僅替換一個(gè)工具欄可以不用該函數(shù),
但如果新的工具欄比原工具欄大小不同或者要調(diào)用多個(gè)工具欄則一定要使用該函
數(shù)重新計(jì)算客戶窗口的大小重新繪制客戶窗口。
  還要補(bǔ)充一點(diǎn),如果僅修改工具欄,還有一種比較可行的方法是在OnCreate
中一次創(chuàng)建所有的工具欄對(duì)象,然后利用ShowWindow按需要決定其顯示與否。
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
......
//創(chuàng)建第一個(gè)工具欄;
if (!m_wndToolBar.Create(this) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
//創(chuàng)建第二個(gè)工具欄;
if (!m_wndNewToolBar.Create(this) ||
!m_wndNewToolBar.LoadToolBar(IDR_NEWTOOLBAR))
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
//設(shè)置工具欄屬性;
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC|TBSTYLE_FLAT);
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
m_wndNewToolBar.SetBarStyle(m_wndNewToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC|TBSTYLE_FLAT);
m_wndNewToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndNewToolBar);
//不顯示第二個(gè)工具欄;如要顯示將參數(shù)設(shè)置為SW_SHOW;
m_wndNewToolBar.ShowWindow(SW_HIDE);
return 0;
  以上對(duì)菜單和工具欄的動(dòng)態(tài)修改方法可以按實(shí)際需要選擇使用。適當(dāng)修改后
同樣適合于Borland C++。實(shí)際編程中可以將以上動(dòng)態(tài)修改方法結(jié)合菜單項(xiàng)插入
和菜單項(xiàng)變灰等方法,使你的菜單和工具欄更加簡(jiǎn)單實(shí)用。 

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 奉节县| 浮梁县| 临西县| 甘洛县| 怀安县| 烟台市| 胶州市| 射洪县| 丁青县| 特克斯县| 平凉市| 类乌齐县| 民乐县| 察雅县| 鹰潭市| 治多县| 清流县| 明星| 长治县| 三门峡市| 鄄城县| 施甸县| 全椒县| 虞城县| 阿图什市| 宜阳县| 宜州市| 庆城县| 石阡县| 兴隆县| 阿拉尔市| 新营市| 三穗县| 儋州市| 醴陵市| 隆化县| 尼木县| 来凤县| 三原县| 汶上县| 花垣县|