使用CTabCtrl控制項實現屬性頁功

2021-06-08 10:34:40 字數 1624 閱讀 1692

使用ctabctrl控制項實現屬性頁功能

vc中的ctabctrl用法與vb、delphi的選項卡控制項有很大的不同,每個屬性頁是用乙個「窗體」(對話方塊)來實現,於是要為每個屬性頁對話方塊建類,還要關聯、初始化……實在麻煩得多。但是ctabctrl可重用性比activex的選項卡控制項好,因為乙個屬性頁可以被多個不同的選項卡對話方塊呼叫,就像mfc中很多屬性選項卡有「general」這一選項頁,可以被多個控制項的屬性頁呼叫,作為「通用」的,有符合現代軟體工程可重用性要求。

下面發乙個最簡單的**,使用ctabctrl控制項實現屬性頁功能,要原始碼的請登陸www.maoyeah.com,技術文章專欄找。

1、建立乙個基於對話方塊的應用程式;

2、畫ctabctrl控制項,類嚮導中關聯變數名為m_tab,新建三個對話方塊屬性設為child,none,用classwizard生成新的類,基類為cdialog,分別為cpage0,cpage1,cpage2,id號分別為idd_dialog0,idd_dialog1,idd_dialog2。在主對話方塊中加入三個變數,cpage0 page0;cpage1 page1;cpage2 page2。別忘了在主對話方塊的標頭檔案中要加入#include "page0.h",#include "page1.h",#include "page2.h" 

3、在主對話方塊的oninitdialog()內初始化 :

// todo: add extra initialization here

//初始化m_tab控制項 

m_tab.insertitem(0," 呵呵,茂葉工作室 ");

m_tab.insertitem(1," 嘻嘻 ");

m_tab.insertitem(2," 哈哈,www.maoyeah.com ");

//建立屬性頁各頁 

page0.create(idd_dialog0,getdlgitem(idc_tab1)); 

page1.create(idd_dialog1,getdlgitem(idc_tab1)); 

page2.create(idd_dialog2,getdlgitem(idc_tab1)); 

//設定頁面的位置在m_tab控制項範圍內 

crect rect;

m_tab.getclientrect(&rect);

rect.top+=20; 

rect.bottom-=4; 

rect.left+=4; 

rect.right-=4; 

page0.movewindow(&rect);

page1.movewindow(&rect);

page2.movewindow(&rect);

page1.showwindow(true); 

m_tab.setcursel(1); 

4、m_tab控制項屬性頁選擇時顯示各頁:

void cmy3dlg::onselchangetab1(nmhdr* pnmhdr, lresult* presult) 

*presult = 0;

} 編譯執行,效果如圖:

CTabCtrl控制項使用

vc中的ctabctrl用法與vb delphi的選項卡控制項有很大的不同,每個屬性頁是用乙個 窗體 對話方塊 來實現,於是要為每個屬性頁對話方塊建類,還要關聯 初始化 實在麻煩得多。但是ctabctrl可重用性比activex的選項卡控制項好,因為乙個屬性頁可以被多個不同的選項卡對話方塊呼叫,就像...

使用CTabCtrl控制項實現屬性頁功能

使用ctabctrl控制項實現屬性頁功能 在檢視視窗內加入ctabctrl控制項,設變數名為m tab,新建兩個對話方塊屬性style,border分別設為child,none,用classwizard生成新的類,基類為cdialog,分別為cpage1,cpage2,id號分別為idd dialo...

使用CTabCtrl控制項實現屬性頁功能

在檢視視窗內加入ctabctrl控制項,設變數名為m tab,新建兩個對話方塊屬性設為child,none,用classwizard生成新的類,基類為cdialog,分別為cpage1,cpage2,id號分別為idd dialog1,idd dialog2。在ctestview內加入兩個變數,cp...