您的当前位置:首页正文

MFC应用程序(控件集合)——标签控件_IP控件_时间控件_List Control控件_Tree Control控件_命令按钮_列表框_组合框_图片_滚动控件

2024-11-07 来源:个人技术集锦

标签控件应用

【Tab Control 标签控件】 标签控件也比较常见。它可以把多个页面集成到一个窗口中, 每个页面对应一个标签,用户点击某个标签时,它对应的页 面就会显示。 使用标签控件我们可以同时加载多个有关联的页面,用 户只需点击标签即可实现页面切换,方便灵活的进行操作。 每个标签除了可以显示标签文本,还可以显示图标。 标签控件相当于是一个页面的容器,可以容纳多个对话 框,而且一般也只容纳对话框,所以我们不能直接在标签控 件上添加其他控件,必须先将其他控件放到对话框中,再将 对话框添加到标签控件中。最终我们点击标签切换页面时, 切换的不是控件的组合,而是对话框。

IP控件应用

【IP Address Control控件】 IP Address Control This section contains information about the programming elements used with IP address controls.
参考数据:
[https://docs.microsoft.com/zh- cn/windows/win32/controls/ip-address- control-reference]

时间控件应用

【时间标准控件】 Date and Time Picker This section contains information about the API elements used with date and time picker controls.
参考数据:

[https://docs.microsoft.com/zh- cn/windows/win32/controls/date-and-time- picker-control-reference]

List Control控件

列表视图控件List Control同样比较常见,它能够把 任何字符串内容以列表的方式显示出来,这种显示方式 的特点是整洁、直观,在实际应用中能为用户带来方便。 列表视图控件是对前面讲到的列表框控件List Box 的改进和延伸。列表视图控件的列表项一般有图标 (Icon)和标签(Label)两部分。图标是对列表项的 图形描述,标签是文字描述。当然列表项可以只包含图 标也可以只包含标签

Tree Control控件

【按钮控件简介】

按钮控件包括命令按钮(Button)、单选按钮(Radio Button)和复选 框(Check Box)等。命令按钮就是我们前面多次提到的狭义的按钮控件, 用来响应用户的鼠标单击操作,进行相应的处理,它可以显示文本也可以嵌 入位图。单选按钮使用时,一般是多个组成一组,组中每个单选按钮的选中 状态具有互斥关系,即同组的单选按钮只能有一个被选中。 1、命令按钮是最常用的一种按钮控件 2、单选按钮和复选框都是一种比较特殊的按钮控件。单选按钮有选中和未选 中两种状态,为选中状态时单选按钮中心会出现一个蓝点,以标识选中状态。 3、复选框也是有选中和未选中两种状态,选中时复选框内会增加一个“√”, 而三态复选框(设置了BS_3STATE风格)有选中、未选中和不确定三种状态, 不确定状态时复选框内出现一个灰色“√”。

【列表框控件介绍】

列表框给出了一个选项清单,允许用户从中进行单项或多项选择,被选中的项 会高亮显示。列表框可分为单选列表框和多选列表框,顾名思义,单选列表框中一 次只能选择一个列表项,而多选列表框可以同时选择多个列表项。 列表框也会向父窗口发送通知消息。这些通知消息含义如下: LBN_DBLCLK:用户用鼠标双击了一列表项,只有具有LBS_NOTIFY的列表才 能发送该消息。 LBN_ERRSPACE:列表框不能申请足够的动态内存来满足需要。 LBN_KILLFOCUS:列表框失去焦点。 LBN_SELCANCEL:当前的选择被取消,只有具有LBS_NOTIFY的列表框才能 发送该消息。 LBN_SETFOCUS:列表框获得输入焦点。 WM_CHARTOITEM:当列表框收到WM_CHAR消息后,向父窗口发送该消息, 只有具有LBS_WANTKEYBOARDINPUT风格的列表框才会发送该消息。 WM_VKEYTOITEM:当列表框收到WM_KEYDOWN消息后,向父窗口发送该 消息,只有具有LBS_WANTKEYBOARDINPUT风格的列表框才会发送该消息。

【组合框控件介绍】

组合框其实就是把一个编辑框和一个列表框组合到 了一起,分为三种:简易(Simple)组合框、下拉式 (Dropdown)组合框和下拉列表式(Drop List)组合框。 下面讲讲它们的区别。

【图片控件控件简介】

图片控件和前面讲到的静态文本框都是静态文本控件, 两者的使用方法有很多相同之处,所属类都是CStatic类。 图片控件静态和动态加载位图图片

【滚动条控件简介】

滚动条大家也很熟悉了,Windows窗口中很多都有滚动条。 前面讲的列表框和组合框设置了相应属性后,如果列表项显 示不下也会出现滚动条。滚动条分为水平滚动条(Horizontal Scroll Bar)和垂直滚动条(Vertical Scroll Bar)两种。滚动条 中有一个滚动块,用于标识滚动条当前滚动的位置。我们可 以拖动滚动条,也可以用鼠标点击滚动条某一位置使滚动块 移动。从滚动条的创建形式来分,有标准滚动条和滚动条控件 两种。像列表框和组合框设置了WS_HSCROLL或 WS_VSCROLL风格以后出现的滚动条,不是一个独立的窗 口,而是这些窗口的一部分,这就是标准滚动条。而滚动条 空间是一个独立的窗口,它可以获得焦点,响应某些操作。

以下是项目效果图:





基本准备:

需要添加以下对话框及相应类


并将子窗口属性改为child 边框改为false,建立一个tab控件 其余控件自己可另行设计

代码及详解部分

首先为每个子窗口创建对象

Dlg头文件代码如下:


// MFCApplication1Dlg.h: 头文件
//

#pragma once
#include"CComputerName.h"
#include"CIDName.h"
#include"CSYSTime.h"
#include"C16TH.h"
#include"C17TH.h"
#include"resource.h"


// CMFCApplication1Dlg 对话框
class CMFCApplication1Dlg : public CDialogEx
{
   
// 构造
public:
	CMFCApplication1Dlg(CWnd* pParent = nullptr);	// 标准构造函数



// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum {
    IDD = IDD_MFCAPPLICATION1_DIALOG };
#endif

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持


// 实现
protected:
	HICON m_hIcon;

	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
public:
	CTabCtrl m_TABItem;

	CComputerName m_ComputerName;
	CIDName m_CidName;
	CSYSTime m_sysTime;
	C16TH m_16th;
	C17TH m_17th;


	afx_msg void OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult);
};

Dlg源文件代码如下:


// MFCApplication1Dlg.cpp: 实现文件
//

#include "pch.h"
#include "framework.h"
#include "MFCApplication1.h"
#include "MFCApplication1Dlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx
{
   
public:
	CAboutDlg();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum {
    IDD = IDD_ABOUTBOX };
#endif

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
   
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
   
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()


// CMFCApplication1Dlg 对话框



CMFCApplication1Dlg::CMFCApplication1Dlg(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_MFCAPPLICATION1_DIALOG, pParent)
{
   
	m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);
}

void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
{
   
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_TAB1, m_TABItem);
}

BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, &CMFCApplication1Dlg::OnTcnSelchangeTab1)
END_MESSAGE_MAP()


// CMFCApplication1Dlg 消息处理程序

BOOL CMFCApplication1Dlg::OnInitDialog()
{
   
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != nullptr)
	{
   
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
   
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码

	m_TABItem.InsertItem(0, _T("计算机名"));
	m_TABItem.InsertItem(1, _T("获取IP"));
	m_TABItem.InsertItem(2, _T("日期"));
	m_TABItem.InsertItem(3, _T("16讲作业"));
	m_TABItem.InsertItem(4, _T("17讲作业"));

	m_ComputerName.Create(IDD_DIALOGComputerName, GetDlgItem(IDC_TAB1));
	m_CidName.Create(IDD_DIALOGID, GetDlgItem(IDC_TAB1));
	m_sysTime.Create(IDD_DIALOGTime, GetDlgItem(IDC_TAB1));
	m_16th.Create(IDD_DIALOG_16th, GetDlgItem(IDC_TAB1));
	m_17th.Create(IDD_DIALOG_17th, GetDlgItem(IDC_TAB1));

	CRect cRect;
	m_TABItem.GetClientRect(&cRect);

	// 调用子对话框在父窗口中的位置,可以改动数值,使子窗口的大小合适
	cRect.top += 20;
	cRect.bottom -= 3;
	cRect.left += 2;
	cRect.right -= 2;

	// 移动窗口
	m_ComputerName.MoveWindow(&cRect);
	m_CidName.MoveWindow(&cRect);
	m_sysTime.MoveWindow(&cRect);
	m_16th.MoveWindow(&cRect);
	m_17th.MoveWindow(&cRect);

	// 隐藏进程性能对话框页面
	m_ComputerName.ShowWindow(true);
	m_CidName.ShowWindow(false);
	m_sysTime.ShowWindow(false);
	m_16th.ShowWindow(false);
	m_17th.ShowWindow(false);

	// 默认设置页面 
	m_TABItem.SetCurSel(0);


	/****************************************************************/
	// 为列表视图控件位置 大小等设置
	CRect cRect1;

	m_17th.m_school.GetClientRect(&cRect1);

	// 将列表视图控件风格更新一下
	m_17th.m_school.SetExtendedStyle(m_17th.m_school.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);

	// 为列表视图控件添加对应的信息:世界一流高校	所属区域	世界排名
	m_17th.m_school.InsertColumn(0, _T("世界排名"), LVCFMT_CENTER, cRect1.Width() / 3
Top