当前位置: 首页 > news >正文

Windows第九章 控件的介绍

文章目录

  • 常用控件
    • 1. Button 按钮控件
    • 2. Edit Ctrl 编辑控件
    • 3. Static Text 静态文本控件
    • 4. Picture Control 图片控件
    • 5. Group Box 分组控件
    • 6. Radio Button 单选控件
    • 7. Check Box 多选控件
    • 8. Combo Box 组合控件
    • 9. List Box列表控件
    • 10. List Control 列表控件
    • 11. Horizontal Scroll Bar 水平滚动条
    • 12. Vertial Scroll Bar
    • 13. Slider Control 滑动控件
    • 14. Spin Control 数值微调控件
    • 15. Progress Control 进度条
    • 16. Data Time Picker 时间控件
    • 17. IP Address Control IP地址控件
  • 高级控件
    • Tree Control 树控件
      • 基本操作
      • 遍历节点
    • Tab Control 分页控件
      • 实现窗口大小调整, 分页和子窗口也调整大小
    • Rich Edit2.0 Control 富文本控件

常用控件

在这里插入图片描述
点开右边工具箱,就能看到各种控件的使用

1. Button 按钮控件

  • 按钮贴图
	CButton* pButton = (CButton*)GetDlgItem(IDC_BUTTON1);//获取按钮控件
	pButton->SetIcon(LoadIcon(NULL, IDI_ERROR));//设置按钮图标
	CBitmap bitmap;
	bitmap.LoadBitmap(IDB_BITMAP_FLOWER);//加载位图
	pButton->SetBitmap(bitmap);//设置按钮位图
  • 手动创建按钮
    Dlg.h添加成员
	CButton m_btn1;//定义按钮

Dlg.cpp 通过类向导,找到WM_Create,确定创建

int C控件Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CDialogEx::OnCreate(lpCreateStruct) == -1)
		return -1;
	//定义按钮ID,不要和资源里的ID重复
#define ID_MY_BUTTON 1024

	m_btn1.Create(_T("按钮1"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(10, 200, 100, 230), this, ID_MY_BUTTON);//创建按钮
	CFont* font = new CFont;
	font->CreatePointFont(120, _T("宋体"));//创建字体
	m_btn1.SetFont(font);//设置字体

	return 0;
}

2. Edit Ctrl 编辑控件

  • 设置文字满了自动换行,把下图Auto Scroll 设成false
    在这里插入图片描述
  • 设置文本
	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT2);//获取文本框控件
	pEdit->SetWindowText(L"你好");
  • 点击按钮追加文本
void C控件Dlg::OnBnClickedButtonAdd()
{
	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT2);//获取文本框控件
	//获取文本的长度
	int nLength = pEdit->GetWindowTextLength();
	//光标移动到当前末尾
	pEdit->SetSel(nLength, nLength);//在后面追加
	//添加文本
	pEdit->ReplaceSel(_T("末尾追加"));
	//光标移动到开头
	pEdit->SetSel(0, 0);//在前面追加
	//添加文本
	pEdit->ReplaceSel(_T("前面追加"));
}

  • 撤销操作,剪切操作
	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT2);//获取文本框控件
	pEdit->Undo();//撤销
	pEdit->Cut();//剪切
  • 手动创建Edit
int C控件Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CDialogEx::OnCreate(lpCreateStruct) == -1)
		return -1;

	//手动创建Edit控件
	CEdit* pEdit = new CEdit;
#define IDC_EDIT3 1025
	pEdit->Create(ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(10, 10, 200, 200), this, IDC_EDIT3);//创建文本框

	return 0;
}

  • 判断编辑控件有没有被修改
    根据类向导,创建WM_CLOSE
void C控件Dlg::OnClose()
{
	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT2);//获取文本框控件
	if (pEdit->GetModify())//判断文本框内容是否被修改
	{
		if (IDYES == AfxMessageBox(_T("是否保存修改?"), MB_YESNO))
		{
			AfxMessageBox(_T("保存成功!"));
		}
	}

	CDialogEx::OnClose();
}

3. Static Text 静态文本控件

要注意它的ID,所有的此类控件ID一般都是IDC_STATIC
在这里插入图片描述

没有进行每个的区分,如果要对它进行代码上的改动,就要重设一下ID

4. Picture Control 图片控件

在这里插入图片描述
可以放bitmap,但是放进去之后好像不能调整大小
在这里插入图片描述
frame可以做成辅助线,如上图

5. Group Box 分组控件

在这里插入图片描述

6. Radio Button 单选控件

单选控件如果要分组,就要点一下第一个单选按钮,设置一下组
在这里插入图片描述
这样其他组的单选按钮不受影响,如果不分组,那其他地方的单选和这里的所有只能选一个

7. Check Box 多选控件

手动创建多选单选

int C控件Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CDialogEx::OnCreate(lpCreateStruct) == -1)
		return -1;
	CButton* m_radio = new CButton;
	m_radio->Create(_T("单选按钮"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, CRect(10, 200, 100, 230), this, 0);
	CButton* m_check = new CButton;
	m_check->Create(_T("复选按钮"), WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, CRect(10, 240, 100, 260), this, 0);

	return 0;
}

8. Combo Box 组合控件

在这里插入图片描述
在数据里添加项的显示,每个项用分号分开
在这里插入图片描述

  • 获取内容
	CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO1);//获取下拉框控件
	pComboBox->AddString(L"选项1");//添加选项
	pComboBox->AddString(L"选项2");//添加选项
	pComboBox->AddString(L"选项3");//添加选项
	pComboBox->InsertString(0, L"早上");//插入选项
	pComboBox->SetCurSel(0);//设置当前选项
	wchar_t m_str[20];
	pComboBox->GetLBText(0, m_str);//获取当前选项
	AfxMessageBox(m_str);
	pComboBox->DeleteString(1);//删除选项

9. List Box列表控件

相当于combobox点下拉按钮后下面的那部分,显示一条一条的项

添加修改和combobox差不多

10. List Control 列表控件

视图调成report,可以显示所有分支的内容
在这里插入图片描述

	CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST3);//获取列表控件
	pList->InsertColumn(0, L"姓名", LVCFMT_LEFT, 100);//插入列
	pList->InsertColumn(1, L"年龄", LVCFMT_LEFT, 100);//插入列
	pList->InsertColumn(2, L"性别", LVCFMT_LEFT, 100);//插入列

	pList->InsertItem(0, L"张三");//插入行
	pList->SetItemText(0, 1, L"18");//设置单元格内容
	pList->SetItemText(0, 2, L"男");//设置单元格内容
	pList->InsertItem(1, L"李四");//插入行
	pList->SetItemText(1, 1, L"20");//设置单元格内容
	pList->SetItemText(1, 2, L"女");//设置单元格内容

在这里插入图片描述

11. Horizontal Scroll Bar 水平滚动条

12. Vertial Scroll Bar

13. Slider Control 滑动控件

14. Spin Control 数值微调控件

微调框一般和文本编辑框组合使用
在这里插入图片描述
在这里插入图片描述

  1. 上述对齐,效果就是微调框靠在文本右侧
  2. 如果不设置合作者整数,点击微调框按钮,就没法改变文本框里的值

15. Progress Control 进度条

16. Data Time Picker 时间控件

在这里插入图片描述
可以设置显示格式在这里插入图片描述

17. IP Address Control IP地址控件

高级控件

这里我直接使用关联变量,关联变量的知识在第十章有介绍

Tree Control 树控件

在这里插入图片描述
跟踪选择,就是鼠标移动到节点上会有个手的形状

基本操作

	HTREEITEM hRoot = m_tree.InsertItem(_T("我的电脑"));//插入根节点
	m_tree.InsertItem(_T("本地磁盘(C:)"), hRoot);//插入子节点
	m_tree.InsertItem(_T("本地磁盘(D:)"), hRoot);
	m_tree.InsertItem(_T("本地磁盘(E:)"), hRoot);
	m_tree.InsertItem(_T("本地磁盘(F:)"), hRoot);
	HTREEITEM hRoot1 = m_tree.InsertItem(_T("本地磁盘(G:)"), hRoot);
	m_tree.InsertItem(_T("Administrator"), hRoot1);
	m_tree.InsertItem(_T("Program Files"), hRoot1);
	m_tree.InsertItem(_T("Program Files (x86)"), hRoot1);
	m_tree.InsertItem(_T("Users"), hRoot1);
	m_tree.InsertItem(_T("Windows"), hRoot1);
	HTREEITEM hRoot2 = m_tree.InsertItem(_T("本地磁盘(H:)"), hRoot);
	m_tree.InsertItem(_T("Program Files"), hRoot2);
	m_tree.InsertItem(_T("Program Files (x86)"), hRoot2);
	HTREEITEM hRoot3 = m_tree.InsertItem(_T("Users"), hRoot2);

	//m_tree.Expand(hRoot, TVE_EXPAND);//展开根节点,只能展开当前一级的节点
	m_tree.EnsureVisible(hRoot3);//展开指定节点,可以展开多级节点,到指定节点的路径都展开,包括父节点

遍历节点

void C高级控件Dlg::TraverseTree(HTREEITEM hItem)
{
	CString strText = m_tree.GetItemText(hItem);//获取节点文本
	MessageBox(strText);
	HTREEITEM hChild = m_tree.GetChildItem(hItem);//获取子节点
	while (hChild != NULL)
	{
		TraverseTree(hChild);
		hChild = m_tree.GetNextItem(hChild, TVGN_NEXT);//获取下一个节点
	}
}

void C高级控件Dlg::OnBnClickedButton1()
{
	//获取根节点
	HTREEITEM hRoot = m_tree.GetRootItem();
	//遍历
	if (hRoot)
		TraverseTree(hRoot);

}

Tab Control 分页控件

  1. 首先在主窗口放上tab Control

  2. 想要在tab的分页上显示对话框,需要先创建对话框资源
    在这里插入图片描述

  3. 这里创建了2个,然后给每个对话框右键添加类
    在这里插入图片描述

  4. 主窗口cpp头文件包含并定义2个成员函数
    在这里插入图片描述

  5. 然后在Dlg.cpp里写代码
    OnInitDialog()函数添加

	m_tab1.InsertItem(0, _T("窗口"));//插入选项卡
	m_tab1.InsertItem(1, _T("进程"));


	m_page1.Create(IDD_DIALOG1, &m_tab1);//创建模态对话框,父窗口为m_tab1
	m_page2.Create(IDD_DIALOG2, &m_tab1);

	m_page1.ShowWindow(SW_SHOW);//显示第一个选项卡
	m_page2.ShowWindow(SW_HIDE);//隐藏第二个选项卡

	CRect rect;
	m_tab1.GetClientRect(&rect);//获取选项卡大小

	//调整子窗口大小
	m_page1.MoveWindow(rect.left + 1, rect.top + 20, rect.Width() - 2, rect.Height() - 21);//假设标签按钮宽度20
	m_page2.MoveWindow(rect.left + 1, rect.top + 20, rect.Width() - 2, rect.Height() - 21);
  1. 右键类向导,选择对象IDC_TAB1,选择命令如下图
    在这里插入图片描述
void C高级控件Dlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
{

	int curSel = m_tab1.GetCurSel();//获取当前选项卡
	if (curSel == 0)
	{
		m_page1.ShowWindow(SW_SHOW);
		m_page2.ShowWindow(SW_HIDE);
	}
	else if (curSel == 1)
	{
		m_page1.ShowWindow(SW_HIDE);
		m_page2.ShowWindow(SW_SHOW);
	}
	*pResult = 0;
}

这样就实现了选项卡的切换

如果需要在分页上添加其他控件,只要在分页对话框上添加即可

实现窗口大小调整, 分页和子窗口也调整大小

在这里插入图片描述
类向导添加onsize消息,然后代码如下

void C高级控件Dlg::OnSize(UINT nType, int cx, int cy)
{
	CDialogEx::OnSize(nType, cx, cy);

	if (m_tab1.GetSafeHwnd())//如果选项卡存在
	{
		//调整选项卡大小
		m_tab1.MoveWindow(0, 0, cx, cy);
		//调整子窗口大小
		m_page1.MoveWindow(0, 20, cx, cy - 20);
		m_page2.MoveWindow(0, 20, cx, cy - 20);
	}
}

Rich Edit2.0 Control 富文本控件

相关文章:

  • 共指消解问题的早期研究成果主要来自自然语 言处理领域
  • AdaMix
  • PH热榜 | 2025-02-16
  • c语言基础09
  • 什么决定了硬件设计质量?
  • Web后端 - Maven管理工具
  • 深入解析计算机网络请求头:常见类型与安全性影响
  • FFmpeg源码:url_find_protocol函数分析
  • maven——使用idea创建maven项目(文件夹上颜色)
  • 15.2 ProcessStartInfo类
  • 浏览器Cookies、SessionStorage 和 LocalStorage
  • RL--2
  • 机器学习:十大算法实现汇总
  • 组件库地址
  • 神经网络新手入门(3)光明顶复出(2006-2012)
  • 每日OJ_牛客_Pre-Post(英文题树的遍历_排列组合)
  • Linux下的Python开发环境
  • 动态规划part7|198. 打家劫舍、213.打家劫舍II、337.打家劫舍III
  • Ruby 文件的输入与输出
  • 深入理解 JVM 的栈帧结构
  • 首次公布!我国空间站内发现微生物新物种
  • 韶关一企业将消防安装工程肢解发包,广东住建厅:罚款逾五万
  • 中国情怀:时代记录与家国镜相|澎湃·镜相第三届非虚构写作大赛暨七猫第六届百万奖金现实题材征文大赛征稿启事
  • 中国社联成立95周年,《中国社联期刊汇编》等研究丛书出版
  • 阿联酋与美国达成超过2000亿美元协议
  • 中国人民银行等四部门联合召开科技金融工作交流推进会