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

站在用戶的角度思考問題,與客戶深入溝通,找到福山網(wǎng)站設(shè)計與福山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站建設(shè)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋福山地區(qū)。
VC樹控件是一種常見的樹形控件,可以用來展示層級數(shù)據(jù),如文件夾、目錄結(jié)構(gòu)、組織機構(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樹控件的實現(xiàn)中,數(shù)據(jù)源是非常重要的。一般來說,VC樹控件的數(shù)據(jù)源可以使用MFC中的CTreeCtrl類,也可以使用第三方控件,如TreeCtrlEx等。而在實際的開發(fā)中,為了更好地實現(xiàn)數(shù)據(jù)管理的目標(biāo),將VC樹控件與數(shù)據(jù)庫結(jié)合使用是非常必要的。
數(shù)據(jù)庫是數(shù)據(jù)管理的核心,是一種高效、可靠的數(shù)據(jù)存儲方式。在VC樹控件中,可以使用數(shù)據(jù)庫存儲數(shù)據(jù),并通過控件的相關(guān)事件來完成對數(shù)據(jù)的增刪改查等操作。常見的數(shù)據(jù)庫包括SQL Server、MySQL、Oracle等。其中,SQL Server是常用的關(guān)系數(shù)據(jù)庫管理系統(tǒng),具有高性能、高穩(wěn)定性的特點,是VC樹控件開發(fā)中的首選。
以SQL Server為例,我們可以通過ODBC連接方式來實現(xiàn)與VC樹控件的結(jié)合。在進(jìn)行數(shù)據(jù)操作時,可以使用SQL語句對數(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ù)庫中查詢出指定部門下的所有員工,并將其添加到VC樹控件中顯示。同樣,我們也可以通過控件的其他事件來完成數(shù)據(jù)的增刪改查等操作,例如,在選中員工節(jié)點后,可以通過彈出對話框來實現(xiàn)員工信息的修改。
總體而言,VC樹控件與數(shù)據(jù)庫的結(jié)合,可以快速實現(xiàn)數(shù)據(jù)管理的目標(biāo),提高軟件的開發(fā)效率。除此之外,我們還可以通過其他技術(shù)手段來進(jìn)一步優(yōu)化VC樹控件的使用效果,例如:應(yīng)用數(shù)據(jù)緩存技術(shù),提高數(shù)據(jù)訪問速度;加入多線程支持,優(yōu)化用戶體驗等。這些技術(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)胡知是用來在一個窗口如對話框等中的同一用戶區(qū)域控制多組顯示信息或控制信息,由頂部的一組標(biāo)簽來控制不同的信息提示,標(biāo)簽即可以是文本說明也可以是一個代表文本含義的圖標(biāo),或是兩者的組合。針對不同的選擇標(biāo)簽,都會有一組提示信息或控制信息與之相對應(yīng),供用戶進(jìn)行交互操作,這在WINDOWS98的屬性表中最常見。另外還存在一種特殊風(fēng)格的標(biāo)簽,即TBS_BUTTONS風(fēng)格的標(biāo)簽,這種標(biāo)簽外觀類似按鈕,通過鼠標(biāo)點擊改變狀態(tài),一般用來執(zhí)行一些功能而不是用來顯示或控制信息。
提到標(biāo)簽,最快想到的應(yīng)該是屬性表對話(PropertySheet),這兩者的配合應(yīng)用更是隨處可見。屬性表對話框有時也稱為多頁對話框(Multiple-PageDialog)或是標(biāo)簽對話框(Table Dialog),最多可設(shè)置24個屬性頁(PropertyPage),通過頂部的標(biāo)簽來選擇不同的屬性頁。另外還有一種特殊的屬性表對話框,就象VC++5.0中的類向?qū)ppWizard一樣,其不存在供用戶選擇的標(biāo)簽,而是按照順序依次控制屬性頁的顯示,并且還有一般屬性頁中不存在的“確認(rèn)”、“上一步”、“下一步”、“完成”和“幫助”等按鈕。
標(biāo)簽控制在MFC中只存在一種封裝形式,即控制類CtabCtrl。在使用標(biāo)簽時即可以在對話框中直接添加,也可以在窗口中作為子窗口來使用,只不過這樣應(yīng)用時需要選創(chuàng)建標(biāo)簽。
5.3 標(biāo)5.4 簽控制的對象結(jié)構(gòu)
5.4.1 標(biāo)5.4.2 簽控制的建立方法
CTabCtrl&tabCtrl 建立標(biāo)簽控制褲核消對象結(jié)構(gòu)
Create 建立標(biāo)簽控制并綁定對象
標(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)識符。
標(biāo)簽控制的風(fēng)格可以是如下值的組合:
TCS_BUTTONS 表示將標(biāo)簽外觀定義成類似按鈕
TCS_FIXEDWIDTH 使所有標(biāo)簽具有相同的寬度
TCS_FOCUSNEVER 使特定標(biāo)簽永遠(yuǎn)不接收輸入焦點
TCS_FOCUSONBUTTONDOWN 當(dāng)標(biāo)簽被鼠標(biāo)點擊時接收輸入焦點,其僅與TCS_BUTTONS合用
TCS_FORCEICONLEFT 強制圖標(biāo)在左面,剩余部分使標(biāo)簽居中
TCS_FORCELABELLEFT 使圖標(biāo)和標(biāo)簽均左對齊
TCS_MULTILINE 允許標(biāo)簽控制顯示多行標(biāo)簽
TCS_OWNERDRAWFIXED 允許父窗口自繪標(biāo)簽
TCS_RIGHTJUSTIFY 使標(biāo)簽右對齊
TCS_SHAREIMAGELISTS 當(dāng)控制被撤消時標(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)簽自動填滿控制區(qū)域,默認(rèn)狀態(tài)
同樣,標(biāo)簽控制還可以使用窗口的一些控制風(fēng)格:
WS_CHILD 為標(biāo)簽控制創(chuàng)建子窗口,只能與WS_POPUP風(fēng)格一起使用
WS_VISIBLE 建立一個初始可視的標(biāo)簽控制
WS_DISABLED 建立一個初始不可視的標(biāo)簽控制
WS_GROUP 建立標(biāo)簽控制群組的之一個控制
WS_TABSTOP 建立可用TAB鍵移動的標(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、檢測當(dāng)前被選中的標(biāo)簽GetCurSel、將一個標(biāo)簽設(shè)置為選中狀態(tài)SetCurSel和取得具有當(dāng)前輸入焦點的標(biāo)簽SetCurSel等。
5.4.5 標(biāo)5.4.6 簽控制的操作方法
標(biāo)簽控制的操作方法包括在標(biāo)簽控制中插入一個標(biāo)簽InsertItem、刪除一個標(biāo)簽 DeleteItem、從標(biāo)簽控制中刪除所有項目DeleteAllItems、從標(biāo)簽控制中刪除一個圖像列表RemoveImage和繪制標(biāo)簽控制中的特定一項DrawItem等。
5.5 標(biāo)5.6 簽控制的數(shù)據(jù)結(jié)構(gòu)
在使用標(biāo)簽控制時,必須使用的函數(shù)就是在標(biāo)簽控制中插入標(biāo)簽。函數(shù)InsertItem的原形如下:
BOOL InsertItem(int nItem,TC_ITEM * pTabCtrlItem);
該函數(shù)中的TC_ITEM為添加標(biāo)簽時所使用信息的數(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)簽控制的圖像索引號
LPARAM lParam; // 應(yīng)用程序定義的相關(guān)32位數(shù)據(jù)
} TC_ITEM;
當(dāng)鼠標(biāo)點擊標(biāo)簽控制中的標(biāo)簽時,標(biāo)簽控制就會向其父窗口發(fā)送相關(guān)的通知消息,通過處理這些通知消息,程序可以實現(xiàn)各種功能。
5.7 屬性表和屬性頁的基本用法
在標(biāo)簽控制過程中,屬性表對話框和屬性頁是必不可少的。在MFC類庫中,屬性表對話框類CpropertySheet是由CWnd類派生而來的,而屬性頁類CpropertyPage是由Cdialog類派生而來的,它們的用法基本相同:
1、創(chuàng)建所有的屬性頁。創(chuàng)建屬性頁的方法與創(chuàng)建一般對話框資源的方法一樣,利用對話框編輯器可以為每個屬性頁創(chuàng)建一個對話框模板,其區(qū)別在于,當(dāng)利用類向?qū)lassWizard為屬性頁生成類時應(yīng)選擇屬性頁類CpropertyPage作為基類,而不是將一般的對話框類Cdialog作為基類;
2、創(chuàng)建屬性表對話框,并將事先創(chuàng)建好的各屬性頁添加進(jìn)去,兩者的創(chuàng)建順序可以互換,但在創(chuàng)建完之后將屬性頁添加到屬性表對話框中去這一步是必須要做的;
3、顯示屬性表對話框。雖然屬性表對話框類CpropertySheet不是由對話框類Cdialog派生而來的,但兩者的操作非常類似,調(diào)用DoModal()函數(shù)就會顯示一個模態(tài)屬性表對話框,而調(diào)用Create()操作就會顯示一個非模態(tài)的屬性表對話框;
4、對數(shù)據(jù)交換的處理。和對話框類似,屬性表對話框與對象之間的數(shù)據(jù)交換也是通過數(shù)據(jù)成員2來實現(xiàn)的,只是屬性表本身不帶數(shù)據(jù)成員,而實際進(jìn)行數(shù)據(jù)交換的是屬性頁中的數(shù)據(jù)成員;
5、對向?qū)υ捒虻奶幚?。如果要顯示一個向?qū)υ捒?,在顯示之前應(yīng)首先調(diào)用SetWizardMode()函數(shù)對向?qū)υ捒蜻M(jìn)行特殊處理,對于存在按鈕的向?qū)υ捒颍€應(yīng)調(diào)用SetWizardButtons()來對向?qū)υ捒虻陌粹o功能進(jìn)行定制,在用戶操作結(jié)束時還應(yīng)調(diào)用SetFinishText()函數(shù)將“完成”按鈕設(shè)置為有效狀態(tài)。
5.8 標(biāo)5.9 簽控制的應(yīng)用技巧示例程序
本文給出一個基于文檔的標(biāo)簽應(yīng)用實例。實例程序中通過簡單設(shè)置菜單、標(biāo)簽和屬性表來演示標(biāo)簽控制的實際應(yīng)用技巧,程序通過選擇菜單選項彈出設(shè)置正文顏色、字體和修飾等屬性表對話框來和用戶進(jìn)行簡單交互。其實現(xiàn)步驟如下:
1、利用應(yīng)用程序向?qū)ppWizard創(chuàng)建一個基于文檔的工程TAB,在選擇工程類型時應(yīng)選擇單文檔;
2、利用資源中的菜單生成器,刪除無用菜單,并增加如下菜單結(jié)構(gòu)
菜單名 標(biāo)識符
設(shè)置(S) (彈出菜單名)
背景設(shè)置(B) IDM_BKGRND
前景設(shè)置(F) IDM_FRGRND
3、利用對話框設(shè)計器設(shè)置屬性表對話框所需要的四個屬性頁,注意在選擇基類時應(yīng)將屬性頁類CpropertyPage作為基類,并將對話框及菜單等控件的所有屬均改為中文。四個屬性頁及其包括的控件內(nèi)容分別為:(1)文字屬性對話框包括一個輸入文字的文本輸入框,用于輸入和修改在窗口上顯示的文字;(2)字體屬性對話框包括三個選中框,用來確定顯示的字體修飾;(3)字間距屬性對話框包括一個用于顯示提示信息的標(biāo)簽和用于輸入字間距大小的文本輸入框;(4)顏色屬性對話框包括一個成組框和三個單選圓鈕;(5)窗口中設(shè)置一個用于顯示輸入文字的標(biāo)簽。
以上控制的設(shè)置參數(shù)如下:
控制名稱 標(biāo)題名稱 標(biāo)識符串
標(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在屬性表對話框CtabDlg、屬性頁對話框CtextPage和CstylePage中分別加入如下數(shù)據(jù)成員:
標(biāo)識符串 類型 數(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ù)成員加入到視類中去,來和對話框之間進(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中對數(shù)據(jù)成員進(jìn)行如下初始化。
CTabView::CTabView()
{ nDist=20;
nColor=1;
cText=CString(標(biāo)簽控制演示實例);
bBold=bItalic=bUnderline=FALSE;
}
(3)在TabDlg.cpp中向控制中增加標(biāo)簽,來實現(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)簽切換時,標(biāo)簽控制會自動向?qū)υ捒虼翱诎l(fā)送TCN_SELCHANGE通知消息,這時需要根據(jù)所選擇的標(biāo)簽索引號對屬性頁的顯示和隱藏進(jìn)行切換控制,應(yīng)完善OnSelchangeTabctrl()函數(shù):
void CTabDlg::OnSelchangeTabctrl(NMHDR* pNMHDR, LRESULT* pResult)
{ int iPage=m_tabCtrl.GetCurSel();//所選標(biā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);//顯示輸入項數(shù)
GetDlgItem(IDC_DIST)->ShowWindow(SW_SHOW);//顯示輸入項數(shù)
break;
case 1://顏色設(shè)置
GetDlgItem(IDC_STATIC1)->ShowWindow(SW_HIDE);//隱藏項數(shù)輸入
GetDlgItem(IDC_DIST)->ShowWindow(SW_HIDE);//隱藏項數(shù)輸入
GetDlgItem(IDC_STATIC2)->ShowWindow(SW_SHOW);//顯示選項選擇
GetDlgItem(IDC_BLACK)->ShowWindow(SW_SHOW);//顯示選項選擇
GetDlgItem(IDC_RED)->ShowWindow(SW_SHOW);//顯示選項選擇
GetDlgItem(IDC_BLUE)->ShowWindow(SW_SHOW);//顯示選項選擇
break;
}
*pResult = 0;
}
(4)菜單功能的完善。在執(zhí)行相應(yīng)的菜單功能時,必須對類向?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();//重新繪制窗口
}
同樣,也要對前景設(shè)置功能函數(shù)進(jìn)行完善:
void CTabView::OnFrgrnd()
{ CPropertySheet cps(前景設(shè)置);//創(chuàng)建屬性表對象
CTextPage ctp; //顯示文字屬性頁
CStylePage csp;//顯示字體屬性頁
ctp.m_cText=cText;
csp.m_bBold=bBold;
csp.m_bItalic=bItalic;
csp.m_bUnderline=bUnderline;
cps.AddPage(&ctp);//添加屬性頁
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)簽控制與各屬性頁之間的數(shù)據(jù)交換功能,應(yīng)該實現(xiàn)標(biāo)簽控制各屬性頁與用戶之間數(shù)據(jù)交換結(jié)束后的窗口顯示功能,筆者實現(xiàn)的功能函數(shù)顯示了由屬性頁中輸入的字體及背景網(wǎng)格功能,TabView.cpp中的對應(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)簽控制的整個實現(xiàn)過程雖然比較繁鎖,但只要掌握其實現(xiàn)的本質(zhì),設(shè)計一個優(yōu)秀的標(biāo)簽控制界面也并非很困難的事情。
筆者實現(xiàn)的標(biāo)簽控制的演練示例結(jié)果如下:
標(biāo)簽控制演練示例結(jié)果
第6章 演練CToolBar
6.1 工具條控制的主要功能
所謂工具條就是具有位圖和分隔符組成的一組命令按鈕,位圖按鈕部分可以是下推按鈕、檢查盒按鈕、無線按鈕等。工具條對象類派生于主窗口架框類CframeWnd或CMDIFrameWnd,其類控制CToolBar::GetToolBarCtrl是MFC類庫中封裝的一個成員函數(shù),允許使用類庫中提供的一般控制和附加功能,CtoolBar類控制成員控制提供了Windows一般控制的所有功能,然而,通過調(diào)用GetToolBarCtrl成員函數(shù)取得引用后,可以使工具條具有更強的特性。
工具條的創(chuàng)建具有四個步聚:首先是建立工具條資源;然后建立工具條對象結(jié)構(gòu);其次通過調(diào)用建立函數(shù)建立工具條對象并綁定;最后調(diào)用LoadToolBar調(diào)入工具條資源。
另外,還可以通過直接加載位圖的方法來建立,步驟如下:首先建立工具條對象;然后通過調(diào)用建立函數(shù)建立工具條并綁定對象;其次調(diào)入包含按鈕的位圖;最后利用SetButtons 函數(shù)設(shè)置按鈕的風(fēng)格并與位圖建立聯(lián)系。
其中,所有按鈕位圖均存放在一個位圖文件中,按鈕位圖的大小相同,默認(rèn)為16點寬、15點高,位圖必須從左至右存放。設(shè)置按鈕函數(shù)具有指向一組控制標(biāo)識符ID的指針和索引值,用來確定每個按鈕的位置,如果存在分隔符ID_SEPARATOR,那么該圖像就不存在索引值。正常情況下工具條中的按鈕都是單排從左至右排列的,可以通過SetButtonInfo函數(shù)改變排序規(guī)則。工具條中最終形成的按鈕大小相同,均為24 x 22象素,每個按鈕只對象一幅圖像。工具條中的按鈕默認(rèn)為下推按鈕,通過設(shè)置TBBS_CHECKBOX風(fēng)格可以實現(xiàn)檢查盒按鈕,通過調(diào)用SetRadio成員函數(shù)可以實現(xiàn)無線按鈕。
6.2 工具條控制的對象結(jié)構(gòu)
6.2.1 工具條的對象結(jié)構(gòu)
6.2.1.1 工具條的建立方法
CToolBar &ToolBar 建立工具條對象結(jié)構(gòu)
Create 建立工具條對象并綁定
工具條類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)識符。
CBRS_TOP 表示工具條在框架窗口的頂部
CBRS_BOTTOM 表示工具條在框架窗口的底部
CBRS_NOALIGN 表示工具條在父窗口改變大小時不響應(yīng)
CBRS_TOOLTIPS 表示工具條具有動態(tài)提示功能
CBRS_SIZE_DYNAMIC 表示工具條是靜態(tài)的不能改變
CBRS_SIZE_FIXED 表示工具條是動態(tài)的可以改變
CBRS_FLOATING 表示工具條是浮動的
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)識符ID對象按鈕索引CommandToIndex、取得索引對應(yīng)的命令標(biāo)識符ID或分隔符GetItemID、取得索引對應(yīng)的矩形區(qū)域GetItemRect、取得按鈕風(fēng)格GetButtonStyle、設(shè)置按鈕風(fēng)格SetButtonStyle、取得按鈕的ID標(biāo)識-風(fēng)格-圖象數(shù)GetButtonInfo、設(shè)置按鈕ID標(biāo)識-風(fēng)格-圖象數(shù)SetButtonInfo、取得按鈕提示文本GetButtonText、設(shè)置按鈕提示文本SetButtonText和取得工具條直接存取控制GetToolBarCtrl等。
6.2.2 工具條控制的對象結(jié)構(gòu)
6.2.2.1 工具條控制的建立方法
CToolBarCtrl &ToolBarCtrl 建立工具條控制對象結(jié)構(gòu)
Create 建立工具條控制對象并綁定
工具條控制類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)識符。
可以利用WS_CHILD、WS_VISIBLE和WS_DISABLED來設(shè)置工具條窗口的風(fēng)格,但必須合理設(shè)置如下控制風(fēng)格:
CCS_ADJUSTABLE 允許用戶處理工具條窗口大小,如果存在工具條窗口必須處理相應(yīng)信
CCS_BOTTOM 使控制處于父窗口客戶區(qū)域底部并與窗口同樣寬
CCS_NODIVIDER 禁止在控制的頂部繪制2個象素的高亮條
CCS_NOHILITE 禁止在控制的頂部繪制1個象素的高亮條
CCS_NOMOVEY 使控制改變大小和移動時自動水平對齊,垂直對齊必須處理WM_SIZE消息
如果CCS_NORESIZE風(fēng)格有效,則該風(fēng)格無效
CCS_NOPARENTALIGN禁止控制自動移到父窗口頂部或底部,如果CCS_TOP或 CCS_BOTTOM風(fēng)格
有效,則高度調(diào)整為默認(rèn)而寬度可以改變
CCS_NORESIZE 禁止設(shè)置新的大小或無效值時使用默認(rèn)寬度和高度值,而使用建立值
CCS_TOP 使控制自動停靠在父窗口客戶區(qū)域頂部并與父窗口同樣寬度
最后,還必須利用下面的風(fēng)格來控制工具條
TBSTYLE_TOOLTIPS 使工具條建立并管理動態(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; // 按鈕按下時發(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對應(yīng)的索引CommandToIndex、恢復(fù)工具條狀態(tài)RestoreState、保存工具條狀態(tài)SaveState和重新確定工具條大小AutoSize等。
vc 樹控件 數(shù)據(jù)庫的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于vc 樹控件 數(shù)據(jù)庫,VC樹控件與數(shù)據(jù)庫的完美結(jié)合:快速實現(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ù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
本文標(biāo)題:VC樹控件與數(shù)據(jù)庫的完美結(jié)合:快速實現(xiàn)數(shù)據(jù)管理(vc樹控件數(shù)據(jù)庫)
標(biāo)題來源:http://fisionsoft.com.cn/article/dpphigg.html


咨詢
建站咨詢
