MFC學習筆記1 基本控件的使用

一。模態和非模態對話框

1.右鍵資源視圖的Dialog,選擇插入Dialog,默認ID爲IDD_DIALOG1數組

 2.在界面上右鍵建立類,將生成.h和.cpp從而進行管理。自定義的兩個對話框類分別爲CDlgExec和CDlgShow函數

 

 3.雙擊主窗口的button控件,或者在button控件的屬性中選擇BN_CLICKED事件,進入按鈕點擊事件的處理函數。測試

4.在主窗口的cpp中添加CDlgExec.h和CDlgShow.h,並在相應的消息處理函數中寫入代碼。spa

//模態對話框彈出
void CMFCDialogDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知處理程序代碼 //彈出模態對話框 阻塞
 CDlgExec dlg; //模態對話框自動阻塞 dlg.DoModal(); }
1 //非模態對話框
2 void CMFCDialogDlg::OnBnClickedButton2() 3 { 4     // TODO: 在此添加控件通知處理程序代碼
5     CDlgShow* dlg = new CDlgShow; //非模態對話框在建立後自動釋放,須要定義在堆區 6     dlg->Create(IDD_SHOW); 7     dlg->ShowWindow(SW_SHOWNORMAL); 8 }

5.點擊按鈕出現模態和非模態對話框3d

 

 

二。Static Text控件

1.拖入Static Text控件,能夠修改其ID和默認顯示文字code

 

 2.對控件添加變量,能夠對顯示內容進行修改。變量類型爲「控件」。變量名爲m_text。(變量類型也能夠爲Value類型,可是在同步變量和控件內容時須要UpdateData)orm

 

3.獲取和設置Static_text控件的內容blog

1 //獲取控件內容
2 void CMFCDialogDlg::OnBnClickedButton4() //按鈕處理函數 3 { 4     // TODO: 在此添加控件通知處理程序代碼
5     CString str; //控件內容保存在str中
6  m_text.GetWindowTextW(str); 7  MessageBox(str); 8 }
1 //設置控件內容
2 void CMFCDialogDlg::OnBnClickedButton3() 3 { 4     // TODO: 在此添加控件通知處理程序代碼
5     m_text.SetWindowTextW(TEXT("123456")); //修改控件內容 6 }

4.在Static Text中添加位圖 bmp,在初始化函數BOOL CMFCDialogDlg::OnInitDialog()中添加代碼排序

 1     //用static_Text顯示圖片  2     //設置靜態控件窗口風格爲位圖居中顯示
 3     m_pic.ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE);  4     //經過路徑獲取bitmap句柄
 5 #define HBMP(filepath,width,height) (HBITMAP)LoadImage(AfxGetInstanceHandle(),filepath,IMAGE_BITMAP,width,height,LR_LOADFROMFILE|LR_CREATEDIBSECTION)
 6     //寬高設置按照控件大小
 7  CRect rect;  8  m_pic.GetWindowRect(rect);  9 //靜態控件設置bitmap
10     m_pic.SetBitmap(HBMP(TEXT("./simisent.bmp"), rect.Width(), rect.Height()));

 

 三。Edit Control

1。能夠修改Edit Control的屬性。索引

Horizontal/Vertical Scroll=True修改設置滾動條

Multiline=True能夠設置多行

 2。爲控件添加變量能夠獲得/改變控件內容。添加「值」類型變量,爲CString類型,變量名爲m_edit4, 第二個控件爲m_edit5

 3.爲了將第一個控件的內容複製到第二個控件,能夠設置「複製」按鈕的單擊處理函數爲

1 void CMFCDialogDlg::OnBnClickedButton10() 2 { 3     // TODO: 在此添加控件通知處理程序代碼 4     //將控件同步到變量中
5  UpdateData(TRUE); //將控件內容同步到變量(m_edit4)中 6     m_edit5 = m_edit4; //複製變量內容 7  UpdateData(FALSE); //將變量(m_edit5)內容同步到控件中 8 }

 2.在使用CEdit控件時,能夠設置編輯框自動顯示最後一行。

m_edit.LineScroll(m_edit.GetLineCount() - 1, 0);

四。Combox

1.能夠設置Combox的屬性,

Data添加內容,用分號隔開。

Sort=False,不按英文字母排序

Type=下拉列表 ,不可修改控件內容

2. 在OnInitDialog中初始化 Combox

//添加選項
        m_cbx.AddString(TEXT("唐僧")); m_cbx.AddString(TEXT("孫悟空")); m_cbx.AddString(TEXT("豬八戒")); m_cbx.AddString(TEXT("沙僧")); //設置默認選項爲索引0
        m_cbx.SetCurSel(0); //在索引2位置插入
        m_cbx.InsertString(2, TEXT("替換選項")); //刪除索引2
        m_cbx.DeleteString(2); //獲取1號索引的內容
        /*CString str; m_cbx.GetLBText(1, str); MessageBox(str);*/

 3.添加控件的CBN_SELCHANGE事件,在切換選項時能夠觸發處理函數

 

五。List Control

1.設置屬性View=report,添加控件變量m_list,「控件」類型。

2.添加表頭,在OnInitDialog()中添加代碼

1         //列表控件使用
2         CString str[] = {TEXT("姓名"),TEXT("性別"), TEXT("年齡")}; //表頭的三個屬性 3         m_list.GetWindowRect(rect); //獲取列表矩形大小
4         for (int i = 1; i < 4; i++) 5  { 6             //設置表頭
7             m_list.InsertColumn(i, str[i-1],LVCFMT_CENTER,rect.Width()/3); 8         }

3. 添加表格內容,在OnInitDialog()中添加代碼

//設置正文 //m_list.InsertItem(0, TEXT("張三")); //插入第0行,第一列 //給Item插入其餘列 //m_list.SetItemText(0, 1, TEXT("男")); //插入第0行,第二列 //10行3列
        for (int i = 0; i < 10; i++) { int j = 0; CString name; name.Format(TEXT("張三_%d"), i + 1); m_list.InsertItem(i,name); m_list.SetItemText(i, ++j, TEXT("")); m_list.SetItemText(i, ++j, TEXT("20")); } 

4.設置額外屬性。整行選中,網格線

1 m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

 

六。Tree Control

1.修改控件屬性,Has Buttons,Has Lines,Lines At Root爲True,添加Tree Control變量m_tree,「控件」類型

2.在OnInitDialog()中添加控件內容和結構

  •  添加圖標

  右鍵資源視圖的Icon添加資源,導入ico文件。

  

HICON icons[4];//圖標數組
        icons[0] = AfxGetApp()->LoadIconW(IDI_ICON1); icons[1] = AfxGetApp()->LoadIconW(IDI_ICON2); icons[2] = AfxGetApp()->LoadIconW(IDI_ICON3); icons[3] = AfxGetApp()->LoadIconW(IDI_ICON4); CImageList* list = new CImageList; //建立圖標集合
        list->Create(30, 30, ILC_COLOR32, 4, 4); //添加具體圖片
        for (int i = 0; i < 4; i++) { list->Add(icons[i]); }
m_tree.SetImageList(list,TVSIL_NORMAL);//設置m_tree的圖片列表爲CImageList*類型的list

 

  •  設置節點 
HTREEITEM root=m_tree.InsertItem(TEXT("根節點"), 0, 0, NULL); //根節點root,InserTtem能夠選擇名稱,圖標編號 HTREEITEM parent=m_tree.InsertItem(TEXT("父節點"), 1, 1, root); HTREEITEM sub1 = m_tree.InsertItem(TEXT("子節點"), 2, 2, parent); HTREEITEM sub2 = m_tree.InsertItem(TEXT("子節點"), 3, 3, parent); m_tree.SelectItem(root); //設置選擇

3.添加控件的TVN_SELCHANGED事件,在選擇節點時能夠觸發處理函數。

 

七。單選框/複選框

  • 單選框

1.拖入RadioButton,並按Ctrl+D順序排列。其中,將2 的Group設爲True,6的Group設爲True,能夠將其分爲2組。

 2.在OnInitDialog(),能夠進行設置默認選擇按鈕。

1     //第一個按鈕,最後一個按鈕,默認選中的按鈕
2     CheckRadioButton(IDC_RADIO1, IDC_RADIO2, IDC_RADIO1);

 

3.使用IsDlgButtonChecked,來判斷單選框是否被選中。給Button設置處理函數,輸出被選中的單選框

 1 void CMFCApplication5Dlg::OnBnClickedButton2()  2 {  3     // TODO: 在此添加控件通知處理程序代碼  4     //若是第一個被按下
 5  CString str;  6     if (IsDlgButtonChecked(IDC_RADIO1))  7  {  8         str = TEXT("");  9  } 10     if (IsDlgButtonChecked(IDC_RADIO2)) 11  { 12         str = TEXT(""); 13  } 14  MessageBox(str); 15 }

 

  • 複選框

1.爲複選框添加變量

 2.在OnInitDialog中初始化複選框

1     m_check.SetWindowTextW(TEXT("測試1")); 2     m_check.SetCheck(1);

 

 

 3.在按鈕中添加事件處理函數

 1 void CMFCApplication5Dlg::OnBnClickedButton1()  2 {  3     // TODO: 在此添加控件通知處理程序代碼
 4  CString str;  5     if(IsDlgButtonChecked(IDC_CHECK1))  6  {  7         str += TEXT("測試1\r\n");  8  }  9     if (IsDlgButtonChecked(IDC_CHECK2)) 10  { 11         str += TEXT("測試2\r\n"); 12  } 13     if (IsDlgButtonChecked(IDC_CHECK3)) 14  { 15         str += TEXT("測試3\r\n"); 16  } 17     if (IsDlgButtonChecked(IDC_CHECK4)) 18  { 19         str += TEXT("測試4\r\n"); 20  } 21  MessageBox(str); 22 }

 

 

 

八。滑塊

一。添加滑塊控件,並添加變量m_scrollBar,並在OnInitDialog中初始化。m_pos爲edit_control控件的變量

1     //設置滑塊範圍
2     m_scrollBar.SetScrollRange(1, 100); 3     //設置位置
4     m_scrollBar.SetScrollPos(m_pos);

 

2.在主窗口類->屬性中添加標準消息HScroll。

 1 void MFCDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)  2 {  3     // TODO: 在此添加消息處理程序代碼和/或調用默認值
 4     if (pScrollBar == &m_scrollBar)  //判斷是哪個滑塊
 5  {  6         int tmpPos;  7         switch (nSBCode)  8  {  9         case SB_THUMBPOSITION: //滑塊位置
10  { 11  m_scrollBar.SetScrollPos(nPos); 12             m_pos = nPos; 13  UpdateData(FALSE); 14             break; 15  } 16         case SB_LINELEFT: //向左的箭頭
17  { 18             //獲取滑塊位置
19             tmpPos = m_scrollBar.GetScrollPos() - 5; 20             if (tmpPos < 0) 21  { 22                 tmpPos = 0; 23  } 24  m_scrollBar.SetScrollPos(tmpPos); 25             m_pos = tmpPos; 26             UpdateData(false); 27             break; 28  } 29         case SB_LINERIGHT: 30  { 31             //獲取滑塊位置
32             tmpPos = m_scrollBar.GetScrollPos() + 5; 33             if (tmpPos >= 100) 34  { 35                 tmpPos = 100; 36  } 37  m_scrollBar.SetScrollPos(tmpPos); 38             m_pos = tmpPos; 39             UpdateData(false); 40             break; 41  } 42         case SB_PAGELEFT: //當前位置和左箭頭之間的區域
43  { 44             //獲取滑塊位置
45             tmpPos = m_scrollBar.GetScrollPos() - 10; 46             if (tmpPos <= 0) 47  { 48                 tmpPos = 0; 49  } 50  m_scrollBar.SetScrollPos(tmpPos); 51             m_pos = tmpPos; 52             UpdateData(false); 53             break; 54  } 55         case SB_PAGERIGHT: 56  { 57             //獲取滑塊位置
58             tmpPos = m_scrollBar.GetScrollPos() + 10; 59             if (tmpPos >= 100) 60  { 61                 tmpPos = 100; 62  } 63  m_scrollBar.SetScrollPos(tmpPos); 64             m_pos = tmpPos; 65             UpdateData(false); 66             break; 67  } 68  } 69  } 70  CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar); 71 }
相關文章
相關標籤/搜索