22 分页控件

文章目录

  • 界面设置
  • 初始化
    • 主对话框
    • 子页面初始化
  • 页面1枚举窗口
  • 页面2枚举进程
  • 全部代码

界面设置

ui 设置
在这里插入图片描述>创建CTablCtrl
在这里插入图片描述> 创建页控件(子窗口),style设置成为chlid
在这里插入图片描述添加类
在这里插入图片描述在这里插入图片描述页面中加入listCtrl 控件
在这里插入图片描述添加变量
在这里插入图片描述分别添加初始化函数
在这里插入图片描述

初始化

主对话框

BOOL CManagerDlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动//  执行此操作SetIcon(m_hIcon, TRUE);			// 设置大图标SetIcon(m_hIcon, FALSE);		// 设置小图标//插入m_table.InsertItem(0, L"窗口");m_table.InsertItem(0, L"进程");m_page1.Create(IDD_PAGE1_DLG,&m_table);//创建页m_page2.Create(IDD_PAGE2_DLG,&m_table);//调整位置CRect rect;m_table.GetClientRect(&rect);rect.top = 22;rect.left = 2;rect.right -= 2;rect.bottom -= 3;m_page1.MoveWindow(&rect);m_page2.MoveWindow(&rect);m_page1.ShowWindow(SW_SHOW);m_page2.ShowWindow(SW_HIDE);return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

设置样式选择改变
在这里插入图片描述

切换窗口

void CManagerDlg::OnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult)
{int nSel=m_table.GetCurSel();//0选择成功1选择失败switch (nSel){case 0:m_page1.ShowWindow(SW_SHOW);m_page2.ShowWindow(SW_HIDE);break;case 1:m_page1.ShowWindow(SW_HIDE);m_page2.ShowWindow(SW_SHOW);break;}*pResult = 0;
}

请添加图片描述

改变页面大小
在这里插入图片描述

void CManagerDlg::OnSize(UINT nType, int cx, int cy)
{CDialogEx::OnSize(nType, cx, cy);if (m_table.GetSafeHwnd()){m_table.MoveWindow(15, 12, cx-30, cy-24);CRect rect;m_table.GetClientRect(&rect);rect.top = 22;rect.left = 2;rect.right -= 2;rect.bottom -= 3;m_page1.MoveWindow(&rect);m_page2.MoveWindow(&rect);}
}

子页面初始化

页面1

BOOL CPage1Dlg::OnInitDialog()
{CDialogEx::OnInitDialog();m_list.InsertColumn(0, L"窗口名", LVCFMT_LEFT, 120);m_list.InsertColumn(0, L"状态", LVCFMT_LEFT, 120);return TRUE;  // return TRUE unless you set the focus to a control// 异常: OCX 属性页应返回 FALSE
}

页面2

BOOL CPage2Dlg::OnInitDialog()
{CDialogEx::OnInitDialog();m_list.InsertColumn(0, L"进程名", LVCFMT_LEFT, 120);m_list.InsertColumn(0, L"PID", LVCFMT_LEFT, 120);return TRUE;  // return TRUE unless you set the focus to a control// 异常: OCX 属性页应返回 FALSE
}

改变页面大小
在这里插入图片描述

void CPage2Dlg::OnSize(UINT nType, int cx, int cy)
{CDialogEx::OnSize(nType, cx, cy);if (m_list.GetSafeHwnd())//判断窗口是否存在{m_list.MoveWindow(0, 0, cx, cy);}
}

请添加图片描述

页面1枚举窗口

void CPage1Dlg::EnunWindows()
{CWnd* pWnd = GetParent()->GetParent();//CWnd* pWnd=GetDesktopWindow();//获取桌面pWnd=pWnd->GetWindow(GW_HWNDFIRST);int i = 0;while (pWnd){//获取标题CString str;pWnd->GetWindowText(str);m_list.InsertItem(i,str);pWnd=pWnd->GetWindow(GW_HWNDNEXT);i++;}
}

页面2枚举进程

void CPage2Dlg::EnumProcess()
{//创建进程快照HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//返回进程列表PROCESSENTRY32 pe32{ sizeof(PROCESSENTRY32) };//枚举驻留的进程BOOL b = Process32First(hSnapshot, &pe32);int i = 0;while (b){m_list.InsertItem(i, pe32.szExeFile);CString str;str.Format(L"%d", pe32.th32ParentProcessID);m_list.SetItemText(i, 1, str);b = Process32Next(hSnapshot, &pe32);//获取下一个进程i++;}
}

请添加图片描述

全部代码

// ManagerDlg.h: 头文件

//#pragma once
#include "CPage1Dlg.h"
#include "CPage2Dlg.h"// CManagerDlg 对话框
class CManagerDlg : public CDialogEx
{
// 构造
public:CManagerDlg(CWnd* pParent = nullptr);	// 标准构造函数// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_MANAGER_DIALOG };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持// 实现
protected:HICON m_hIcon;// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()
public:CTabCtrl m_table;CPage1Dlg m_page1;CPage2Dlg m_page2;afx_msg void OnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult);afx_msg void OnSize(UINT nType, int cx, int cy);
};

// ManagerDlg.cpp: 实现文件

//#include "pch.h"
#include "framework.h"
#include "Manager.h"
#include "ManagerDlg.h"
#include "afxdialogex.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif// CManagerDlg 对话框CManagerDlg::CManagerDlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_MANAGER_DIALOG, pParent)
{m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CManagerDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_TAB1, m_table);
}BEGIN_MESSAGE_MAP(CManagerDlg, CDialogEx)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, &CManagerDlg::OnSelchangeTab)ON_WM_SIZE()
END_MESSAGE_MAP()// CManagerDlg 消息处理程序BOOL CManagerDlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动//  执行此操作SetIcon(m_hIcon, TRUE);			// 设置大图标SetIcon(m_hIcon, FALSE);		// 设置小图标//插入m_table.InsertItem(0, L"窗口");m_table.InsertItem(0, L"进程");m_page1.Create(IDD_PAGE1_DLG,&m_table);//创建页m_page2.Create(IDD_PAGE2_DLG,&m_table);//调整位置CRect rect;m_table.GetClientRect(&rect);rect.top = 22;rect.left = 2;rect.right -= 2;rect.bottom -= 3;m_page1.MoveWindow(&rect);m_page2.MoveWindow(&rect);m_page1.ShowWindow(SW_SHOW);m_page2.ShowWindow(SW_HIDE);return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。void CManagerDlg::OnPaint()
{if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CDialogEx::OnPaint();}
}//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CManagerDlg::OnQueryDragIcon()
{return static_cast<HCURSOR>(m_hIcon);
}void CManagerDlg::OnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult)
{int nSel=m_table.GetCurSel();//0选择成功1选择失败switch (nSel){case 0:m_page1.ShowWindow(SW_SHOW);m_page2.ShowWindow(SW_HIDE);break;case 1:m_page1.ShowWindow(SW_HIDE);m_page2.ShowWindow(SW_SHOW);break;}*pResult = 0;
}void CManagerDlg::OnSize(UINT nType, int cx, int cy)
{CDialogEx::OnSize(nType, cx, cy);if (m_table.GetSafeHwnd()){m_table.MoveWindow(15, 12, cx-30, cy-24);CRect rect;m_table.GetClientRect(&rect);rect.top = 22;rect.left = 2;rect.right -= 2;rect.bottom -= 3;m_page1.MoveWindow(&rect);m_page2.MoveWindow(&rect);}
}

// CPage1Dlg 对话框

class CPage1Dlg : public CDialogEx
{DECLARE_DYNAMIC(CPage1Dlg)public:CPage1Dlg(CWnd* pParent = nullptr);   // 标准构造函数virtual ~CPage1Dlg();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_PAGE1_DLG };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持DECLARE_MESSAGE_MAP()
public:CListCtrl m_list;virtual BOOL OnInitDialog();afx_msg void OnSize(UINT nType, int cx, int cy);void EnunWindows();
};

// CPage1Dlg.cpp: 实现文件

//#include "pch.h"
#include "Manager.h"
#include "CPage1Dlg.h"
#include "afxdialogex.h"// CPage1Dlg 对话框IMPLEMENT_DYNAMIC(CPage1Dlg, CDialogEx)CPage1Dlg::CPage1Dlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_PAGE1_DLG, pParent)
{}CPage1Dlg::~CPage1Dlg()
{
}void CPage1Dlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_LIST1, m_list);
}BEGIN_MESSAGE_MAP(CPage1Dlg, CDialogEx)ON_WM_SIZE()
END_MESSAGE_MAP()// CPage1Dlg 消息处理程序BOOL CPage1Dlg::OnInitDialog()
{CDialogEx::OnInitDialog();m_list.InsertColumn(0, L"窗口名", LVCFMT_LEFT, 120);m_list.InsertColumn(0, L"状态", LVCFMT_LEFT, 120);EnunWindows();return TRUE;  // return TRUE unless you set the focus to a control// 异常: OCX 属性页应返回 FALSE
}void CPage1Dlg::OnSize(UINT nType, int cx, int cy)
{CDialogEx::OnSize(nType, cx, cy);if (m_list.GetSafeHwnd())//判断窗口是否存在{m_list.MoveWindow(0, 0, cx, cy);}
}void CPage1Dlg::EnunWindows()
{CWnd* pWnd = GetParent()->GetParent();//CWnd* pWnd=GetDesktopWindow();//获取桌面pWnd=pWnd->GetWindow(GW_HWNDFIRST);int i = 0;while (pWnd){//获取标题CString str;pWnd->GetWindowText(str);m_list.InsertItem(i,str);pWnd=pWnd->GetWindow(GW_HWNDNEXT);i++;}
}

// CPage2Dlg 对话框

class CPage2Dlg : public CDialogEx
{DECLARE_DYNAMIC(CPage2Dlg)public:CPage2Dlg(CWnd* pParent = nullptr);   // 标准构造函数virtual ~CPage2Dlg();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_PAGE2_DLG };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持DECLARE_MESSAGE_MAP()
public:CListCtrl m_list;virtual BOOL OnInitDialog();afx_msg void OnSize(UINT nType, int cx, int cy);void EnumProcess();
};

// CPage2Dlg.cpp: 实现文件

//#include "pch.h"
#include "Manager.h"
#include "CPage2Dlg.h"
#include "afxdialogex.h"
#include "tlhelp32.h"// CPage2Dlg 对话框IMPLEMENT_DYNAMIC(CPage2Dlg, CDialogEx)CPage2Dlg::CPage2Dlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_PAGE2_DLG, pParent)
{}CPage2Dlg::~CPage2Dlg()
{
}void CPage2Dlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_LIST1, m_list);
}BEGIN_MESSAGE_MAP(CPage2Dlg, CDialogEx)ON_WM_SIZE()
END_MESSAGE_MAP()// CPage2Dlg 消息处理程序BOOL CPage2Dlg::OnInitDialog()
{CDialogEx::OnInitDialog();m_list.InsertColumn(0, L"进程名", LVCFMT_LEFT, 120);m_list.InsertColumn(0, L"PID", LVCFMT_LEFT, 120);EnumProcess();return TRUE;  // return TRUE unless you set the focus to a control// 异常: OCX 属性页应返回 FALSE
}void CPage2Dlg::OnSize(UINT nType, int cx, int cy)
{CDialogEx::OnSize(nType, cx, cy);if (m_list.GetSafeHwnd())//判断窗口是否存在{m_list.MoveWindow(0, 0, cx, cy);}
}void CPage2Dlg::EnumProcess()
{//创建进程快照HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//返回进程列表PROCESSENTRY32 pe32{ sizeof(PROCESSENTRY32) };//枚举驻留的进程BOOL b = Process32First(hSnapshot, &pe32);int i = 0;while (b){m_list.InsertItem(i, pe32.szExeFile);CString str;str.Format(L"%d", pe32.th32ParentProcessID);m_list.SetItemText(i, 1, str);b = Process32Next(hSnapshot, &pe32);//获取下一个进程i++;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/19997.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

U启动盘(NETBASE第十二课)

1.域环境组策略的应用规则 1&#xff09;策略的继承 继承&#xff1a;默认下级容器继承上级容器的组策略配置Default Domain Policy禁止更改桌面背景运行-dsa.msc创建OU并命名为caiwu&#xff0c;在caiwu的OU中创建新用户xmxm用户在win10客户端主机登录&#xff0c;验证不能更…

RestClient操作索引库

一、初始化RestClient 分为三步&#xff1a; 1&#xff09;引入es的RestHighLevelClient依赖&#xff1a; <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dep…

xxl-job定时任务测试

配置执行器 启动相关xxl-job客户端服务后&#xff0c;会自动注册机器地址 简单任务 /*** 简单任务** param params* return*/XxlJob(value "demoJob")public ReturnT<String> demoJobHandler(String params) {log.info("我是 jeecg-system 服务里的定时任…

第一百零五天学习记录:数据结构与算法基础:顺序表(王卓教学视频)

注&#xff1a;笔记截图均来自王卓数据结构教学视频 线性表的定义和特点 线性表是具有相同特性的数据元素的一个有限序列 同一线性表中的元素必定具有相同特性&#xff0c;数据元素间的关系是线性关系。 线性表的逻辑特征 稀疏多项式的运算 顺序存储结构存在的问题 1、存…

k8s 中的卷

前面的文章我们分享了 pod &#xff0c;RC&#xff0c;RS&#xff0c;DaemonSet&#xff0c;CJ&#xff0c;Service 等各种资源 今天我们来分享一波如何将磁盘挂载到容器中&#xff0c;在 docker 里面这种技术叫做 数据卷&#xff0c;感兴趣的小伙伴可以查看一下文章&#xff…

TypeScript 学习笔记(二):接口与类型别名、字面量类型

一、接口的定义 在面向对象的编程中&#xff0c;接口是一种规范的定义&#xff0c;它定义了行为和动作的规范&#xff0c;在程序设计里面&#xff0c;接口起到一种限制和规范的作用。接口定义了某一批类所需要遵守的规范&#xff0c;接口不关心这些类的内部状态数据&#xff0…

MySQL内外连接

目录 内连接 外连接 左外连接 右外连接 内连接 内连接实际上就是利用 where 子句对两种表形成的笛卡儿积进行筛选 select 字段 from 表 1 inner join 表 2 on 连接条件 and 其他条件 显示SMITH的名字和部门名称 使用inner join 写法上是基本类似的。 外连接 左外…

如何使用ChatGPT制作免费的数字人

传统的数字人制作过程 制作属于自己的免费的数字人是一个复杂的过程&#xff0c;需要涉及多个方面的知识和技术。以下是一个大致的步骤指南&#xff0c;以帮助你开始这个过程&#xff1a; 1. 确定数字人的目标和设计&#xff1a;首先&#xff0c;你需要确定数字人的用途和目标…

校园跑腿小程序都包括哪些业务呢?

校园创业&#xff0c;大家都知道&#xff0c;一直以来是个非常火热的话题&#xff0c;每位步入大学校园的学子们都有过在校创业的想法&#xff0c;包括我们一些有着学校资源的社会创业者们&#xff0c;早已经看好了中国高校这块巨大的市场。 在这里&#xff0c;我要跟大家分享…

kubernetes 1.27.3 集群部署方案

一、准备环境 1.1 Kubernetes 1.27.3 版本集群部署环境准备 1.1.1 主机硬件配置说明 cpu内存硬盘角色主机名系统版本 8C 8G 1024GB master master01 centos 7.9 8C 16G 1024GB worker(node) worker01 centos 7.9 8C 16G 1024GB worker(node) worker…

3. MySQL - 数据类型 选项约束

目录 回顾 1. 命令行下的 MySql 客户端 2. 图形化界面的 MySQL-Client 3. 数据库概述 3.1 数据库管理系统是什么 3.2 工作模式 3.3 RDBMS 管理数据的结构 3.4 客户端连接服务器的信息 4. MySQL 中的数据类型 4.1 整型类型 4.2 字符串 4.3 日期/时间 5. MySQL 每个字…

阿里云容蓓:DCDN 助力云原生时代的应用构建及最佳实践

在数字化转型速度不断提升的今天&#xff0c;大带宽、低时延、高并发的场景不断涌现&#xff0c;内容分发网络(Content Delivery Network&#xff0c;CDN)应用需求还在不断攀升&#xff0c;打造更高质量的CDN服务将成为新时代产业竞争的关键所在。亚太CDN峰会自2012年第一届以来…