C++ MFC学习 (五)

Edit Control 当不设置多行时,敲击回车会关闭对话框

 1 void CMFC_Demo4Dlg::OnBnClickedButton2()
 2 {
 3     // TODO: 在此添加控件通知处理程序代码
 4     
 5     //整个项目退出
 6     //exit(0);
 7 
 8     //退出当前的对话框  两种
 9     //CDialog::OnOK();
10     CDialog::OnCancel();
11 }
12 
13 
14 void CMFC_Demo4Dlg::OnOK()
15 {
16     // TODO: 在此添加专用代码和/或调用基类
17     //解决输入框敲击回车,关闭对话框的问题,可重写对话框的OnOk函数,注释掉即可
18     //CDialogEx::OnOK();
19 }

禁用按钮  EnableWindow(false)  为禁用

Edit Control 添加变量时,设置类别为Value,即变量的值为显示的值,但需要将变量的值同步到控件中

  同理,在控件中输入内容好,如果想获取当前的值,需要将控件的值,同步到变量中

 1 void CMFC_Demo4Dlg::OnBnClickedButton3()
 2 {
 3     // TODO: 在此添加控件通知处理程序代码
 4 
 5     //利用关联Value的方式,设置和改变edit的内容
 6 
 7     //设置内容
 8     m_text = TEXT("哈哈");
 9 
10     //将变量内容 同步到控件中
11     UpdateData(FALSE);
12 }
13 
14 
15 void CMFC_Demo4Dlg::OnBnClickedButton4()
16 {
17     // TODO: 在此添加控件通知处理程序代码
18     //获取内容
19     //将控件的内容 同步到变量中
20     UpdateData(TRUE);
21     MessageBox(m_text);
22 }

下拉框的常见操作  属性设置

  sort false为不进行排序

  type  设置为下拉列表 不可编辑

 1         //下拉框添加
 2     m_cbx.AddString(TEXT("唐僧"));
 3     m_cbx.AddString(TEXT("孙悟空"));
 4     m_cbx.AddString(TEXT("猪八戒"));
 5     m_cbx.AddString(TEXT("沙僧"));
 6     //设置下拉框默认选项
 7     m_cbx.SetCurSel(0);
 8     //插入数据
 9     m_cbx.InsertString(4, TEXT("白龙马"));
10     //删除
11     m_cbx.DeleteString(3);
12     //获取索引的具体内容
13     CString str;
14     m_cbx.GetLBText(0,str);    
15 void CMFC_ComboBoxCtrlDlg::OnCbnSelchangeCombo1()  //下拉框被选中触发事件
16 {
17     // TODO: 在此添加控件通知处理程序代码
18 
19     //拿到索引位置
20     int index = m_cbx.GetCurSel();
21     CString str;
22     m_cbx.GetLBText(index, str);
23 }

 

List Ctrl 使用

 1 CString str[] = { TEXT("姓名"),TEXT("性别"), TEXT("年龄") };
 2     for (int i = 0; i < 3; i++)
 3     {
 4         //设置表头    参数:1 索引 2 内容 3 对齐方式 4 列宽度
 5         m_list.InsertColumn(i, str[i],LVCFMT_CENTER,50);
 6     }
 7     //设置正文
 8     /*
 9     //表头不算正文里的内容,索引从0开始
10     m_list.InsertItem(0, TEXT("张三"));
11     //给这个Item插入其他列的数据
12     m_list.SetItemText(0,1,TEXT("男"));
13     */
14     //使用循环插入数据
15     for (int i = 0; i < 6; i++) {
16         CString str;
17         str.Format(TEXT("张三%d"), i);
18         m_list.InsertItem(i,str);
19         m_list.SetItemText(i, 1, TEXT(""));
20         m_list.SetItemText(i, 2, TEXT("23"));
21     }

Tree Ctrl 的使用

  如果需要使用表模式,需要将View属性改为Report

 1 //树控件使用
 2     //1.设置图标
 3     //准备HICON图标
 4     HICON icons[4];
 5     icons[0] = AfxGetApp()->LoadIconW(IDI_ICON1);
 6     icons[1] = AfxGetApp()->LoadIconW(IDI_ICON2);
 7     icons[2] = AfxGetApp()->LoadIconW(IDI_ICON3);
 8     icons[3] = AfxGetApp()->LoadIconW(IDI_ICON4);
 9 
10     //CImageList list;  //必须保存住这个集合 写到.h 做成员变量
11     //创建图片集合
    //30,30 指定图标的宽度和高度
    //ILC_COLOR32 图标格式
    //4,4, 有多少个图标就写多少
12 list.Create(30,30, ILC_COLOR32, 4,4); 13 //添加具体图片 14 for (int i = 0; i < 4; i++) 15 { 16 list.Add(icons[i]); 17 } 18 19 m_tree.SetImageList(&list, TVSIL_NORMAL); 20 21 //2.设置节点 22 HTREEITEM root = m_tree.InsertItem(TEXT("根节点"), 0, 0, NULL); 23 HTREEITEM parent = m_tree.InsertItem(TEXT("父节点"), 1, 1, root); 24 HTREEITEM son1 = m_tree.InsertItem(TEXT("子节点1"), 2, 2,parent); 25 HTREEITEM son2 = m_tree.InsertItem(TEXT("子节点2"), 3, 3, parent); 26 27 //设置默认选项 28 m_tree.SelectItem(son1); 29 30 void CMFC_CTreeCtrlDlg::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult) //触发事件 31 { 32 LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR); 33 // TODO: 在此添加控件通知处理程序代码 34 35 //获取当前项 36 HTREEITEM item = m_tree.GetSelectedItem(); 37 CString name = m_tree.GetItemText(item); 38 MessageBox(name); 39 *pResult = 0; 40 }

 

Tab Ctrl 标签页使用:

  1.引用 TabSheet.h 和 .cpp 添加到项目中

  2. 给Tab Ctrl 控件添加 变量  类型为 TabSheet

  3. 创建两个标签页,属性 border 改为 none    style 改为 child   显示为无边框的子窗口

  4. 给标签页添加 类

1 //添加标签页
2     m_tab.AddPage(TEXT("系统管理"), &dlg1, IDD_DIALOG1);
3     m_tab.AddPage(TEXT("系统设置"), &dlg2, IDD_DIALOG2);
4     m_tab.Show();

 

注: TabSheet 的代码

TabSheet.h:

 1 #if !defined(AFX_TABSHEET_H__42EE262D_D15F_46D5_8F26_28FD049E99F4__INCLUDED_)
 2 #define AFX_TABSHEET_H__42EE262D_D15F_46D5_8F26_28FD049E99F4__INCLUDED_
 3 
 4 #if _MSC_VER > 1000
 5 #pragma once
 6 #endif // _MSC_VER > 1000
 7 // TabSheet.h : header file
 8 //
 9 
10 // CTabSheet window
11 #define MAXPAGE 16
12 
13 class CTabSheet : public CTabCtrl
14 {
15     // Construction
16 public:
17     CTabSheet();
18 
19     // Attributes
20 public:
21 
22     // Operations
23 public:
24 
25     // Overrides
26     // ClassWizard generated virtual function overrides
27     //{{AFX_VIRTUAL(CTabSheet)
28     //}}AFX_VIRTUAL
29 
30     // Implementation
31 public:
32     int GetCurSel();
33     int SetCurSel(int nItem);
34     void Show();
35     void SetRect();
36     BOOL AddPage(LPCTSTR title, CDialog *pDialog, UINT ID);
37     virtual ~CTabSheet();
38 
39     // Generated message map functions
40 protected:
41     LPCTSTR m_Title[MAXPAGE];
42     UINT m_IDD[MAXPAGE];
43     CDialog* m_pPages[MAXPAGE];
44     int m_nNumOfPages;
45     int m_nCurrentPage;
46     //{{AFX_MSG(CTabSheet)
47     afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
48     //}}AFX_MSG
49 
50     DECLARE_MESSAGE_MAP()
51 };
52 
53 
54 //{{AFX_INSERT_LOCATION}}
55 // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
56 
57 #endif // !defined(AFX_TABSHEET_H__42EE262D_D15F_46D5_8F26_28FD049E99F4__INCLUDED_)

TabSheet.cpp:

  1 // TabSheet.cpp : implementation file
  2 //
  3 
  4 #include "stdafx.h"
  5 //#include "MyPos.h"
  6 #include "TabSheet.h"
  7 
  8 #ifdef _DEBUG
  9 #define new DEBUG_NEW
 10 #undef THIS_FILE
 11 static char THIS_FILE[] = __FILE__;
 12 #endif
 13 
 14 
 15 // CTabSheet
 16 
 17 CTabSheet::CTabSheet()
 18 {
 19     m_nNumOfPages = 0;
 20     m_nCurrentPage = 0;
 21 }
 22 
 23 CTabSheet::~CTabSheet()
 24 {
 25 }
 26 
 27 
 28 BEGIN_MESSAGE_MAP(CTabSheet, CTabCtrl)
 29     //{{AFX_MSG_MAP(CTabSheet)
 30     ON_WM_LBUTTONDOWN()
 31     //}}AFX_MSG_MAP
 32 END_MESSAGE_MAP()
 33 
 34 
 35 // CTabSheet message handlers
 36 
 37 BOOL CTabSheet::AddPage(LPCTSTR title, CDialog *pDialog, UINT ID)
 38 {
 39     if (MAXPAGE == m_nNumOfPages)
 40         return FALSE;
 41 
 42     m_nNumOfPages++;
 43 
 44     m_pPages[m_nNumOfPages - 1] = pDialog;
 45     m_IDD[m_nNumOfPages - 1] = ID;
 46     m_Title[m_nNumOfPages - 1] = title;
 47 
 48     return TRUE;
 49 }
 50 
 51 void CTabSheet::SetRect()
 52 {
 53     CRect tabRect, itemRect;
 54     int nX, nY, nXc, nYc;
 55 
 56     GetClientRect(&tabRect);
 57     GetItemRect(0, &itemRect);
 58 
 59     nX = itemRect.left;
 60     nY = itemRect.bottom + 1;
 61     nXc = tabRect.right - itemRect.left - 2;
 62     nYc = tabRect.bottom - nY - 2;
 63 
 64     m_pPages[0]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);
 65     for (int nCount = 1; nCount < m_nNumOfPages; nCount++)
 66         m_pPages[nCount]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
 67 
 68 }
 69 
 70 void CTabSheet::Show()
 71 {
 72     for (int i = 0; i < m_nNumOfPages; i++)
 73     {
 74         m_pPages[i]->Create(m_IDD[i], this);
 75         InsertItem(i, m_Title[i]);
 76     }
 77 
 78     m_pPages[0]->ShowWindow(SW_SHOW);
 79     for (int i = 1; i < m_nNumOfPages; i++)
 80         m_pPages[i]->ShowWindow(SW_HIDE);
 81 
 82     SetRect();
 83 
 84 }
 85 
 86 void CTabSheet::OnLButtonDown(UINT nFlags, CPoint point)
 87 {
 88     CTabCtrl::OnLButtonDown(nFlags, point);
 89 
 90     if (m_nCurrentPage != GetCurFocus())
 91     {
 92         m_pPages[m_nCurrentPage]->ShowWindow(SW_HIDE);
 93         m_nCurrentPage = GetCurFocus();
 94         m_pPages[m_nCurrentPage]->ShowWindow(SW_SHOW);
 95         //      m_pPages[m_nCurrentPage]->SetFocus();
 96     }
 97 }
 98 
 99 int CTabSheet::SetCurSel(int nItem)
100 {
101     if (nItem < 0 || nItem >= m_nNumOfPages)
102         return -1;
103 
104     int ret = m_nCurrentPage;
105 
106     if (m_nCurrentPage != nItem)
107     {
108         m_pPages[m_nCurrentPage]->ShowWindow(SW_HIDE);
109         m_nCurrentPage = nItem;
110         m_pPages[m_nCurrentPage]->ShowWindow(SW_SHOW);
111         //      m_pPages[m_nCurrentPage]->SetFocus();
112         CTabCtrl::SetCurSel(nItem);
113     }
114 
115     return ret;
116 }
117 
118 int CTabSheet::GetCurSel()
119 {
120     return CTabCtrl::GetCurSel();
121 }

 

posted @ 2021-01-25 17:38  Trying_only  阅读(134)  评论(0编辑  收藏  举报