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 }

C++ MFC学习 (五)的更多相关文章

  1. MFC学习笔记1---准备工作

    什么是MFC MFC,全称Microsoft Foundation Classes,微软基础类库,顾名思义,是微软的攻城狮们将一些常用的基础的Windows API 函数用C++的形式封装成类,简化程 ...

  2. MFC 学习笔记

    MFC 学习笔记 一.MFC编程基础: 概述: 常用头文件: MFC控制台程序: MFC库程序: 规则库可以被各种程序所调用,扩展库只能被MFC程序调用. MFC窗口程序: 示例: MFC库中类的简介 ...

  3. TweenMax动画库学习(五)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  4. MFC 学习之 鼠标移动到Toolbar按钮上显示提示信息(tooltip),状态栏也随之改变

    1.在ResourceView里加入Toolbar资源,命名IDR_TOOLBAR1 2.在主程序的.h文件中加入变量:           CToolBar m_toolbar;CImageList ...

  5. SVG 学习<五> SVG动画

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  6. Android JNI学习(五)——Demo演示

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  7. ZigBee学习五 无线温度检测

    ZigBee学习五 无线温度检测 1)修改公用头文件GenericApp.h typedef union h{ uint8 TEMP[4]; struct RFRXBUF { unsigned cha ...

  8. (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射

    http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...

  9. cesium 学习(五) 加载场景模型

    cesium 学习(五) 加载场景模型 一.前言 现在开始实际的看看效果,目前我所接触到基本上都是使用Cesium加载模型这个内容,以及在模型上进行操作.So,现在进行一些加载模型的学习,数据的话可以 ...

  10. Python基础学习五

    Python基础学习五 迭代 for x in 变量: 其中变量可以是字符串.列表.字典.集合. 当迭代字典时,通过字典的内置函数value()可以迭代出值:通过字典的内置函数items()可以迭代出 ...

随机推荐

  1. 【爬虫+数据分析+数据可视化】python数据分析全流程《2021胡润百富榜》榜单数据!

    目录 一.爬虫 1.1 爬取目标 1.2 分析页面 1.3 爬虫代码 1.4 结果数据 二.数据分析 2.1 导入库 2.2 数据概况 2.3 可视化分析 2.3.1 财富分布 2.3.2 年龄分布 ...

  2. [python] Python map函数总结

    Python map函数总结 本文主要介绍如何使用Python(Python3版本)的内置map()函数.简单来说map()函数会将指定的函数依次作用于某个序列的每个元素,并返回一个迭代器对象.map ...

  3. Web初级——JavaScript

    JavaScript JavaScript是一种基于对象的脚本语言,用于开发基于客户端和基于服务器的Internet应用程序 1.了解JS 1.1JavaScript的组成 JavaScript 的核 ...

  4. App几个可能造成内存泄漏的情况:

    App几个可能造成内存泄漏的情况: 1.block块中直接用self调用,self将会被block copy到内部增加一次饮用计数,形成循环引用 在block里调用self会不会造成循环引用和这个bl ...

  5. 【力扣】剑指 Offer II 092. 翻转字符

    题目 解题思路 一个很暴力的想法,在满足单调递增的前提下,使每一位分别取 1 或 0,去看看哪个结果小. 递归函数定义int dp(StringBuilder sb, int ind, int pre ...

  6. GraalVM和Spring Native尝鲜,一步步让Springboot启动飞起来,66ms完成启动

    简介 GraalVM是高性能的JDK,支持Java/Python/JavaScript等语言.它可以让Java变成二进制文件来执行,让程序在任何地方运行更快.这或许是Java与Go的一场战争? 下载安 ...

  7. windows消息处理机制

    三层机制 1.顶端就是Windows内核.Windows内核维护着一个消息队列,第二级控制中心从这个消息队列中获取属于自己管辖的消息,后做出处理,有些消息直接处理掉,有些还要发送给下一级窗体(Wind ...

  8. Java集合 Map 集合 与 操作集合的工具类: Collections 的详细说明

    Java集合 Map 集合 与 操作集合的工具类: Collections 的详细说明 每博一文案 别把人生,输给心情 师父说:心情不是人生的全部,却能左右人生的全部. 你有没有体会到,当你心情好的时 ...

  9. springBoot简单记录日志

    记录日志的几种方法 springboot项目内置日志框架 在配置文件中添加以下配置: logging: file: name: "./log/xxx.log" pattern: f ...

  10. 力扣---2319. 判断矩阵是否是一个 X 矩阵

    如果一个正方形矩阵满足下述 全部 条件,则称之为一个 X 矩阵 :    矩阵对角线上的所有元素都 不是 0    矩阵中所有其他元素都是 0给你一个大小为 n x n 的二维整数数组 grid ,表 ...