• 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 }
  • 相关阅读:
    19. 各种提权姿势总结
    18. 各种数据库查询基础
    Kafka——分布式消息系统
    跳表
    Linux的io机制
    Make命令
    ElasticSearch之二——集群
    ElasticSearch之一——索引
    Scribe日志收集工具
    Thrift 的原理和使用
  • 原文地址:https://www.cnblogs.com/lg804721251/p/14326418.html
Copyright © 2020-2023  润新知