【MFC】03.常用复杂控件的使用-笔记

热键:

对话框-类向导:初始化函数中,热键需要在最开始的时候就注册进去:

  1. 注册热键:

    在这之前,先去定义一个宏,代表你这个快捷键。

    参数:窗口句柄,热键编号(热键消息码),辅助键
    #define HOTKEY_USER_MSG 12138
    RegisterHotKey(m_hWnd,HOTKEY_USER_MSG,MOD_SHIFT,VK_F1);//
    
  2. 相应消息:

    类向导-添加消息处理:WM_HOTKY消息

    switch(nHotKeyID){
      case HOTKEY_USER_MSG:{
        AfxMessageBox(L"HOTKEY");
        breake;
      }
    }
    

全局消息钩子:在所有页面上都可以使用该热键

IP控件(IP Address Control):

给空间添加变量m_IP

  • 设置
    BUYE cIPA,cIPB,cIPC,cIPD;
    //判断是否为空
    if(m_IP。IsBlank()){
      AfxMessageBox(L"IP地址不能为空");
      return;
    }else{
      m_IP.GetAddress(cIPA,cIPB,cIPC,cIPD);
      CString csIP;
      csIP.FOrmat(L"%d.%d.%d.%d",cIPA,cIPB,cIPC,cIPD);
      AfxMessageBox(csIP);
    }
    
  • 清除:
    m_IP.ClearAddress();
    
  • 获取
    char ip[] = "192.168.1.60";
    DWORD dwIP = htonl(inet_addr(ip));
    m_IP.SetAddress(dwIP);
    

树控件(Tree Control):

  • 添加变量 m_Tree
  • OnInitDialog:
    HTREEITEM hRoot = m_Tree.InsertItem(L"ROOT",TVI_ROOT,TVI_LAST);
    HTREEITEM hSubRoot1 = m_Tree.InsertItem(L"SubToot1",hRoot,TVI_LAST);
    HTREEITEM hSubRoot2 = m_Tree.InsertItem(L"SubToot1",hRoot,TVI_LAST);
    HTREEITEM hSubRoot3 = m_Tree.InsertItem(L"SubToot1",hRoot,TVI_LAST);
    
  • 获取当前选中:
    HTREEITEM hCurNode = m_Tree.GetSelectItem();
    CString csTxt = m_Tree.GetItemText(hCurNode);
    AfxMessageBox(csText);
    CString csSetBuffer = L"fdksafd";
    m_tree.SetItemText(hCurNode,csSetBuffer);
    
  • 删除选中
    HTREEITEM hCurNode = m_Tree.GetSelectItem();
    m_Tree.DeleteItem(hCurNode);
    
  • 全部删除
    m_Tree.DeleteAllItems();
    

列表:

  • 添加变量:m_FileList

  • OnInitDialog:

    m_FileList.SetExtendedStyle(LVS_EX_GRIDLINES,LVS_EX_FULLROWSELECT);
    m_FileList.InsertColumn(0,L"Name",NULL,100);
    m_FileList.InsertColumn(1,L"Pach",NULL,100);
    m_FileList.InsertColumn(2,L"Title",NULL,100);
    //只有第一列是Insert
    m_FileList.InsertItem(0,L"WdIg",0);
    m_FIleList.SetItemText(0,1,L"Path");
    m_FIleList.SetItemText(0,2,L"Title");
    
    CFileFied finder;
    DWORD nIdnex = 0;
    BOOL bRet = finder.FInderFile(L"路径");
    while(bRet){
      bRet = finder.FindNextFileW();
      m_FileList.InsertItem(nIdnex,finder.GetFileName(),0);
      m_FIleList.SetItemText(nIdnex,finder.GetFilePath());
      m_FIleList.SetItemText(nIdnex,2,finder.GerFileTitle());
    }
    
    
  • 插入右键菜单:

    获取文本,删除一行,删除全部、

    类向导-列表控件消息:NM_RCLICK:

    	POINT pt = { 0 };
    	GetCursorPos(&pt);
    	HMENU hMenu = LoadMenu((HINSTANCE)GetWindowLongPtr(m_hWnd, GWLP_HINSTANCE), MAKEINTRESOURCE(IDR_MENU1));
    	HMENU hSubMenu = GetSubMenu(hMenu, NULL);
    	TrackPopupMenu(hSubMenu, TPM_CENTERALIGN, pt.x, pt.y, 0, m_hWnd, NULL);
    

    删除一行:

    //获取当前行数:
    	int nPos = (int)m_List.GetFirstSelectedItemPosition();
    	nPos -= 1;
    	//删除当前行
    	m_List.DeleteItem(nPos);
    

    删除全部:

    m_FileList.DeleteAllItem();
    

    获取文本

    int nPos = (int)m_List.GetFirstSelectedItemPosition();
    nPos -= 1;
    CString csBuffer = m_List.GetItemText(nPos, 0);
    AfxMessageBox(csBuffer);
    m_FileList.SetItemText(nPos,0,L"WdIg");
    

附加库

Tab页控件(Tab Control):

添加变量:m_Tab

绑定对话框
对话框外观NONe类型,Style:Child,给每一个对话框都添加一个类

OnInitDialog:

m_Tab.InsertItem(0,L"page0");
m_Tab.InsertItem(0,L"page1");
m_Tab.InsertItem(0,L"page2");

主对话框.h包含三个页的头文件,并且在头文件中,初始化三个对象

CPAGE1 page1;
CPAGE2 page2;
CPAGE3 page3;

OnInitDialog:

page1.Create(IDD_DIALOG1,&m_Tab);
page2.Create(IDD_DIALOG2,&m_Tab);
page3.Create(IDD_DIALOG3,&m_Tab);

//窗口移动:
CRect rs;
m_Tab.GetClientRect(rs);
rs.top+=20;
page1.MoveWindow(rs);
page2.MoveWindow(rs);
page3.MoveWindow(rs);

page1.ShowWidnow(SW_SHOW);

这样添加之后呢,当我们点击切换页面的时候,不会切换页面,这是因为没有添加切换的机制:

在Tab控件上,添加事件处理程序,消息类型:TCN_SELECHANGE

int nCurSel = m_Tab.GetCurSel();
	switch (nCurSel) {
	case 0: {
		D1.ShowWindow(SW_SHOW);
		D2.ShowWindow(SW_HIDE);
		D3.ShowWindow(SW_HIDE);
		break;
	}
	case 1: {
		D2.ShowWindow(SW_SHOW);
		D1.ShowWindow(SW_HIDE);
		D3.ShowWindow(SW_HIDE);
		break;
	}
	case 2: {
		D3.ShowWindow(SW_SHOW);
		D2.ShowWindow(SW_HIDE);
		D1.ShowWindow(SW_HIDE);
		break;
	}
	}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GD32F103的EXTI中断和EXTI事件

GD32F103的EXTI可以产生中断,也产生事件信号。 GD32F03的EXTI触发源: 1、I/O管脚的16根线; 2、内部模块的4根线(包括LVD、RTC闹钟、USB唤醒、以太网唤醒)。 通过配置GPIO模块的AFIO_EXTISSx寄存器,所有的GPIO管脚都可以被选作EXTI的触发源…

windows开机运行jar

windows开机自启动jar包: 一、保存bat批处理文件 echo off %1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close)&&exit java -jar E:\projects\ruoyi-admin.jar > E:\server.log 2>&1 &…

VX-API-Gateway开源网关技术的使用记录

VX-API-Gateway开源网关技术的使用记录 官网地址 https://mirren.gitee.io/vx-api-gateway-doc/ VX-API-Gateway(以下称为VX-API)是基于Vert.x (java)开发的 API网关, 是一个分布式、全异步、高性能、可扩展、轻量级的可视化配置的API网关服务官网下载程序zip包 访问 https:/…

【机器学习】 贝叶斯理论的变分推理

许志永 一、说明 贝叶斯原理,站在概率角度上似乎容易解释,但站在函数立场上就不那么容易了;然而,在高端数学模型中,必须要在函数和集合立场上有一套完整的概念,其迭代和运算才能有坚定的理论基础。 二、贝叶…

刷题笔记 day7

力扣 209 长度最小的子数组 解法:滑动指针(对同向双指针区间内的数据处理) 1)先初始化 两个指针 left ,right。 2)右移指针right的同时使用sum记录指针right处的值,并判断sum的值是否满足要求&…

【C#学习笔记】装箱和拆箱

文章目录 装箱和拆箱性能消耗装箱拆箱 比较var&#xff0c;object&#xff0c;dynamic&#xff0c;\<T\>varobject\<T\> 泛型dynamic 装箱和拆箱 在讲引用类型object的时候&#xff0c;我们说它是万能的&#xff0c;却没说它万能在哪里。 除了object为每一种变量…

【TiDB理论知识08】HATP概述

1 HTAP技术 OLTP 在线事务 支付 转账 高并发 每次操作的数据量少 &#xff0c;行存 OLAP 报表分析 每次操作大量数据 列存储 2 传统解决方案 数据抽取到数仓或者数据湖 ETL有延迟 &#xff0c;一般会有T1 T2 数据多副本 3 HTAP的要求 4 TIDB的HTAP架构 TiFlash特点&…

【Linux操作系统】相关问题和知识点总结~

【Linux操作系统】相关问题和知识点总结~&#x1f60e; 前言&#x1f64c;在Linux中&#xff0c;查看CPU使用效率top命令mpstat指令sar指令vmstat指令 如何查看Linux的内核版本grep指令&#xff08;用于在文件内容中&#xff0c;查找满足条件的内容&#xff09;如何批量删除当前…

Typescript+vite+sass手把手实现五子棋游戏(放置类)

Typescriptvitesass手把手实现五子棋游戏&#xff08;放置类&#xff09; 下面有图片和gif可能没加载出来 上面有图片和gif可能没加载出来 导言 最近练习Typescript&#xff0c;觉得差不多了&#xff0c;就用这个项目练练手&#xff0c;使用Typescript纯面向对象编程。 开源…

6.s081/6.1810(Fall 2022)Lab3: page tables

文章目录 前言其他篇章参考链接0. 前置环境1. Speed up system calls (easy)1.1 简单分析1.2 映射1.3 页分配1.4 页释放1.5 测试 2. Print a page table (easy)2.1 简单分析2.2 实现2.3 测试 3. Detect which pages have been accessed (hard)3.1 简单分析3.2 实现3.2.1 获取参…

【Ajax】笔记-设置CORS响应头实现跨域

CORS CORS CORS是什么&#xff1f; CORS(Cross-Origin Resource Sharing),跨域资源共享。CORS是官方的跨域解决方案&#xff0c;它的特点是不需要在客户端做任何特殊的操作&#xff0c;完全在服务器中进行处理&#xff0c;支持get和post请求。跨域资源共享标准新增了一组HTTP首…

【新版系统架构补充】-嵌入式技术

嵌入式微处理体系结构 冯诺依曼结构 传统计算机采用冯诺依曼结构&#xff0c;也称普林斯顿结构&#xff0c;是一种将程序指令存储器和数据存储器合并在一起的存储器结构 冯诺依曼的计算机程序和数据共用一个存储空间&#xff0c;程序指令存储地址和数据存储地址指向同一个存…

Nginx启动报错- Failed to start The nginx HTTP and reverse proxy server

根据日志&#xff0c;仍然出现 “bind() to 0.0.0.0:8888 failed (13: Permission denied)” 错误。这意味着 Nginx 仍然无法绑定到 8888 端口&#xff0c;即使使用 root 权限。 请执行以下操作来进一步排查问题&#xff1a; 确保没有其他进程占用 8888 端口&#xff1a;使用以…

【雕爷学编程】MicroPython动手做(27)——物联网之掌控板小程序2

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

使用 Docker Compose 部署 Redis Cluster 集群,轻松搭建高可用分布式缓存

Redis Cluster&#xff08;Redis 集群&#xff09;是 Redis 分布式解决方案的一部分&#xff0c;它旨在提供高可用性、高性能和横向扩展的功能。Redis Cluster 能够将多个 Redis 节点组合成一个分布式集群&#xff0c;实现数据分片和负载均衡&#xff0c;从而确保在大规模应用场…

Java源码规则引擎:jvs-rules 8月新增功能介绍

JVS-rules是JAVA语言下开发的规则引擎&#xff0c;是jvs企业级数字化解决方案中的重要配置化工具&#xff0c;核心解决业务判断的配置化&#xff0c;常见的使用场景&#xff1a;金融信贷风控判断、商品优惠折扣计算、对员工考核评分等各种变化的规则判断情景。 8月是收获的季节…

antDv table组件滚动截图方法的实现

在开发中经常遇到table内容过多产生滚动的场景&#xff0c;正常情况下不产生滚动进行截图就很好实现&#xff0c;一旦产生滚动就会变得有点棘手。 下面分两种场景阐述解决的方法过程 场景一&#xff1a;右侧不固定列的情况 场景二&#xff1a;右侧固定列的情况 场景一 打开…

三 动手学深度学习v2 —— Softmax回归+损失函数+图片分类数据集

三 动手学深度学习v2 —— Softmax回归损失函数图片分类数据集 目录: softmax回归损失函数 1. softmax回归 回归vs分类: 回归估计一个连续值分类预测一个离散类别 从回归到多类分类 回归 单连续数值输出自然区间R跟真实值的误差作为损失 分类 通常多个输出输出i是预测为第…

硬核!10分钟教你搭建一个本地版GPT4.0!

今天10分钟手把手教会你在自己电脑上搭建一个官方原版的GPT4.0。 不用ChatGPT账号&#xff0c;不用API&#xff0c;直接免费使用上官方原版的GPT4.0&#xff01; 对&#xff01;你没看错&#xff01;不仅是正版GPT4.0&#xff0c;还完全免费&#xff01; 而且整个部署流程极其…

供水管网漏损监测,24小时保障城市供水安全

供水管网作为城市生命线重要组成部分&#xff0c;其安全运行是城市建设和人民生活的基本保障。随着我国社会经济的快速发展和城市化进程的加快&#xff0c;城市供水管网的建设规模日益增长。然而&#xff0c;由于管网老化、外力破坏和不当维护等因素导致的供水管网漏损&#xf…
最新文章