MFC控件使用說明書

VC++控件工具箱:


按鈕(Button):用來接收用戶的命令,應用程序在接收到用戶命令後,通常需要進行一些後臺工作。按鈕可以響應單擊或雙擊動作,在按鈕接收到鼠標動作後,向其父窗口發送相應的控件通知,用戶可以對這些控件通知進行消息映射,從而進行相應的處理。在一個對話框中,可以定義一個默認按鈕,這隻要選中按鈕屬性中的“Default”選項。如果在對話框活動的時候按下了Enter鍵,則等同於單擊了默認按鈕。MFC提供了CButton類支持按鈕控件。

     

複選框(Check Box):用來顯示某種可能的選擇,該項選擇是獨立的,用戶可以選中或取消該選項在選項被選中的時候核選標記出現,選項被取消時核選標記消失MFC中由CButton類對核選框進行支持,用戶可以通過SetCheck()函數和GetCheck()函數設置或獲取核選框當前的狀態

  1. BST_UNCHECKED==((CButton*)GetDlgItem(IDC_CHECK_RES1))->GetCheck()  
  1. ((CButton*)GetDlgItem(IDC_CHECK_RES1))->SetCheck(true);        


編輯框(Edit Control):用來接收用戶輸入的字符串通過選擇編輯框的選項,編輯框可以接收字符串、數字、密碼等;編輯框還可以設置成接收多行字符串的模式;可以自動進行大小寫轉換。編輯框可能向其父窗口發送多種控件通知,如果用戶需要,可以對這些控件通知進行處理。MFC提供了CEdit類支持編輯框控件

  1. GetDlgItem(IDC_***)->SetWindowText(Cstring);  
  2. GetDlgItem(IDC_***)->GetWindowText(Cstring);  

組合框(Combo Box)列表框和編輯框的組合用戶除了可以在列表中對已經存在的選項進行選擇外,還可以輸入新的選擇MFC提供了CComboBox類對組合框控件進行支持。

  1. CComboBox * AAA = (CComboBox*)(GetDlgItem(IDC_***));  
  2. AAA->AddString(_T("***"));  
  3. AAA->SelectString(0, _T("***"));  
  4. AAA->SetCurSel(0);  
  5.   
  6. int nSel = AAA->GetCurSel();  
  7. AAA->GetLBText(nSel, Cstring);  
  8. if(strType.Trim() == _T("***"))  

6 列表框(List Box):用來選擇一系列的可能選擇用戶通過滾動條可以在這些選擇中瀏覽。在列表框中,可以進行單項選擇,也可以進行多項選擇,這取決於用戶在控件屬性對話框中的設置。MFC提供了CListBox類對列表框控件進行支持。


組成框(Group Box):用來包圍具有邏輯關係的一組控件,在這些控件的周圍加上邊界和標題需注意的是,組成框僅僅是在視覺效果上對控件進行“成組”,真正的“成組”工作還需要另外一些工作。僅僅在視覺上展現出一組的邏輯關係,並不添加任何代碼


8 單選按鈕(Radio Button):用來選擇某種可能的選擇,與(Check Box)複選框不同,該選項不是獨立的一般是幾個單選按鈕組成一組同組中的單選按鈕僅有一個按鈕被選中MFC同樣使用CButton類對單選按鈕控件進行支持,SetCheck()函數和GetCheck()函數對單選按鈕也是適用的。


9 靜態文本(Static Text):用來在指定的位置顯示特定的字符串一般用來標識附近另一個控件的內容。顯示在靜態文本控件中的字符串一般不再改變,但是在需要的時候,必須爲其指定一個不同食物ID號,通過調用相應的函數來進行設置。MFC提供了CStatic類支持靜態控件


10 圖形控件(Picture Control):顯示位圖(Bitmap)和圖標(Icon,圖形繪製與顯示,主要是其方形的區域適合顯示,同樣方形區域也可利用(Static Text)靜態文本框.


11、12 滾動條(Scroll Bar):這包括水平滾動條和垂直滾動條,除了在視覺效果上的方向不同外,水平滾動條在被滾動時發生WM_HSCROLL消息,而垂直滾動條在被滾動時發送WM_VSCROLL消息MFC提供了CScrollBar進行支持


13 滑塊控件(Slider Control):通常用來在程序中接受一系列離散的數值。用戶可以設置滑塊控件的取值範圍,並可以爲控件加上刻度標記以顯示特定位置的含義。MFC提供了CSliderCtrl類進行支持


14 微調按鈕(Spin Button):包括一對緊靠在一起的上下箭頭,使用微調按鈕可以增大或者縮小某個特定的數值。微調按鈕往往都需要一個“夥伴”控件,這通常都是一個編輯框當微調按鈕的向上箭頭被單擊時,編輯框中的數字就增大;反之則減小MFC提供了CPinButtonCtrl類進行支持


15 進度條(Progress Control):在進行一項需要佔有較長時間的操作時來反應當前的進度。當操作的進度不斷前進時,進度條就用特色顏色填充進度條框。用戶可以設定進度條的範圍和當前位置。MFC提供了CProgressCtrl類進行支持

  1. CProgressCtrl* progressbar = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS_1);  
  2. progressbar->SetRange(0, 4);  
  3. progressbar->SetPos(0);  


16 熱鍵控制(Hot Key):熱鍵控件看起來就像一個編輯框,但是在熱鍵控件中能夠立刻反應用戶剛剛按下的鍵組合,這在設置程序的熱鍵時特別有用。熱鍵控件只是在“視覺”上顯示了按鍵組合,設置熱鍵的工作還需要用戶添加代碼完成。MFC提供了CHotKey類進行支持


17 列表控制(List Control):如下圖,按一定的排列順序顯示一系列帶圖標的字符串,列表控件提供了四種顯示模式:大圖標(Icon)、小圖標(Small Icon)、列表(List)和報表(Report)。用戶可以向列表控件中添加新的項,也可以控制列表控件的顯示模式。MFC提供了CListCtrl類進行支持


初始化:

  1. CRect rect;  
  2. m_ListCtrl.GetClientRect(&rect);    
  3. // 爲列表視圖控件添加全行選中和柵格風格      
  4. m_ListCtrl.SetExtendedStyle(m_ListCtrl.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);   
  5.   
  6. m_ListCtrl.InsertColumn(0, _T("序號"), LVCFMT_CENTER, 40, 0);      
  7. m_ListCtrl.InsertColumn(1, _T("時間"), LVCFMT_CENTER, 120, 1);      
  8. m_ListCtrl.InsertColumn(2, _T("類型"), LVCFMT_CENTER, 50, 2);  

添加記錄

  1. struct INFO  
  2. {  
  3.     int         id;   
  4.     CString     time;  
  5.     CString     type;  
  6. }info;  
  7. CString id;  
  8. int nRow=0;  
  9. id.Format(_T("%d"), info.id);  
  10. m_ListCtrl.InsertItem(nRow,id);  
  11. m_ListCtrl.SetItemText(nRow, 1, info.time);  
  12. m_ListCtrl.SetItemText(nRow, 2, info.type);  
  13. nRow ++;  


18 樹形控件(Tree Control):如下圖,用來顯示一系列項目的層次關係最典型的例子是顯示磁盤上的文件與文件夾。如果有子項目的話,單擊樹形控件中的項目可以展開或者收縮其子項目MFC提供了CTreeCtrl類進行支持


初始化

  1. CDialog::OnInitDialog();  
  2. CTreeCtrl pTree;  
  3. pTree.ModifyStyle(NULL,TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT);   
  4. pTree.SetItemHeight(30);  
  5. pTree.SetBkColor(RGB(122,122,122));  
  6.   
  7. TV_INSERTSTRUCT tvinsert;    //創建待加入的TV_INSERTSTRUCT的結構  
  8. tvinsert.hParent=NULL;       //無父節點  
  9. tvinsert.hInsertAfter=TVI_LAST;  //插入到本層最後  
  10. tvinsert.item.mask=TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT;                  //掩碼,圖標、選選中圖標、文字  
  11. tvinsert.item.hItem=NULL;//句柄爲空  
  12. tvinsert.item.state=0;   //狀態  
  13. tvinsert.item.stateMask=0;//狀態爲掩碼  
  14. tvinsert.item.cchTextMax=6;//最大文字長度  
  15. tvinsert.item.iSelectedImage=0;//選中圖標索引  
  16. tvinsert.item.cChildren=0;   //唯有子節點  
  17. HTREEITEM SysSet=pTree.InsertItem(_T("XNAME"));  
  18. pTree.SetItemData(SysSet,1);  
  19. HTREEITEM hChild = pTree.InsertItem(_T("name1"),SysSet);   
  20. pTree.SetItemData(hChild,11);  
  21. hChild = pTree.InsertItem(_T("name2"),SysSet);   
  22. pTree.SetItemData(hChild,12);  
  23. hChild = pTree.InsertItem(_T("name3"),SysSet);          
  24. pTree.Expand(SysSet,TVE_EXPAND); //展開系統設置根節點  
  25.   
  26. HTREEITEM SysMaint=pTree.InsertItem(_T("YNAME"));  
  27. pTree.SetItemData(SysMaint,2);      
  28. m_1Dlg.Create(IDD_DIALOG_1,this);  
  29. m_2dlg.Create(IDD_DIALOG_2, this);  
樹節點切換
  1. void CConfigDlg::OnTvnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult)  
  2. {  
  3.     LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);  
  4.     // TODO: 在此添加控件通知處理程序代碼  
  5.     HTREEITEM hSelected=pNMTreeView->itemNew.hItem;  
  6.     if(hSelected!=NULL)  
  7.     {  
  8.         pTree.SelectItem(hSelected);  
  9.         int nDat = pTree.GetItemData(hSelected);  
  10.   
  11.         switch(nDat)  
  12.         {  
  13.         case 1:  
  14.             /*MessageBox(_T("YNAME"));*/  
  15.             if(m_pPreWnd)  
  16.                 m_pPreWnd->ShowWindow(SW_HIDE);  
  17.   
  18.             m_1Dlg.ShowWindow(SW_SHOW);  
  19.             m_pPreWnd = &m_1Dlg;      
  20.             break;  
  21.         case 3:  
  22.             /*MessageBox(_T("XNAME"));*/  
  23.             if(m_pPreWnd)  
  24.                 m_pPreWnd->ShowWindow(SW_HIDE);  
  25.   
  26.             m_2Dlg.ShowWindow(SW_SHOW);  
  27.             m_pPreWnd = &m_2Dlg;      
  28.             break;  
  29.           
  30.         default:  
  31.             break;  
  32.         }  
  33.     }  
  34.     *pResult = 0;  
  35. }  

改變位置

  1. void CConfigDlg::OnSize(UINT nType, int cx, int cy)  
  2. {  
  3.     CDialog::OnSize(nType, cx, cy);  
  4.     // TODO: 在此處添加消息處理程序代碼  
  5.   
  6.     CRect rcWnd;  
  7.     GetClientRect(&rcWnd);  
  8.   
  9.     CRect rcChild = rcWnd;  
  10.     rcChild.top = rcWnd.top+10;  
  11.     rcChild.bottom -=10;  
  12.     rcChild.left += 160;  
  13.     rcChild.right -= 10;  
  14.     CRect laneRect = rcChild;  
  15.   
  16.     if(::IsWindow(m_1Dlg))  
  17.         m_1Dlg.MoveWindow(rcChild);  
  18.   
  19.     if(::IsWindow(m_2Dlg))  
  20.         m_2Dlg.MoveWindow(rcChild);  
  21.   
  22.   
  23.     if ( ::IsWindow( pTree.GetSafeHwnd() ) )  
  24.     {  
  25.         pTree.MoveWindow(rcWnd.left+10,rcWnd.top+30,130,350,1);  
  26.     }  
  27. }  


19 屬性表控件(Tab Control):如下圖,用來包含大量的控件,可以滿足用戶顯示或者獲取大量數據分類顯示的要求,典型例子是Windows任務欄每個程序標籤。每個屬性表又分爲好幾個屬性頁,這些屬性頁由各自的標籤進行區分,這些屬性頁中都可以包容其他控件在顯示屬性表的時候,一次只能夠顯示一個屬性頁的全部內容,同時顯示其他屬性頁的標籤,用戶通過單擊標籤打開相應的屬性頁。MFC提供了CTabCtrl類進行支持


初始化綁定變量

  1.        m_tab_Light.DeleteAllItems();  
  2. m_LightParkingDlg.DestroyWindow();  
  3. m_LightStatusDlg.DestroyWindow();  
  4. m_tab_Light.InsertItem(0, _T("0001"));         // 插入第一個標籤  
  5. m_tab_Light.InsertItem(1, _T("0002"));  // 插入第二個標籤    
  6.   
  7. CRect tabRect;   // 標籤控件客戶區的位置和大小     
  8. m_tab_Light.GetClientRect(&tabRect);    // 獲取標籤控件客戶區Rect     
  9. // 調整tabRect,使其覆蓋範圍適合放置標籤頁     
  10. tabRect.left += 2;                    
  11. tabRect.right -= 1;     
  12. tabRect.top += 21;     
  13. tabRect.bottom -= 2;   
  14. m_LightParkingDlg.Create(IDD_DIALOG_LIGHT_PARKING, &m_tab_Light);    // 創建第一個標籤頁    
  15. m_LightStatusDlg.Create(IDD_DIALOG_LIGHT_STATUS, &m_tab_Light);    // 創建第二個標籤頁    
  16. //m_LightParkingDlg.InitData();  
  17. m_LightParkingDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(),SWP_SHOWWINDOW);  

控件頁面切換

  1.        CRect tabRect;   // 標籤控件客戶區的位置和大小      
  2. m_tab_Light.GetClientRect(&tabRect);    // 獲取標籤控件客戶區Rect     
  3. // 調整tabRect,使其覆蓋範圍適合放置標籤頁     
  4. tabRect.left += 2;                    
  5. tabRect.right -= 1;     
  6. tabRect.top += 21;     
  7. tabRect.bottom -= 2;  
  8. switch (m_tab_Light.GetCurSel())   
  9. {  
  10.   
  11. case 0:  
  12.     m_LightStatusDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);  
  13.     m_LightParkingDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);     
  14.     break;  
  15. case 1:   
  16.     m_LightParkingDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);  
  17.     m_LightStatusDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);    
  18.     break;  
  19.   
  20. }  



20 動畫控件(Animation):用來播放一段AVI格式的視頻剪輯。用戶可以控制視頻剪輯的播放、停止和定位,但也僅限於這些功能。動畫控件設置不能播放音頻剪輯,如果用戶需要更高層次的視頻或者音頻的支持,請選用MCIWnd控件MFC提供了CAnimateCtrl類對動畫控件進行支持


21 高級編輯框(Rich Edit):編輯控件(Edit Control)功能的擴展。在高級編輯框中,除了簡單的輸入和編輯字符串外,用戶還可以爲字符或段落指定特定的格式,用戶甚至還可以向高級編輯框中插入OLE項。高級編輯框基本上實現了一個帶格式的文本編輯器功能,而只需要用戶添加少量的接口。MFC提供了CRichEditCtrl類進行支持


22 日期/時間選擇器(Date Time Picker):如下圖,向用戶提供了一種直觀的選擇日期和時間的方法、日期/時間選擇器在外觀上類似於一個組合框,但是當用戶單擊下拉箭頭時就會展開一個日曆控件供用戶選擇,而一旦用戶做出了選擇,日期/時間選擇器會自動顯示新的日期/時間。MFC提供了CDateTimeCtrl類進行支持。


  1. SYSTEMTIME times_1;     //開始時間日期  
  2. SYSTEMTIME timee_1;     //結束時間日期  
  3.   
  4. CDateTimeCtrl* dtPickctrs_1 = (CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_START1);     //獲取時間控件句柄  
  5. CDateTimeCtrl* dtPickctre_1 = (CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_END1);  
  6.   
  7. memset(×_1,0,sizeof(times_1));    //時鐘初始化  
  8. memset(&timee_1,0,sizeof(timee_1));   
  9.   
  10. dtPickctrs_1->GetTime(×_1);       //獲取控件所選時間,保存至變量  
  11. dtPickctre_1->GetTime(&timee_1);  
  12.   
  13.   
  14. CString strTimeStart;                 //將時間轉換爲字符串  
  15. strTimeStart.Format(_T("%04d-%02d-%02d %02d:%02d:%02d"), times_1.wYear,times_1.wMonth,times_1.wDay,times_2.wHour,times_2.wMinute,times_2.wSecond);  
  16. CString strTimeEnd;  
  17. strTimeEnd.Format(_T("%04d-%02d-%02d %02d:%02d:%02d"), timee_1.wYear,timee_1.wMonth,timee_1.wDay,timee_2.wHour,timee_2.wMinute,timee_2.wSecond);  

獲取系統時間

  1. SYSTEMTIME  time;  
  2. ::GetLocalTime(&time);  


23 日曆控件(Month Calender):如下圖,看似與真正的日曆類似,操作也類似,直觀的爲用戶提供了觀察和顯示當前日期的途徑。MFC提供了CMonthCalCtrl類進行支持


24 IP地址控件(IP Adress):IP地址控件用來輸入和編輯IP地址。該控件外觀類似於一個編輯框,但是可以自動對輸入的字符按3個一組進行區分和加間隔圓點。IP地址控件爲開發支持Internet技術的程序提供了方便。MFC提供了CIPAddressCtrl類進行支持


25 擴展組合框(Extended Combo Box):在普通組合框(Combo Box)的基礎上還支持圖像列表。即,可以在組合框中顯示特定的圖標表示相應的選擇,而不僅僅是顯示文本。MFC提供了CComboBoxEx類進行支持


26 用戶自定義控件(Custom Control) : 控件使用的時候,它的Class必須有一個類的支持這個窗口類可以VC的類,例如:Button、Edit.在頭文件增加一個CEdit類的成員變量:CEdit m_Text(即點擊右鍵添加變量),然後按照Edit控件使用即可。

 


27 超鏈接控件(SysLink Control ):

1.用於在 MFC 應用程序上添加超鏈接,就像html中的超鏈接一樣.你點下可以鏈接到一個網頁上去。拖控件到頁面上,並綁定一個變量(m_linkCtrl),裏面的內容全部是按照標準的html中href的用法寫的寫錯了自然鏈接不了的.可以去瞧下html裏面的href屬性是怎/麼設置的.另外要注意的是字符串中雙引號的處理(記得加個轉義符\),添加單擊響應消息

  1. m_linkCtrl.SetWindowTextW(_T("<a href=\"http://blog.csdn.net/miko_xiaoming\">Miko's Note</a>"));   
  2. PNMLINK pNMLink = (PNMLINK) pNMHDR;     
  3. ShellExecuteW(NULL, L"open", pNMLink->item.szUrl, NULL, NULL, SW_SHOWNORMAL);  //在瀏覽器中打開          

同按鈕(Button)控件一樣,響應相應的消息                                  



27 多按鈕組合控件(Split Button Control ):如下圖,實現多選按鈕選擇功能,使用時添加相應菜單



28 網絡IP地址輸入輸出控件(Network Address Control):可以直接作爲inet_addr(ip)的輸入,分隔符爲逗號(,)

29 指令按鈕控件(command button control):不僅可以爲按鈕添加相應命令還可以對命令做出註解


所有控件的公共屬性:

ID:控件的資源標識。

Visiable:控件是否可見。

Disabled:控件是否被禁止、被禁止的控件無法接受鍵盤和鼠標輸入。

Group:是否從這個空間開始一個新組。

Tab stop:在程序中是否可以用【Tab】鍵切換到這個控件。

Help ID:是否給控件分配一個幫助標識,幫助標識基於控件本身的資源標識。

Client edge:給控件增加一個凹陷的邊界,使整個控件看起來像是凹下去的一樣。

Static edge:給控件增加一個邊界。

Modal frame:給控件增加一個3維的框架,與Client edge相反,它是凸出來的。

Transparent:擁有此屬性的窗口是透明的,它下面的窗口不會被它遮掩住。

Accept files:擁有此屬性的窗口可以接收拖放文件,如果一個文件被拖動到這個控件上面,控件會收到WM_DROPFILES消息。

No parent notify:表示控件不向其父窗口發送WM_PARENTNOTIFY消息。

Right aligned text:表示文本右對齊。

以上屬性可通過控件的屬性對話框進行設置,在屬性對話框中按【F1】鍵可以查看屬性的幫助信息。

 

每一種控件都由一個MFC控件類來管理,當通過資源編輯器在對話框上添加一個控件時,visualC++會自動爲控件類生成一個實例,即對象,並調用構造函數,當對話框關閉時,其各個子控件對象被自動銷燬。

也可以不使用資源編輯器,自己在程序中寫代碼創建、顯示控件並設置控件的屬性。

所有的控件類都繼承自CWnd,控件的某些操作和屬性設置需要用到CWnd本身的成員函數,CWnd某些函數經常用來操縱控件和設置控件屬性。

SetWindowText:設置控件上要顯示的標題文本,即用來設置控件的caption屬性

GetWindowText:得到控件的標題文本

EnableWindow:設置控件的Disabled屬性,即社會自控件是否可以接收鍵盤和鼠標的輸入

SetWindowPos:改變窗口的大小、位置和Z軸次序。

MoveWindow:改變窗口的大小和位置

GetWindowRec:得到窗口的大小、位置(信息存放在一個矩形結構中)。

GetClientRect:得到窗口客戶區的大小(信息存放在一個矩形結構中 )

ShowWindow:設置窗口的可見性(即窗口是否可見)

SetWindowText/GetWindowText還可以用來設置/得到對話框的標題文本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章