1. 程式人生 > >MFC基礎控件

MFC基礎控件

c/c++ mfc

一、靜態文本

  1. 在代碼中動態創建,需要使用CStatic類的成員函數Create

virtual BOOL Create(
   LPCTSTR lpszText,
   DWORD dwStyle,
   const RECT& rect,
   CWnd* pParentWnd,
   UINT nID = 0xffff 
);

lpszText:指定要在控件中顯示的文字。如果為NULL則不會顯示任何文字。

dwStyle:指定靜態控件的風格。靜態文本框一般都是對話框或其他窗口的子窗口,而且是可見的,所以應該包含WS_CHILD 和WS_VISIBLE風格


SS_BITMAP一個位圖將顯示在靜態控件中,Create函數的lpszText參數字符串是資源文件中定義的位圖名。此風格忽略寬度和高度參數,靜態控件自動調整它的尺寸來適應位圖
SS_BLACKFRAME指定一個具有與窗口邊界同色的框,默認為黑色
SS_BLACKRECT指定一個具有與窗口邊界同色的實矩形,默認為黑色
SS_CENTER使顯示的正文居中對齊,正文可以換行
SS_GRAYFRAME指定一個具有與屏幕背景同色的邊框
SS_GRAYRECT指定一個具有與屏幕背景同色的實矩形
SS_ICON使控件顯示一個在資源中定義的圖標,圖標的名字由Create 函數的lpszText 參數指定,圖標自動調整它的尺寸
SS_LEFT左對齊正文,正文能回繞
SS_LEFTNOWORDWRAP左對齊正文,正文不能回繞
SS_NOTIFY使控件能向父窗口發送鼠標事件消息
SS_RIGHT右對齊正文,可以回繞
SS_SIMPLE使靜態正文在運行時不能被改變並使正文顯示在單行中
SS_WHITEFRAME指定一個具有與窗口背景同色的框,默認為白色
SS_WHITERECT指定一個具有與窗口背景同色的實心矩形,默認為白色

rect:指定靜態控件的位置和大小,它可以是RECT結構體類型,也可以是CRect類的對象。

pParentWnd:指定靜態控件的父窗口,通常是一個CDialog對象,不能是NULL。

nID:指定靜態控件的ID。

cs = new CStatic();
cs->Create("hello world",
WS_CHILD|WS_VISIBLE|SS_CENTER,
CRect(50,80, 150, 150),
this);


二、編輯框 Edit Control

1.與靜態文本框的創建類似,除了可以在對話框模板上拖進一個編輯框,然後關聯一個變量或通過API函數使用,也可以在程序中動態創建編輯框,即調用CEdit類的成員函數Create。Create成員函數的原型如下

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

2. dwStyle:指定編輯框的風格。可以是MSDN中“edit styles”包含風格的任意組合。下面是“edit styles”的所有風格說明。

ES_AUTOHSCROLL:當用戶在行尾鍵入一個字符時,正文將自動向右滾動10 個字符,當用戶按回車鍵時,正文總是滾向左邊
ES_AUTOVSCROLL: 當用戶在最後一個可見行按回車鍵時,正文向上滾動一頁
ES_CENTER: 在多行編輯框中使正文居中
ES_LEFT :左對齊正文
ES_LOWERCASE: 把用戶輸入的字母統統轉換成小寫字母
ES_MULTILINE:指定一個多行編輯器。若多行編輯器不指定ES_AUTOHSCROLL 風格,則會自動換行,若不指定ES_AUTOVSCROLL,則多行編輯器會在窗口中正文裝滿時
發出警告聲響
ES_NOHIDESEL:默認時,當編輯框失去輸入焦點後會隱藏所選的正文,當獲得輸入焦點時又顯示出來。設置該風格可禁止這種默認行為
ES_NUMBER :編輯框中只允許輸入數字
ES_OEMCONVERT:使編輯框中的正文可以在ANSI 字符集和OEM 字符集之間相互轉換。這在編輯框中包含文件名時是很有用的
ES_PASSWORD: 使所有鍵入的字符都用“*”來顯示
ES_READONLY: 將編輯框設置成只讀的
ES_RIGHT :右對齊正文
ES_UPPERCASE: 把用戶輸入的字母統統轉換成大寫字母
ES_WANTRETURN:使多行編輯器接收回車鍵輸入並換行。如果不指定該風格,按回車鍵會選擇默認的命令按鈕,這往往會導致對話框的關閉

除了上面的風格外,編輯款一般還會設置WS_CHILD、WS_VISIBLE、WS_BORDER等窗口風格。另外,編輯框可以是多行的,也就是在編輯框中顯示多行文字,這就需要設置ES_MULTILINE風格,如果想要多行編輯框支持回車鍵,則還要設置ES_WANTRETURN。

對於在對話框模板中創建的編輯框,它的屬性中包含了上述的風格,例如,Multiline屬性對應的就是ES_MULTILINE風格,Want Return屬性對應ES_WANTRETURN風格。


三、Cbutton 單選框 復選框

1.CButton類的Create成員可動態創建Button

2.常用方法

a設置顯示的位圖

HBITMAP SetBitmap(HBITMAP hBitmap);

HBITMAP hBitmap;
hBitmap=(HBITMAP)::LoadImage(::AfxGetInstanceHandle(),_T("aaa.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
CButton *btn = (CButton*)GetDlgItem(IDC_BUTTON1);
btn->SetBitmap(hBitmap);

b 獲取之前由SetBitmap函數設置的按鈕位圖的句柄。

HBITMAP GetBitmap( ) const;

c 設置按鈕的風格。參數nStyle指定按鈕的風格,bRedraw指定按鈕是否重繪,為TRUE則重繪,否則不重繪,默認為重繪

void SetButtonStyle(UINT nStyle,BOOL bRedraw = TRUE);

d 獲取按鈕控件的風格。

UINT GetButtonStyle( ) const;

e設置按鈕的選擇狀態。參數nCheck為0表示未選中狀態,1表示選中狀態,2表示不確定狀態(僅用於復選框)。

void SetCheck(int nCheck);

f 獲取按鈕的選擇狀態。返回值的意義同SetCheck函數的nCheck參數。

int GetCheck( ) const;

g 設置要顯示到按鈕上的光標圖。參數hCursor指定了光標的句柄。返回值為按鈕原來光標的句柄。

HCURSOR SetCursor(HCURSOR hCursor);

h 獲取之前由SetCursor設置的光標的句柄。

HCURSOR GetCursor( );

i 設置按鈕的高亮狀態。參數bHighlight指定按鈕是否高亮顯示,非0則高亮顯示,否則取消高亮顯示狀態。

void SetState(BOOL bHighlight);

j UINT GetState( ) const;

獲取按鈕控件的選擇狀態、高亮狀態和焦點狀態。我們可以通過將返回值與各個掩碼相與來獲得各種狀態值,掩碼與對應的相與結果說明如下:

掩碼0x0003:用來獲取單選按鈕或復選框的狀態。相與結果為0表示未選中,1表示被選中,2表示不確定狀態(僅用於復選框)。
掩碼0x0004:用來判斷按鈕是否是高亮顯示。相與結果為非0值表示按鈕是高亮顯示的。當單擊按鈕並按住鼠標左鍵時,按鈕會呈高亮顯示。
掩碼0x0008:相與結果為非零值表示按鈕擁有輸入焦點。


四、圖片控件

1動態加載圖片

type選擇Bitmap

    // TODO: Add your control notification handler code here   
    CBitmap bitmap;  // CBitmap對象,用於加載位圖   
    HBITMAP hBmp;    // 保存CBitmap加載的位圖的句柄   
   
    bitmap.LoadBitmap(IDB_BITMAP1);  // 將位圖IDB_BITMAP1加載到bitmap   
    hBmp = (HBITMAP)bitmap.GetSafeHandle();  // 獲取bitmap加載位圖的句柄   
    m_jzmPicture.SetBitmap(hBmp);    // 設置圖片控件m_jzmPicture的位圖圖片為IDB_BITMAP1



五、右鍵菜單 實現鼠標右鍵消息處理

void CtestDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
    CMenu menu;       // 菜單(包含主菜單欄和子菜單)   
    CMenu *pSubMenu;  // 右鍵菜單 
    menu.LoadMenu(IDR_MENU1);
    pSubMenu = menu.GetSubMenu(0); 
    ClientToScreen(&point);
    // 彈出右鍵菜單,菜單左側與point.x坐標值對齊   
    pSubMenu->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this); 
}





MFC基礎控件