在MFC中使用Tab Control

2021-04-13 06:29:42 字數 1416 閱讀 4098

說實話,我剛開始看見tab control的時候,覺得很簡單。哪知道用了一下,才發現自己錯了。

要用好它,還是需要一些技巧的。經過網上搜尋資料,以及我自己的摸索,把一些要點記錄在這裡。

tab control的執行效果有點像property sheet,但兩者還是有一些區別。我的理解就是property sheet主要用在對話方塊中,對資料進行進行分類管理。而tab control使用範圍更廣一些,既可以用在對話方塊,也可以用在檢視中,除了可以管理配置資料外,還可以對軟體的組織進行規劃,比如可以通過它來切換不同的檢視等等。

當然這不是沒有代價的,tab control的程式設計就比property sheet的複雜很多。

我最初有點搞不懂,如何在tab control中使用不同的page,就象property page一樣,tab control並沒有提供便利的機制讓你輕鬆做到這一點。還好,vc是最棒的,撒花~通過變通的方法還是可以做到這一點。

不羅嗦了,上**。

假如我現在有個sdi程式,view是form view,想在上面放個tab control,包含兩個page。現在讓我們來看看應該怎樣處理。

首先當然要增加乙個tab control資源,然後利用class wizard,在view中增加乙個control變數。

接著建立兩個對話方塊資源,別忘了把style改為child,border改為none。然後就可以在上面加其他控制項了。

接著利用class wizard,分別為這兩個對話方塊建立兩個類,比如cpage1和cpage2。

然後在view類標頭檔案中,加入這兩個對話方塊物件。同時增加乙個變數int m_curseltab,用了表明是哪個page即將被切換。

為了避免使用者在切換tab時,程式對tab index的列舉,可以利用陣列來做這個事情。

在view的初始化函式中需要把cpage1、cpage2和tab control關聯起來,並儲存頁面位址,設定初始頁面,等等。

void ctab_testview::oninitialupdate()

這裡面需要注意的是,我用了乙個cdialog指標陣列來進行儲存,陣列的大小是tab control頁面的個數,陣列下標對應著每個頁面的索引(這樣方便快速訪問)。

使用者切換時,需要響應相關的訊息。

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

首先我們先把當前的頁面隱藏起來,然後得到新的頁面索引,最後就把相關頁面顯示出來即可。這比乙個個去列舉簡單多了。

還有一點比較有意思,那就是ddx/ddv機制的運用。要想獲得tab control各個頁面的資料,可以利用ddx/ddv機制,但需要注意,因為這是多個頁面,所以需要顯式呼叫多次。

void ctab_testview::onbutton1() 

經過這幾步處理,基本上我們就可以利用tab control的強大功能了。

在MFC中使用printf

將以下 加入到對話方塊初始化函式oninitdialog 中allocconsole 控制台除錯視窗開啟 freopen conout w stdout 開啟中文控制台輸出支援在退出函式中加入以下 freeconsole 釋放控制台資源如果使用的是右上角預設的叉號退出介面,可以直接新增以下 void...

在靜態庫中使用MFC

在專案的配置屬性中配置 mfc的使用 時,選項的區別 如果選擇 在共享dll中使用mfc 的話,編譯後的程式中不包含mfc庫,所以檔案會比較小,但是如果程式直接移到乙個沒有安裝過mfc的機器上時,可能會導致找不到mfc的dll,如果選擇 靜態庫中使用mfc 那麼編譯後的程式就直接包含了呼叫mfc的部...

在MFC中使用BROWSEINFO來選擇資料夾路徑

以下內容由網路資源收集和個人專案經驗綜合 首先 browseinfo的結構如下 typedef struct browseinfo browseinfo,pbrowseinfo,lpbrowseinfo pszdisplayname 這個引數指向乙個緩衝區,shbrowseforfolder預設這個...