日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
VC樹控件與數(shù)據(jù)庫(kù)的完美結(jié)合:快速實(shí)現(xiàn)數(shù)據(jù)管理(vc樹控件數(shù)據(jù)庫(kù))

隨著信息技術(shù)的迅猛發(fā)展,大數(shù)據(jù)時(shí)代已經(jīng)來臨。數(shù)據(jù)的管理和處理成為各行各業(yè)不可避免的問題。在軟件開發(fā)中,數(shù)據(jù)管理的重要性更是不言而喻。VC樹控件作為Windows平臺(tái)下的一種常見控件,結(jié)合數(shù)據(jù)庫(kù)的使用,可以快速實(shí)現(xiàn)數(shù)據(jù)管理的目標(biāo),成為軟件開發(fā)中的重要組成部分。

站在用戶的角度思考問題,與客戶深入溝通,找到福山網(wǎng)站設(shè)計(jì)與福山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋福山地區(qū)。

VC樹控件是一種常見的樹形控件,可以用來展示層級(jí)數(shù)據(jù),如文件夾、目錄結(jié)構(gòu)、組織機(jī)構(gòu)等。與傳統(tǒng)的列表控件相比,VC樹控件的數(shù)據(jù)結(jié)構(gòu)更加靈活,可以更好地適應(yīng)不同數(shù)據(jù)的展示需求。在數(shù)據(jù)管理中,VC樹控件可以用來展示表格數(shù)據(jù)及其相關(guān)的從屬關(guān)系,如部門、員工關(guān)系等。

在VC樹控件的實(shí)現(xiàn)中,數(shù)據(jù)源是非常重要的。一般來說,VC樹控件的數(shù)據(jù)源可以使用MFC中的CTreeCtrl類,也可以使用第三方控件,如TreeCtrlEx等。而在實(shí)際的開發(fā)中,為了更好地實(shí)現(xiàn)數(shù)據(jù)管理的目標(biāo),將VC樹控件與數(shù)據(jù)庫(kù)結(jié)合使用是非常必要的。

數(shù)據(jù)庫(kù)是數(shù)據(jù)管理的核心,是一種高效、可靠的數(shù)據(jù)存儲(chǔ)方式。在VC樹控件中,可以使用數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù),并通過控件的相關(guān)事件來完成對(duì)數(shù)據(jù)的增刪改查等操作。常見的數(shù)據(jù)庫(kù)包括SQL Server、MySQL、Oracle等。其中,SQL Server是常用的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),具有高性能、高穩(wěn)定性的特點(diǎn),是VC樹控件開發(fā)中的首選。

以SQL Server為例,我們可以通過ODBC連接方式來實(shí)現(xiàn)與VC樹控件的結(jié)合。在進(jìn)行數(shù)據(jù)操作時(shí),可以使用SQL語(yǔ)句對(duì)數(shù)據(jù)進(jìn)行增刪改查等操作。例如,我們可以通過以下代碼來查詢員工信息:

CString strSQL;

CDatabase database;

CRecordset recordset(&database);

strSQL.Format(_T(“SELECT * FROM Employee WHERE DeptID = %d”), nDeptID);

database.Open(NULL, FALSE, FALSE, _T(“ODBC;DSN=MyDSN;UID=MyUserName;PWD=MyPassword”));

recordset.Open(CRecordset::forwardOnly, strSQL, CRecordset::readOnly);

while (!recordset.IsEOF())

{

int nID;

CString strName;

recordset.GetFieldValue(_T(“ID”), nID);

recordset.GetFieldValue(_T(“Name”), strName);

// TODO: 將數(shù)據(jù)添加到VC樹控件中

recordset.MoveNext();

}

recordset.Close();

database.Close();

通過以上代碼,我們可以從數(shù)據(jù)庫(kù)中查詢出指定部門下的所有員工,并將其添加到VC樹控件中顯示。同樣,我們也可以通過控件的其他事件來完成數(shù)據(jù)的增刪改查等操作,例如,在選中員工節(jié)點(diǎn)后,可以通過彈出對(duì)話框來實(shí)現(xiàn)員工信息的修改。

總體而言,VC樹控件與數(shù)據(jù)庫(kù)的結(jié)合,可以快速實(shí)現(xiàn)數(shù)據(jù)管理的目標(biāo),提高軟件的開發(fā)效率。除此之外,我們還可以通過其他技術(shù)手段來進(jìn)一步優(yōu)化VC樹控件的使用效果,例如:應(yīng)用數(shù)據(jù)緩存技術(shù),提高數(shù)據(jù)訪問速度;加入多線程支持,優(yōu)化用戶體驗(yàn)等。這些技術(shù)手段的應(yīng)用,將有助于進(jìn)一步提升VC樹控件在數(shù)據(jù)管理中的作用。

相關(guān)問題拓展閱讀:

  • VC++ 如何在CTab控件上加載樹形控件

VC++ 如何在CTab控件上加載樹形控件

第5章 演練CTab

5.1 標(biāo)5.2 簽控制的主要功能

標(biāo)簽控制(TabControl)胡知是用來在一個(gè)窗口如對(duì)話框等中的同一用戶區(qū)域控制多組顯示信息或控制信息,由頂部的一組標(biāo)簽來控制不同的信息提示,標(biāo)簽即可以是文本說明也可以是一個(gè)代表文本含義的圖標(biāo),或是兩者的組合。針對(duì)不同的選擇標(biāo)簽,都會(huì)有一組提示信息或控制信息與之相對(duì)應(yīng),供用戶進(jìn)行交互操作,這在WINDOWS98的屬性表中最常見。另外還存在一種特殊風(fēng)格的標(biāo)簽,即TBS_BUTTONS風(fēng)格的標(biāo)簽,這種標(biāo)簽外觀類似按鈕,通過鼠標(biāo)點(diǎn)擊改變狀態(tài),一般用來執(zhí)行一些功能而不是用來顯示或控制信息。

提到標(biāo)簽,最快想到的應(yīng)該是屬性表對(duì)話(PropertySheet),這兩者的配合應(yīng)用更是隨處可見。屬性表對(duì)話框有時(shí)也稱為多頁(yè)對(duì)話框(Multiple-PageDialog)或是標(biāo)簽對(duì)話框(Table Dialog),最多可設(shè)置24個(gè)屬性頁(yè)(PropertyPage),通過頂部的標(biāo)簽來選擇不同的屬性頁(yè)。另外還有一種特殊的屬性表對(duì)話框,就象VC++5.0中的類向?qū)ppWizard一樣,其不存在供用戶選擇的標(biāo)簽,而是按照順序依次控制屬性頁(yè)的顯示,并且還有一般屬性頁(yè)中不存在的“確認(rèn)”、“上一步”、“下一步”、“完成”和“幫助”等按鈕。

標(biāo)簽控制在MFC中只存在一種封裝形式,即控制類CtabCtrl。在使用標(biāo)簽時(shí)即可以在對(duì)話框中直接添加,也可以在窗口中作為子窗口來使用,只不過這樣應(yīng)用時(shí)需要選創(chuàng)建標(biāo)簽。

5.3 標(biāo)5.4 簽控制的對(duì)象結(jié)構(gòu)

5.4.1 標(biāo)5.4.2 簽控制的建立方法

CTabCtrl&tabCtrl 建立標(biāo)簽控制褲核消對(duì)象結(jié)構(gòu)

Create 建立標(biāo)簽控制并綁定對(duì)象

標(biāo)簽控制CTabCtrl::Create的調(diào)用格式如下:

BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

其中參數(shù)dwStyle用來確氏悄定標(biāo)簽控制的風(fēng)格;rect用來控制標(biāo)簽的大小和位置;pParentWnd用來確定標(biāo)簽控制的父窗口句柄;nID用來確定標(biāo)簽控制的標(biāo)識(shí)符。

標(biāo)簽控制的風(fēng)格可以是如下值的組合:

TCS_BUTTONS 表示將標(biāo)簽外觀定義成類似按鈕

TCS_FIXEDWIDTH 使所有標(biāo)簽具有相同的寬度

TCS_FOCUSNEVER 使特定標(biāo)簽永遠(yuǎn)不接收輸入焦點(diǎn)

TCS_FOCUSONBUTTONDOWN 當(dāng)標(biāo)簽被鼠標(biāo)點(diǎn)擊時(shí)接收輸入焦點(diǎn),其僅與TCS_BUTTONS合用

TCS_FORCEICONLEFT 強(qiáng)制圖標(biāo)在左面,剩余部分使標(biāo)簽居中

TCS_FORCELABELLEFT 使圖標(biāo)和標(biāo)簽均左對(duì)齊

TCS_MULTILINE 允許標(biāo)簽控制顯示多行標(biāo)簽

TCS_OWNERDRAWFIXED 允許父窗口自繪標(biāo)簽

TCS_RIGHTJUSTIFY 使標(biāo)簽右對(duì)齊

TCS_SHAREIMAGELISTS 當(dāng)控制被撤消時(shí)標(biāo)簽控制的圖像不被撤消

TCS_TOOLTIPS 允許標(biāo)簽控制存在工具提示控制

TCS_TABS 標(biāo)簽正常顯示,為默認(rèn)狀態(tài)

TCS_SINGLELINE 將標(biāo)簽只顯示在一行上,默認(rèn)狀態(tài)

TCS_RAGGEDRIGHT 不使標(biāo)簽自動(dòng)填滿控制區(qū)域,默認(rèn)狀態(tài)

同樣,標(biāo)簽控制還可以使用窗口的一些控制風(fēng)格:

WS_CHILD 為標(biāo)簽控制創(chuàng)建子窗口,只能與WS_POPUP風(fēng)格一起使用

WS_VISIBLE 建立一個(gè)初始可視的標(biāo)簽控制

WS_DISABLED 建立一個(gè)初始不可視的標(biāo)簽控制

WS_GROUP 建立標(biāo)簽控制群組的之一個(gè)控制

WS_TABSTOP 建立可用TAB鍵移動(dòng)的標(biāo)簽控制

5.4.3 標(biāo)5.4.4 簽控制的屬性類

標(biāo)簽控制的屬性類包括取得與標(biāo)簽控制相關(guān)聯(lián)的圖像列表GetImageList、設(shè)置標(biāo)簽控制的圖像列表SetImageList、取得標(biāo)簽控制中標(biāo)簽的總數(shù)GetItemCount、取得標(biāo)簽控制中特定標(biāo)答的相關(guān)信息GetItem、設(shè)置標(biāo)簽的部分或全部屬性SetItem、檢測(cè)當(dāng)前被選中的標(biāo)簽GetCurSel、將一個(gè)標(biāo)簽設(shè)置為選中狀態(tài)SetCurSel和取得具有當(dāng)前輸入焦點(diǎn)的標(biāo)簽SetCurSel等。

5.4.5 標(biāo)5.4.6 簽控制的操作方法

標(biāo)簽控制的操作方法包括在標(biāo)簽控制中插入一個(gè)標(biāo)簽InsertItem、刪除一個(gè)標(biāo)簽 DeleteItem、從標(biāo)簽控制中刪除所有項(xiàng)目DeleteAllItems、從標(biāo)簽控制中刪除一個(gè)圖像列表RemoveImage和繪制標(biāo)簽控制中的特定一項(xiàng)DrawItem等。

5.5 標(biāo)5.6 簽控制的數(shù)據(jù)結(jié)構(gòu)

在使用標(biāo)簽控制時(shí),必須使用的函數(shù)就是在標(biāo)簽控制中插入標(biāo)簽。函數(shù)InsertItem的原形如下:

BOOL InsertItem(int nItem,TC_ITEM * pTabCtrlItem);

該函數(shù)中的TC_ITEM為添加標(biāo)簽時(shí)所使用信息的數(shù)據(jù)結(jié)構(gòu),其數(shù)據(jù)成員的定義方法及含義如下:

typedef struct _TC_ITEM {

UINT mask; // 確定結(jié)構(gòu)成員的屏蔽或設(shè)置位

UINT lpReserved1; // 保留未用

UINT lpReserved2; // 保留未用

LPSTR pszText; // 標(biāo)簽名稱字符串

int cchTextMax; // 標(biāo)簽名稱字符串緩沖區(qū)大小

int iImage; // 標(biāo)簽控制的圖像索引號(hào)

LPARAM lParam; // 應(yīng)用程序定義的相關(guān)32位數(shù)據(jù)

} TC_ITEM;

當(dāng)鼠標(biāo)點(diǎn)擊標(biāo)簽控制中的標(biāo)簽時(shí),標(biāo)簽控制就會(huì)向其父窗口發(fā)送相關(guān)的通知消息,通過處理這些通知消息,程序可以實(shí)現(xiàn)各種功能。

5.7 屬性表和屬性頁(yè)的基本用法

在標(biāo)簽控制過程中,屬性表對(duì)話框和屬性頁(yè)是必不可少的。在MFC類庫(kù)中,屬性表對(duì)話框類CpropertySheet是由CWnd類派生而來的,而屬性頁(yè)類CpropertyPage是由Cdialog類派生而來的,它們的用法基本相同:

1、創(chuàng)建所有的屬性頁(yè)。創(chuàng)建屬性頁(yè)的方法與創(chuàng)建一般對(duì)話框資源的方法一樣,利用對(duì)話框編輯器可以為每個(gè)屬性頁(yè)創(chuàng)建一個(gè)對(duì)話框模板,其區(qū)別在于,當(dāng)利用類向?qū)lassWizard為屬性頁(yè)生成類時(shí)應(yīng)選擇屬性頁(yè)類CpropertyPage作為基類,而不是將一般的對(duì)話框類Cdialog作為基類;

2、創(chuàng)建屬性表對(duì)話框,并將事先創(chuàng)建好的各屬性頁(yè)添加進(jìn)去,兩者的創(chuàng)建順序可以互換,但在創(chuàng)建完之后將屬性頁(yè)添加到屬性表對(duì)話框中去這一步是必須要做的;

3、顯示屬性表對(duì)話框。雖然屬性表對(duì)話框類CpropertySheet不是由對(duì)話框類Cdialog派生而來的,但兩者的操作非常類似,調(diào)用DoModal()函數(shù)就會(huì)顯示一個(gè)模態(tài)屬性表對(duì)話框,而調(diào)用Create()操作就會(huì)顯示一個(gè)非模態(tài)的屬性表對(duì)話框;

4、對(duì)數(shù)據(jù)交換的處理。和對(duì)話框類似,屬性表對(duì)話框與對(duì)象之間的數(shù)據(jù)交換也是通過數(shù)據(jù)成員2來實(shí)現(xiàn)的,只是屬性表本身不帶數(shù)據(jù)成員,而實(shí)際進(jìn)行數(shù)據(jù)交換的是屬性頁(yè)中的數(shù)據(jù)成員;

5、對(duì)向?qū)?duì)話框的處理。如果要顯示一個(gè)向?qū)?duì)話框,在顯示之前應(yīng)首先調(diào)用SetWizardMode()函數(shù)對(duì)向?qū)?duì)話框進(jìn)行特殊處理,對(duì)于存在按鈕的向?qū)?duì)話框,還應(yīng)調(diào)用SetWizardButtons()來對(duì)向?qū)?duì)話框的按鈕功能進(jìn)行定制,在用戶操作結(jié)束時(shí)還應(yīng)調(diào)用SetFinishText()函數(shù)將“完成”按鈕設(shè)置為有效狀態(tài)。

5.8 標(biāo)5.9 簽控制的應(yīng)用技巧示例程序

本文給出一個(gè)基于文檔的標(biāo)簽應(yīng)用實(shí)例。實(shí)例程序中通過簡(jiǎn)單設(shè)置菜單、標(biāo)簽和屬性表來演示標(biāo)簽控制的實(shí)際應(yīng)用技巧,程序通過選擇菜單選項(xiàng)彈出設(shè)置正文顏色、字體和修飾等屬性表對(duì)話框來和用戶進(jìn)行簡(jiǎn)單交互。其實(shí)現(xiàn)步驟如下:

1、利用應(yīng)用程序向?qū)ppWizard創(chuàng)建一個(gè)基于文檔的工程TAB,在選擇工程類型時(shí)應(yīng)選擇單文檔;

2、利用資源中的菜單生成器,刪除無用菜單,并增加如下菜單結(jié)構(gòu)

菜單名 標(biāo)識(shí)符

設(shè)置(S) (彈出菜單名)

背景設(shè)置(B) IDM_BKGRND

前景設(shè)置(F) IDM_FRGRND

3、利用對(duì)話框設(shè)計(jì)器設(shè)置屬性表對(duì)話框所需要的四個(gè)屬性頁(yè),注意在選擇基類時(shí)應(yīng)將屬性頁(yè)類CpropertyPage作為基類,并將對(duì)話框及菜單等控件的所有屬均改為中文。四個(gè)屬性頁(yè)及其包括的控件內(nèi)容分別為:(1)文字屬性對(duì)話框包括一個(gè)輸入文字的文本輸入框,用于輸入和修改在窗口上顯示的文字;(2)字體屬性對(duì)話框包括三個(gè)選中框,用來確定顯示的字體修飾;(3)字間距屬性對(duì)話框包括一個(gè)用于顯示提示信息的標(biāo)簽和用于輸入字間距大小的文本輸入框;(4)顏色屬性對(duì)話框包括一個(gè)成組框和三個(gè)單選圓鈕;(5)窗口中設(shè)置一個(gè)用于顯示輸入文字的標(biāo)簽。

以上控制的設(shè)置參數(shù)如下:

控制名稱 標(biāo)題名稱 標(biāo)識(shí)符串

標(biāo)簽控制 IDC_TABCTRL

表態(tài)文本 字間距(10-100) IDC_STATIC1

編輯框 IDC_LIST

成組框 顏色 IDC_STATIC2

單選按鈕 黑色 IDC_BLACK

紅色 IDC_RED

藍(lán)色 IDC_BLUE

文本框(編輯框) IDC_TEXT

設(shè)置字體(復(fù)選按鈕)粗體 IDC_BOLD

斜體 IDC_ITALIC

下劃線 IDC_UNDERLINE

按 鈕 確認(rèn) IDOK

取消 IDCANCEL

利用類向?qū)lassWizard在屬性表對(duì)話框CtabDlg、屬性頁(yè)對(duì)話框CtextPage和CstylePage中分別加入如下數(shù)據(jù)成員:

標(biāo)識(shí)符串 類型 數(shù)據(jù)成員

IDC_TABCTRL CtabCtrl m_tabCtrl

IDC_DIST int m_nDist

IDC_BLACK int m_nColor

IDC_TEXT Cstring m_cText

IDC_BOLD BOOL m_bBold

IDC_ITALIC BOOL m_bItalic

IDC_UNDERLINE BOOL m_bUnderline

以上數(shù)據(jù)成員也可以在TABDlg.h、StylePage.h和TextPage.h中利用手工方法增加。

4、將要顯示的數(shù)據(jù)成員加入到視類中去,來和對(duì)話框之間進(jìn)行數(shù)據(jù)交換,并且將其在初始化函數(shù)中進(jìn)行數(shù)據(jù)初始化。

(1)在TabView.h中增加如下代碼:

#include TabDlg.h

#include TextPage.h

#include StylePage.h

class CTabView : public CView

{public:

int nDist;//數(shù)值

int nColor;//顏色

CString cText;//中文字符串

BOOL bBold,bItalic,bUnderline;//字體屬性

}

(2)在TabView.cpp中對(duì)數(shù)據(jù)成員進(jìn)行如下初始化。

CTabView::CTabView()

{ nDist=20;

nColor=1;

cText=CString(標(biāo)簽控制演示實(shí)例);

bBold=bItalic=bUnderline=FALSE;

}

(3)在TabDlg.cpp中向控制中增加標(biāo)簽,來實(shí)現(xiàn)背景設(shè)置功能。

BOOL CTabDlg::OnInitDialog()

{ CDialog::OnInitDialog();

TC_ITEM tcItem;//添加標(biāo)簽

tcItem.mask=TCIF_TEXT;

tcItem.pszText=字 間 距;

m_tabCtrl.InsertItem(0,&tcItem);

tcItem.pszText=顏色設(shè)置;

m_tabCtrl.InsertItem(1,&tcItem);

m_tabCtrl.SetCurSel(1);

return TRUE;

}

當(dāng)標(biāo)簽切換時(shí),標(biāo)簽控制會(huì)自動(dòng)向?qū)υ捒虼翱诎l(fā)送TCN_SELCHANGE通知消息,這時(shí)需要根據(jù)所選擇的標(biāo)簽索引號(hào)對(duì)屬性頁(yè)的顯示和隱藏進(jìn)行切換控制,應(yīng)完善OnSelchangeTabctrl()函數(shù):

void CTabDlg::OnSelchangeTabctrl(NMHDR* pNMHDR, LRESULT* pResult)

{ int iPage=m_tabCtrl.GetCurSel();//所選標(biāo)簽號(hào)

switch(iPage){

case 0://字間距

GetDlgItem(IDC_STATIC2)->ShowWindow(SW_HIDE);//隱藏選擇按鈕

GetDlgItem(IDC_BLACK)->ShowWindow(SW_HIDE);//隱藏選擇按鈕

GetDlgItem(IDC_RED)->ShowWindow(SW_HIDE);//隱藏選擇按鈕

GetDlgItem(IDC_BLUE)->ShowWindow(SW_HIDE);//隱藏選擇按鈕

GetDlgItem(IDC_STATIC1)->ShowWindow(SW_SHOW);//顯示輸入項(xiàng)數(shù)

GetDlgItem(IDC_DIST)->ShowWindow(SW_SHOW);//顯示輸入項(xiàng)數(shù)

break;

case 1://顏色設(shè)置

GetDlgItem(IDC_STATIC1)->ShowWindow(SW_HIDE);//隱藏項(xiàng)數(shù)輸入

GetDlgItem(IDC_DIST)->ShowWindow(SW_HIDE);//隱藏項(xiàng)數(shù)輸入

GetDlgItem(IDC_STATIC2)->ShowWindow(SW_SHOW);//顯示選項(xiàng)選擇

GetDlgItem(IDC_BLACK)->ShowWindow(SW_SHOW);//顯示選項(xiàng)選擇

GetDlgItem(IDC_RED)->ShowWindow(SW_SHOW);//顯示選項(xiàng)選擇

GetDlgItem(IDC_BLUE)->ShowWindow(SW_SHOW);//顯示選項(xiàng)選擇

break;

}

*pResult = 0;

}

(4)菜單功能的完善。在執(zhí)行相應(yīng)的菜單功能時(shí),必須對(duì)類向?qū)г黾拥南鄳?yīng)功能函數(shù)進(jìn)行代碼完善,這就要處理TabView.cpp文件,背景設(shè)置功能函數(shù)如下:

void CTabView::OnBkgrnd()

{ CTabDlg ctd;

ctd.m_nDist=nDist;

ctd.m_nColor=nColor;

if(ctd.DoModal()==IDCANCEL) return;

nDist=ctd.m_nDist;

nColor=ctd.m_nColor;

Invalidate();//重新繪制窗口

}

同樣,也要對(duì)前景設(shè)置功能函數(shù)進(jìn)行完善:

void CTabView::OnFrgrnd()

{ CPropertySheet cps(前景設(shè)置);//創(chuàng)建屬性表對(duì)象

CTextPage ctp; //顯示文字屬性頁(yè)

CStylePage csp;//顯示字體屬性頁(yè)

ctp.m_cText=cText;

csp.m_bBold=bBold;

csp.m_bItalic=bItalic;

csp.m_bUnderline=bUnderline;

cps.AddPage(&ctp);//添加屬性頁(yè)

cps.AddPage(&csp);

if(cps.DoModal()==IDCANCEL) return;

cText=ctp.m_cText;

bBold=csp.m_bBold;

bItalic=csp.m_bItalic;

bUnderline=csp.m_bUnderline;

Invalidate();//重新繪制窗口

}

(5)為了充分演示標(biāo)簽控制與各屬性頁(yè)之間的數(shù)據(jù)交換功能,應(yīng)該實(shí)現(xiàn)標(biāo)簽控制各屬性頁(yè)與用戶之間數(shù)據(jù)交換結(jié)束后的窗口顯示功能,筆者實(shí)現(xiàn)的功能函數(shù)顯示了由屬性頁(yè)中輸入的字體及背景網(wǎng)格功能,TabView.cpp中的對(duì)應(yīng)函數(shù)代碼如下:

void CTabView::OnDraw(CDC* pDC)

{ CTabDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

RECT rc;

GetClientRect(&rc);

int i,j,k;

CPen pen,*pOldPen;

COLORREF color;

switch (nColor){

case 0:color=RGB(0,0,0); //設(shè)置黑色

break;

case 1:color=RGB(0xff,0,0);//設(shè)置紅色

break;

case 2:color=RGB(0,0,0xff);//設(shè)置藍(lán)色

break;

}

pen.CreatePen(PS_SOLID,1,color);

pOldPen=pDC->SelectObject(&pen);//繪制背景網(wǎng)格

j=rc.right/nDist+1;

k=rc.bottom/nDist+1;

for(i=0;i

pDC->MoveTo(i*nDist,0);

pDC->LineTo(0,i*nDist);

if(i

pDC->MoveTo(i*nDist,0);

pDC->LineTo(rc.right,(j-i)*nDist);

} else {

pDC->MoveTo(0,(i-j)*nDist);

pDC->LineTo(rc.right,i*nDist);

}

}

pDC->SelectObject(&pOldPen);

CFont font,*pOldFont;

font.CreateFont(50,0,0,0,bBold?1000:200,

bItalic,bUnderline,0,ANSI_CHARSET,

OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,

DEFAULT_QUALITY,DEFAULT_PITCH,NULL);

pOldFont=pDC->SelectObject(&font);

pDC->TextOut(20,20,cText);

pDC->SelectObject(pOldFont);

}

標(biāo)簽控制的整個(gè)實(shí)現(xiàn)過程雖然比較繁鎖,但只要掌握其實(shí)現(xiàn)的本質(zhì),設(shè)計(jì)一個(gè)優(yōu)秀的標(biāo)簽控制界面也并非很困難的事情。

筆者實(shí)現(xiàn)的標(biāo)簽控制的演練示例結(jié)果如下:

標(biāo)簽控制演練示例結(jié)果

第6章 演練CToolBar

6.1 工具條控制的主要功能

所謂工具條就是具有位圖和分隔符組成的一組命令按鈕,位圖按鈕部分可以是下推按鈕、檢查盒按鈕、無線按鈕等。工具條對(duì)象類派生于主窗口架框類CframeWnd或CMDIFrameWnd,其類控制CToolBar::GetToolBarCtrl是MFC類庫(kù)中封裝的一個(gè)成員函數(shù),允許使用類庫(kù)中提供的一般控制和附加功能,CtoolBar類控制成員控制提供了Windows一般控制的所有功能,然而,通過調(diào)用GetToolBarCtrl成員函數(shù)取得引用后,可以使工具條具有更強(qiáng)的特性。

工具條的創(chuàng)建具有四個(gè)步聚:首先是建立工具條資源;然后建立工具條對(duì)象結(jié)構(gòu);其次通過調(diào)用建立函數(shù)建立工具條對(duì)象并綁定;最后調(diào)用LoadToolBar調(diào)入工具條資源。

另外,還可以通過直接加載位圖的方法來建立,步驟如下:首先建立工具條對(duì)象;然后通過調(diào)用建立函數(shù)建立工具條并綁定對(duì)象;其次調(diào)入包含按鈕的位圖;最后利用SetButtons 函數(shù)設(shè)置按鈕的風(fēng)格并與位圖建立聯(lián)系。

其中,所有按鈕位圖均存放在一個(gè)位圖文件中,按鈕位圖的大小相同,默認(rèn)為16點(diǎn)寬、15點(diǎn)高,位圖必須從左至右存放。設(shè)置按鈕函數(shù)具有指向一組控制標(biāo)識(shí)符ID的指針和索引值,用來確定每個(gè)按鈕的位置,如果存在分隔符ID_SEPARATOR,那么該圖像就不存在索引值。正常情況下工具條中的按鈕都是單排從左至右排列的,可以通過SetButtonInfo函數(shù)改變排序規(guī)則。工具條中最終形成的按鈕大小相同,均為24 x 22象素,每個(gè)按鈕只對(duì)象一幅圖像。工具條中的按鈕默認(rèn)為下推按鈕,通過設(shè)置TBBS_CHECKBOX風(fēng)格可以實(shí)現(xiàn)檢查盒按鈕,通過調(diào)用SetRadio成員函數(shù)可以實(shí)現(xiàn)無線按鈕。

6.2 工具條控制的對(duì)象結(jié)構(gòu)

6.2.1 工具條的對(duì)象結(jié)構(gòu)

6.2.1.1 工具條的建立方法

CToolBar &ToolBar 建立工具條對(duì)象結(jié)構(gòu)

Create 建立工具條對(duì)象并綁定

工具條類CToolBar::Create 的調(diào)用格式如下:

BOOL Create( CWnd* pParentWnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP,

UINT nID = AFX_IDW_TOOLBAR );

其中參數(shù)pParentWnd用來確定指向工具條父窗口的指針;參數(shù)dwStyle用來確定工具條的風(fēng)格,其取值如下;參數(shù)nID用來確定工具條子窗口的標(biāo)識(shí)符。

CBRS_TOP 表示工具條在框架窗口的頂部

CBRS_BOTTOM 表示工具條在框架窗口的底部

CBRS_NOALIGN 表示工具條在父窗口改變大小時(shí)不響應(yīng)

CBRS_TOOLTIPS 表示工具條具有動(dòng)態(tài)提示功能

CBRS_SIZE_DYNAMIC 表示工具條是靜態(tài)的不能改變

CBRS_SIZE_FIXED 表示工具條是動(dòng)態(tài)的可以改變

CBRS_FLOATING 表示工具條是浮動(dòng)的

CBRS_FBY 表示狀態(tài)條上顯示工具條中按鈕的信息

CBRS_HIDE_INPLACE 表示工具條隱藏

除以上函數(shù)外,還包括設(shè)置按鈕和位圖的大小SetSizes、設(shè)置工具條的高度SetHeight、調(diào)入工具條資源LoadToolBar、調(diào)入工具條按鈕位圖LoadBitmap、設(shè)置工具條按鈕位圖SetBitmap、設(shè)置工具條中位圖按鈕的風(fēng)格和索引值SetButtons等控制函數(shù)。

6.2.1.2 工具條的類屬性

工具條控制類的屬性包括取得標(biāo)識(shí)符ID對(duì)象按鈕索引CommandToIndex、取得索引對(duì)應(yīng)的命令標(biāo)識(shí)符ID或分隔符GetItemID、取得索引對(duì)應(yīng)的矩形區(qū)域GetItemRect、取得按鈕風(fēng)格GetButtonStyle、設(shè)置按鈕風(fēng)格SetButtonStyle、取得按鈕的ID標(biāo)識(shí)-風(fēng)格-圖象數(shù)GetButtonInfo、設(shè)置按鈕ID標(biāo)識(shí)-風(fēng)格-圖象數(shù)SetButtonInfo、取得按鈕提示文本GetButtonText、設(shè)置按鈕提示文本SetButtonText和取得工具條直接存取控制GetToolBarCtrl等。

6.2.2 工具條控制的對(duì)象結(jié)構(gòu)

6.2.2.1 工具條控制的建立方法

CToolBarCtrl &ToolBarCtrl 建立工具條控制對(duì)象結(jié)構(gòu)

Create 建立工具條控制對(duì)象并綁定

工具條控制類CToolBarCtrl::Create的調(diào)用格式如下:

BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

其中參數(shù)dwStyle用來確定工具條控制的風(fēng)格,必須存在WS_CHILD風(fēng)格;參數(shù)rect用來確定工具條控制的大小和位置;參數(shù)pParentWnd用來確定工具條控制的父窗口指針,不能為NULL;參數(shù)nID用來確定工具條控制的標(biāo)識(shí)符。

可以利用WS_CHILD、WS_VISIBLE和WS_DISABLED來設(shè)置工具條窗口的風(fēng)格,但必須合理設(shè)置如下控制風(fēng)格:

CCS_ADJUSTABLE 允許用戶處理工具條窗口大小,如果存在工具條窗口必須處理相應(yīng)信

CCS_BOTTOM 使控制處于父窗口客戶區(qū)域底部并與窗口同樣寬

CCS_NODIVIDER 禁止在控制的頂部繪制2個(gè)象素的高亮條

CCS_NOHILITE 禁止在控制的頂部繪制1個(gè)象素的高亮條

CCS_NOMOVEY 使控制改變大小和移動(dòng)時(shí)自動(dòng)水平對(duì)齊,垂直對(duì)齊必須處理WM_SIZE消息

如果CCS_NORESIZE風(fēng)格有效,則該風(fēng)格無效

CCS_NOPARENTALIGN禁止控制自動(dòng)移到父窗口頂部或底部,如果CCS_TOP或 CCS_BOTTOM風(fēng)格

有效,則高度調(diào)整為默認(rèn)而寬度可以改變

CCS_NORESIZE 禁止設(shè)置新的大小或無效值時(shí)使用默認(rèn)寬度和高度值,而使用建立值

CCS_TOP 使控制自動(dòng)??吭诟复翱诳蛻魠^(qū)域頂部并與父窗口同樣寬度

最后,還必須利用下面的風(fēng)格來控制工具條

TBSTYLE_TOOLTIPS 使工具條建立并管理動(dòng)態(tài)提示控制

TBSTYLE_WRAPABLE 使工具條控制按鈕具有多行排列格式

6.2.2.2 工具條控制中的數(shù)據(jù)結(jié)構(gòu)

工具條控制中最常用的數(shù)據(jù)結(jié)構(gòu)為TBBUTTON,其具體結(jié)構(gòu)如下:

typedef struct _TBBUTTON {

int iBitmap; // 基于0的位圖索引值

int idCommand; // 按鈕按下時(shí)發(fā)送的命令值

BYTE fsState; // 按鈕的狀態(tài)

BYTE fsStyle; // 按鈕的風(fēng)格

DWORD dwData; // 應(yīng)用程序定義的數(shù)據(jù)

int iString; // 基于0的按鈕標(biāo)簽字符串索引值

} TBBUTTON;

其中按鈕狀態(tài)fsState的值如下:

TBSTATE_CHECKED 表示按鈕具有TBSTYLE_CHECKED風(fēng)格并且被按下

TBSTATE_ENABLED 表示按鈕允許接受輸入,否則變灰不接受任何輸入

TBSTATE_HIDDEN 表示按鈕不可見并且不接受任何輸入

TBSTATE_INDETERMINATE 表示按鈕是變灰的

TBSTATE_PRESSED 表示按鈕正被按下

TBSTATE_WRAP 表示按鈕具有換行特性,該按鈕必須具有TBSTATE_ENABLED狀態(tài)

按鈕風(fēng)格style可以是下列值的組合:

TBSTYLE_BUTTON 表示建立標(biāo)準(zhǔn)下推按鈕

TBSTYLE_CHECK 表示建立檢查狀態(tài)按鈕

TBSTYLE_CHECKGROUP表示建立檢查按鈕群

TBSTYLE_GROUP 表示建立按下狀態(tài)按鈕群

TBSTYLE_SEP 表示建立按鈕分隔符

6.2.2.3 工具條控制的類屬性

工具條控制的類屬性必然的聯(lián)系判斷按鈕使能狀態(tài)IsButtonEnabled、判斷按鈕檢查狀態(tài)IsButtonChecked、判斷按鈕按下狀態(tài)IsButtonPressed、判斷按鈕是否隱藏IsButtonHidden、判斷按鈕變灰狀態(tài)IsButtonIndeterminate、設(shè)置按鈕狀態(tài)SetState、取得按鈕狀態(tài)GetState、取得按鈕有關(guān)信息GetButton、取得按鈕總數(shù)GetButtonCount、取得按鈕矩形區(qū)域GetItemRect、設(shè)置按鈕結(jié)構(gòu)大小SetButtonStructSize、設(shè)置按鈕大小SetButtonSize、設(shè)置按鈕位圖大小SetBitmapSize、取得按鈕提示控制GetToolTips、設(shè)置按鈕提示控制SetToolTips等。

6.2.2.4 工具條控制類的操作方法

工具條控制類的操作方法包括使能按鈕EnableButton、檢查按鈕CheckButton、按下按鈕PressButton、隱藏按鈕HideButton、變灰按鈕Indeterminate、增加按鈕AddButtons、插入按鈕InsertButton、刪除按鈕DeleteButton、取得控制符ID對(duì)應(yīng)的索引CommandToIndex、恢復(fù)工具條狀態(tài)RestoreState、保存工具條狀態(tài)SaveState和重新確定工具條大小AutoSize等。

vc 樹控件 數(shù)據(jù)庫(kù)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于vc 樹控件 數(shù)據(jù)庫(kù),VC樹控件與數(shù)據(jù)庫(kù)的完美結(jié)合:快速實(shí)現(xiàn)數(shù)據(jù)管理,VC++ 如何在CTab控件上加載樹形控件的信息別忘了在本站進(jìn)行查找喔。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


當(dāng)前名稱:VC樹控件與數(shù)據(jù)庫(kù)的完美結(jié)合:快速實(shí)現(xiàn)數(shù)據(jù)管理(vc樹控件數(shù)據(jù)庫(kù))
地址分享:http://www.dlmjj.cn/article/dpphigg.html