程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> VC++ >> 擴展MFC類庫建立自己的界面類庫(1)

擴展MFC類庫建立自己的界面類庫(1)

編輯:VC++

作者:雷神
轉載請聯系作者

    除非應用程序只是給自己使用,否則它的價值必須由別人決定。應用程序的界面對用戶的影響很大——無論程序代碼如何高效,功能如何強大,如果用戶發現它太難使用,那麼這個程序就不會得到廣泛的應用。摘自《Visual C++圖形用戶界面開發指南》

    如何建立一個優秀的應用程序界面呢,當然通過MFC可以很輕松的生成應用程序的基本框架,使得應用程序有著標准的WINDOWS程序的“面容”,不過如果你想給它整整容那就需要擴展MFC類庫建立自己的界面類庫。

按鈕類

CObject類的派生結構

CObject
|-CCmdTarget
|-CWnd
|-CButton
|-CBitmapButton


【說 明】CButton類提供Windows按鈕控件的功能。常用的按鈕控件風格有檢取框風格、單選按鈕風格和標准風格。按鈕控件的風格由成員函數Create在初始化時指定。從CButton類派生的CBitmapButton類支持創建用位圖代替文本的按鈕控件。CBitmapButton可以具有幾個獨立的位圖分別代表按鈕的上、下、聚焦和禁止狀態。當CButton類的對象被點擊時將向父窗口發送消息.應用程序可以從對話模板創建按鈕控件,也可用代碼直接創建。在兩種情況中,都要首先調用構造函數Cbutton()構造CButton類的對象;然後調用成員函數Create()創建Windows按鈕控件,並將它附著於CButton類的對象。用CButton創建按鈕可以一步實現。在派生類中設計構造函數,並在其中直接調用Create函數。如果希望處理由按鈕控件向其父窗口類發送Windows的通告消息則需要在相應的父窗口類中添加消息映射入口和消息處理函數。

每個消息映射入口都具有以下形式:

ON_Notification(id,memberFxn)

其中id指定了發送通告信息的控件id,而memberFxn則指定了用於處理控件通告的消息成員函數。
消息處理函數如下:

afx_msg void memberFxn();

【庫 名】
【成員函數】
(1)CButton(); //構造一個空的CButton類的對象。
(2)BOOL Create(LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);

【返回值】該成員函數調用成功返回非零值,否則返回零。

【參 數】

lpszCaption //指定按鈕控件的文本內容。
dwStyle //指定按鈕控件的風格。按鈕可以使用窗口風格和下列按鈕風格的組合。
BS_3STATE //創建一個3態檢取框風格的按鈕控件,當使用者選中一個未被選中過的控件後,該控件的 選擇框將不改變其狀態,可以使用成員函數SetCheck設置該標記。
BS_AUTO3STATE //類似於3態檢取框風格的按鈕控件,當使用者選中一個未被選中過的控件後,該控件的選 擇框將改變其狀態。
BS_AUTOCHECKBOX //類似於檢取框風格的按鈕控件,當使用者選中一個未被選中過的控件後, 在該控件的選 擇框中將出現選中的標記,當使用者再次選中該控件時選中的標記消失。
BS_AUTORADIOBUTTON //類似於單選按鈕風格的按鈕控件, 當使用者選中一個未被選中過的控件後,該控件將被自 動加亮並在選擇框出現選中的標記,同時將同組中帶有選中標記且風格一致的控件的選中標 記刪除。
BS_BITMAP //指定在按鈕控件上顯示一個位圖,由成員函數SetBitmap設置具體要顯示的位圖。
BS_BOTTOM //指定在按鈕控件上顯示的內容下對齊。
BS_CENTER //指定在按鈕控件上顯示的內容在水平方向上居中。
BS_CHECKBOX //創建一個檢取框風格的按鈕控件,不同於BS_AUTOCHECKBOX風格的控件,當使用者 選擇了一個未被選中過的控件後,在該控件的選擇框中將不會出現選中的標記,此時可以使 用成員函數SetCheck設置該標記。
BS_DEFPUSHBUTTON //創建一個具有深黑色邊框的按鈕控件,使用者可以通過按Enter鍵選擇該控件,該風格可 以使用戶快速的選擇出最合適的選項(一般為缺省選項)。
BS_FLAT //指定按鈕控件以二維效果顯示,而不是默認的三維效果。
BS_GROUPBOX //創建一個可將其它按鈕控件分組的按鈕控件。該控件的文本將顯示在該矩形的左上角。
BS_ICON //指定在按鈕控件上顯示一個圖標,由成員函數SetIcon設置具體要顯示的圖標。
BS_LEFT //指定在按鈕控件上顯示的內容左對齊。
BS_LEFTTEXT //當與檢取框風格、單選按鈕風格或3態檢取框風格組合使用時選擇框出現在該控件的右側。
BS_MULTILINE //當在按鈕控件上顯示的字符太多,該風格允許文本在按鈕上顯示多行。
BS_NOTIFY //指定按鈕控件在被雙擊、聚焦和失去焦點時向父窗口發送消息。
BS_OWNERDRAW //創建一個自畫的按鈕控件,當該控件在視覺外觀發生變化時,將調用成員函數DrawItem, CBitmapButton類必須設置該風格。
BS_PUSHBUTTON //創建一個標准風格的按鈕控件,在使用者選擇了該控件後,該控件將向其父窗口發送一條 WM_COMMAND消息。
BS_PUSHLIKE //與檢取框風格、單選按鈕風格或3態檢取框風格組合使用,使該控件外表與標准按鈕控件 一致。當該控件沒有被按下或選中時控件外表凸起,當該控件被按下或選中時控件外表凹陷。
BS_RADIOBUTTON //創建一個單選按鈕風格的按鈕控件, 當使用者選中一個未被選中過的控件後,該控件將被 自動加亮,但不會移動選中的標記,可以使用成員函數SetCheck設置該標記。
BS_RIGHT //指定在按鈕控件上顯示的內容右對齊。
BS_RIGHTBUTTON //當與檢取框風格、單選按鈕風格或3態檢取框風格組合使用時選擇框出現在該控件的右側。
BS_TEXT //指定在按鈕控件上顯示文本,文本內容可以在初始化時指定也可以由成員函數 SetWindowText設置。如控件沒有設置BS_ICON或BS_BITMAP風格則默認為BS_TEXT。
BS_TOP //指定在按鈕控件上顯示的內容上對齊。
BS_VCENTER //指定在按鈕控件上顯示的內容在垂直方向上居中。
rect //指定按鈕控件在父窗口中的位置和大小。
pParentWnd //指定按鈕控件的父窗口,不能為NULL。
nID //指定按鈕控件使用的資源標識。

【注 釋】應用程序用兩步構造一個CButton類的對象。首先調用構造函數,然後調用Create創建Windows按鈕控件,並將它附著於CButton類的對象。

(3)virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
【參 數】 lpDrawItemStruct //一個指向DRAWITEMSTRUCT結構的長整型指針,該結構中包含有關被繪制項的信息和 要求的繪制類型。
【注 釋】當自畫風格的按鈕控件的可見部分發生變化時,此成員函數被調用來重繪控件。
(4)HBITMAP GetBitmap() const;
【返回值】獲得由成員函數SetBitmap設置的位圖的句柄。
(5)UINT GetButtonStyle() const;
【返回值】返回某個按鈕控件風格的代碼,它只返回按鈕控件風格的代碼而不會返回按鈕控件的窗口風格代碼。含義參見成員函數SetButtonStyle。
(6)int GetCheck() const;
【返回值】返回某個檢取框風格、單選按鈕風格或3態檢取框風格按鈕控件的檢取狀態。含義參見成員函數SetCheck。
(7)HCURSOR GetCursor();
【返回值】獲得由成員函數SetCursor設置的光標的句柄。
(8)HICON GetIcon() const;
【返回值】獲得由成員函數SetIcon設置的圖標的句柄。
(9)UINT GetState() const;
【返回值】返回某個按鈕控件的當前狀態。它包括檢取狀態、加亮狀態和焦點狀態三部分。0x0008表示按鈕控件擁有焦點,0x0004表示按鈕控件被加亮,檢取狀態值的含義見函數SetCheck。
(10)HBITMAP SetBitmap(HBITMAP hBitmap);
【返回值】返回先前設置在按鈕控件上的位圖的句柄。
【參 數】 hBitmap //指定將顯示在按鈕控件上的位圖的句柄。
【注 釋】在使用該成員函數之前必須在初始化時設置BS_BITMAP標志,否則無效。可能是由於按鈕類中沒有復制被設置位圖的句柄,所以設置位圖的句柄的作用域應至少等於按鈕控件變量的作用域以保證在按鈕重畫時顯示正確。
(11)void SetButtonStyle(UINT nStyle, BOOL bRedraw = TRUE);
【參 數】nStyle //指定按鈕控件風格的代碼。見成員函數Create。
bRedraw = TRUE //當該參數非零時重畫按鈕控件,否則不重畫。缺省設置為重畫。
【注 釋】改變某個按鈕控件的風格。
該成員函數只能設置按鈕控件的風格代碼,而不能設置窗口的風格代碼,窗口風格代碼只能創建時設置。 該成員函數對於風格代碼BS_LEFTTEXT、BS_TEXT、BS_BITMAP、BS_ICON、BS_TOP、BS_BOTTOM、BS_LEFT、BS_RIGHT、BS_RIGHTBUTTON、BS_PUSHLIKE、BS_MULTILINE、BS_FLAT和BS_NOTIFY設置無效,上述風格代碼均須在初始化時設置。
(12)void SetCheck(int nCheck);
【參 數】nCheck //指定檢取的狀態,可以為以下值。
定義的常量值及含義
BST_UNCHECKED 0 沒有被選中
BST_CHECHED 1 被選中了
BST_INDETERMINATE 2 模糊狀態
【注 釋】設置某個檢取框風格、單選按鈕風格或3態檢取框風格按鈕控件的檢取狀態。
(13)HCURSOR SetCursor(HCURSOR hCursor);
【返回值】返回先前設置在按鈕控件上的光標的句柄。
【參 數】hCursor //指定將顯示在按鈕控件上的光標的句柄。
【注 釋】在使用該成員函數之前必須在初始化時設置BS_ICON標志,否則無效。可能是由於按鈕類中沒有復制被設置光標的句柄,所以設置光標的句柄的作用域應至少等於按鈕控件變量的作用域以保證在按鈕重畫時顯示正確。
(14)HICON SetIcon(HICON hIcon);
【返回值】返回先前設置在按鈕控件上的圖標的句柄。
【參 數】hIcon //指定將顯示在按鈕控件上的圖標的句柄。
【注 釋】在使用該成員函數之前必須在初始化時設置BS_ICON標志,否則無效。可能是由於按鈕類中沒有復制被設置圖標的句柄,所以設置圖標的句柄的作用域應至少等於按鈕控件變量的作用域以保證在按鈕重畫時顯示正確。
(15)void SetState(BOOL bHighlight);
【參 數】bHighlight //對於標准風格的按鈕控件,參數為TURE時按鈕控件被按下,為FALSE時控件被彈起。
對於檢取框風格、單選按鈕風格或3態檢取框風格的按鈕控件,參數為TURE時控件的選擇框被加亮,為FALSE時控件的選擇框恢復。
【注 釋】將某個按鈕控件設置為加亮狀態。

以上我們對MFC的Cbutton類有了一個詳細的了解,由於MFC支持自繪制(owner-draw)概念,自繪制的控制類,通過調用DrawItem() 函數實現控件的繪制,由於控件繪制,消息檢測和消息比較代碼是在控件中實現而不足在擁有控件的窗口中實現,因而叫自繪制。因而通過重載虛函數virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);函數來控制控件的外觀和行為,實現控制所需要的參數,都包含在LPDRAWITEMSTRUCT結構中。

lpDrawItemStruct:是指向DRAWITEMSTRUCT結構的指針,它為需要自己繪制的對象(控件或菜單項)提供了必要的信息,並決定了繪制的方式和細節,需要自己繪制的控件或菜單項的父窗口,將指向該結構的指針作為WM_DRAWITEM消息的lParam參數。

DRAWITEMSTRUCT 結構:

typedef struct tagDRAWITEMSTRUCT
{
UINT CtlType;
UINT CtlID;
UINT itemID;
UINT itemAction;
UINT itemState;
HWND hwndItem;
HDC hDC;
RECT rcItem;
DWORD itemData;
} DRAWITEMSTRUCT;


【結構成員】

CtlType——指定了控件的類型,有以下幾種取值:
ODT_BUTTON 自繪制按鈕
ODT_COMBOBOX 自繪制組合框
ODT_LISTBOX 自繪制列表框
ODT_MENU 自繪制菜單項
ODT_LISTVIEW 自繪制列表視
ODT_STATIC 自繪制靜態控件
ODT_TAB Tab控件
CtlID——指定了需要自繪制的控件ID,而對於菜單項無需使用。
itemID——是菜單項的ID或列表框或組合框的索引。
itemAction——繪制動作,有以下幾種取值:
ODA_DRAWENTIRE 整個控件都需被繪制
ODA_FOCUS 控件需要獲得或失去焦點時被繪制
ODA_SELECT 控件需要在被選中時繪制
itemState——當繪制完成後的,所繪項的可見狀態,有以下幾種取值:
ODS_CHECKED 如果菜單項將被選中,則設置該值(只對菜單項有效)
ODS_DISABLED 如果繪制項將被禁止,則設置該值
ODS_FOCUS 如果繪制項需要輸入焦點,則繪制該值
ODS_GRAYED 如果繪制項需要被灰色顯示,則設置該值
ODS_SELECTED 如果繪制項需要被設置為選中狀態,則設置該值
ODS_COMBOBOXEDIT 在自繪制組合框中只繪制選擇區域
ODS_DEFAULT 自繪制項為默認項
hwndItem——指定了組合框、列表框和按鈕等自繪制控件的窗口句柄;包含菜單項的菜單句柄(HMENU)
hDC——設備環境的句柄。
rcItem——控件外觀大小的矩形。
itemData——傳遞給控件的值。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved