Windows 程序设计(4) MFC-02 基本控件-下
1. TabCtrl 标签控件
1.1 创建主窗口
1)CMFCTabControlDlg,拖拽标签控件
2)增加变量 CTabCtrl m_tabCtrl
3)设置相关成员变量和处理函数
CFilePage m_filePage; //文件对象
CNet m_netPage; //网络对象
CReg m_regPage; //注册表对象
#define MAX_DLG_PAGE 5
CDialog *m_pDialog[MAX_DLG_PAGE];
int m_CurSelTab;//保存当前选中
// 生成的消息映射函数
virtual BOOL OnInitDialog();
public:
CTabCtrl m_tabCtrl;
afx_msg void OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult);
1.2 创建三个Dialog和对应的类
IDD_DIALOG_FILE 对应类CFilePage
IDD_DIALOG_Net 对应类 CNet
IDD_DIALOG_Reg对应类 CReg
每个Dialog属性 【style】设置为 child 【border】设置为none
1.3初始化对话框
m_tabCtrl.InsertItem(0, _T("文件"));
m_tabCtrl.InsertItem(1, _T("网络"));
m_tabCtrl.InsertItem(2, _T("注册表"));
m_tabCtrl.SetPadding(19);
m_tabCtrl.SetMinTabWidth(50);
m_tabCtrl.SetItemSize(CSize(50, 25));
m_filePage.Create(IDD_DIALOG_FILE, &m_tabCtrl);
m_netPage.Create(IDD_DIALOG_NET, &m_tabCtrl);
m_regPage.Create(IDD_DIALOG_REG, &m_tabCtrl);
CRect rc;
m_tabCtrl.GetClientRect(rc);
rc.top += 25;
// rc.bottom -= 8;
// rc.left += 8;
// rc.right -= 8;
m_filePage.MoveWindow(&rc);
m_netPage.MoveWindow(&rc);
m_regPage.MoveWindow(&rc);
//把对话框对象指针保存起来
m_pDialog[0] = &m_filePage;
m_pDialog[1] = &m_netPage;
m_pDialog[2] = &m_regPage;
//显示初始页面
m_pDialog[0]->ShowWindow(SW_SHOW);
m_pDialog[1]->ShowWindow(SW_HIDE);
m_pDialog[2]->ShowWindow(SW_HIDE);
//保存当前选择
m_CurSelTab = 0;
1.4消息处理函数
void CMFCTabControlDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
m_pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
m_CurSelTab = m_tabCtrl.GetCurSel();
if (m_pDialog[m_CurSelTab])
{
m_pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);
}
*pResult = 0;
}
2.Tree树形控件
2.0简介
1、控件简介: Tree树形控件也是我们编程过程中比较常用的一个控件,而且在其他软件中也经常能看到,比如Windows系统中的资源管理器
2、控件的使用:
a、拖拽Tree树形控件到对话框模版上;
b、一些常用的属性:
Check Boxes:结点前是否带有复选框;
Edit Labels:结点名字是否可编辑;
Has Buttons:父节点是否有+号可供展开;
Has Lines:父子结点之间是否有连接线;
Lines At Root:是否从根节点开始就带有虚线;
等等吧,大家可以根据自己的需要设置相关的属性。
c、为Tree树形控件绑定一个 CTreeCtrl 控件类型变量m_Tree;
2.1初始化
BOOL CFilePage::OnInitDialog()
{
CDialog::OnInitDialog();
HTREEITEM hRoot = m_Tree.InsertItem(_T("父1"));
HTREEITEM hSub1 = m_Tree.InsertItem(_T("子1"), hRoot);
HTREEITEM hSub2 = m_Tree.InsertItem(_T("子2"), hRoot);
HTREEITEM hSub3 = m_Tree.InsertItem(_T("子子1"), hSub2);
//b、获得节点的文本:
m_Tree.GetItemText(hSub3);
//c、设置节点的文本:
m_Tree.SetItemText(hSub3, _T("abc"));
return TRUE;
}
2.2点击树形控件每个标签的处理函数
void CFilePage::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
HTREEITEM hSelItem = m_Tree.GetSelectedItem();
CString str=m_Tree.GetItemText(hSelItem);
MessageBox(str);
*pResult = 0;
}
2.ListCtrl 高级列表控件
VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)
1、控件简介:
ListCtrl 高级列表控件也是我们平时编程过程中很常用的一个控件,一般涉及到报表展示、记录展示之类的,都需要ListCtrl 高级列表控件。例如:任务管理器啊,文件列表啊,等等都是ListCtrl 高级列表控件来实现的。
2、控件的风格样式:
LVS_ICON: 为每个item显示大图标
LVS_SMALLICON: 为每个item显示小图标
LVS_LIST: 显示一列带有小图标的item
LVS_REPORT: 显示item详细资料
直观的理解:Windows资源管理器,“查看” 标签下的 “大图标,小图标,列表,详细资料”
具体可以通过代码指定控件的风格样式,也可以方便点,从控件的属性中直接修改:
对应控件的 View 属性:Icon、Small Icon、List、Report 四项。
比较常用的还是第四种:报表样式!
3、初始化ListCtrl
CRect rect;
// 获取编程语言列表视图控件的位置和大小
m_List.GetClientRect(&rect);
// 为列表视图控件添加全行选中和栅格风格
m_List.SetExtendedStyle(m_List.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
// 为列表视图控件添加三列
m_List.InsertColumn(0, _T("语言"), LVCFMT_CENTER, rect.Width() / 3, 0);
m_List.InsertColumn(1, _T("2012.02排名"), LVCFMT_CENTER, rect.Width() / 3, 1);
m_List.InsertColumn(2, _T("2011.02排名"), LVCFMT_CENTER, rect.Width() / 3, 2);
// 在列表视图控件中插入列表项,并设置列表子项文本
m_List.InsertItem(0, _T("Java"));
m_List.SetItemText(0, 1, _T("1"));
m_List.SetItemText(0, 2, _T("1"));
m_List.InsertItem(1, _T("C"));
m_List.SetItemText(1, 1, _T("2"));
m_List.SetItemText(1, 2, _T("2"));
m_List.InsertItem(2, _T("C#"));
m_List.SetItemText(2, 1, _T("3"));
m_List.SetItemText(2, 2, _T("6"));
m_List.InsertItem(3, _T("C++"));
m_List.SetItemText(3, 1, _T("4"));
m_List.SetItemText(3, 2, _T("3"));
4、消息处理函数
void CMFCListCtrolDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
CString strLangName; // 选择语言的名称字符串
NMLISTVIEW *pNMListView = (NMLISTVIEW*)pNMHDR;
if (-1 != pNMListView->iItem) // 如果iItem不是-1,就说明有列表项被选择
{
// 获取被选择列表项第一个子项的文本
strLangName = m_List.GetItemText(pNMListView->iItem, 0);
// 将选择的语言显示与编辑框中
SetDlgItemText(IDC_LANG_SEL_EDIT, strLangName);
}
}
Windows 程序设计(4) MFC-02 基本控件-下的更多相关文章
- 【转】MFC对话框和控件
原文网址:http://www.cnblogs.com/tiwlin/archive/2013/05/08/3067966.html 对话框和控件 对话框是Windows应用程序中一种常用的资源,其主 ...
- MFC对话框和控件
对话框和控件 对话框是Windows应用程序中一种常用的资源,其主要功能是输出信息和接收用户的输入数据.控件是嵌入在对话框中或其它父窗口中的一个特殊的小窗口,它用于完成不同的输入.输出功能.对话框与控 ...
- Windows 程序设计(4) MFC 03 -系列学习
本文整体目录和绝大部门内容来自 [鸡啄米网站]的MFC系列文章,欢迎支持原创 (一)VS2010/MFC编程入门之前言 VC++全称是Visual C++,是由微软提供的C++开发工具,它与C++的根 ...
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件.(此文章也是总结了网上好多人写的文章,我只是汇总一下,加上部分自己的东西,在这里感谢所有在网 ...
- 最全的基于MFC的ActiveX控件开发教程
浏览器插件之ActiveX开发(一) 一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题.在有特殊需求(如涉及数据安全的金融业务 ...
- 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图
[源码下载] 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Co ...
- 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性
[源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件 ...
- 重新想象 Windows 8.1 Store Apps (78) - 控件增强: ScrollViewer, FlipView, Popup
[源码下载] 重新想象 Windows 8.1 Store Apps (78) - 控件增强: ScrollViewer, FlipView, Popup 作者:webabcd 介绍重新想象 Wind ...
- 重新想象 Windows 8.1 Store Apps (79) - 控件增强: MediaElement, Frame
[源码下载] 重新想象 Windows 8.1 Store Apps (79) - 控件增强: MediaElement, Frame 作者:webabcd 介绍重新想象 Windows 8.1 St ...
- 重新想象 Windows 8.1 Store Apps (80) - 控件增强: WebView 之基本应用, POST 数据, 与 JavaScript 交互
[源码下载] 重新想象 Windows 8.1 Store Apps (80) - 控件增强: WebView 之基本应用, POST 数据, 与 JavaScript 交互 作者:webabcd 介 ...
随机推荐
- C# 使用Word模板导出数据
使用NPOI控件导出数据到Word模板中方式: 效果如下: Word模板: 运行结果: 实现如下: Student.cs using System; using System.Collections. ...
- MySQL常见6个考题在实际工作中的运用
题目一 MyISAM和InnoDB的区别,什么时候选择MyISAM 参考回答 InnoDB是目前MySQL主流版本(5.6.5.7.8.0)默认的存储引擎,支持事务.外键.行级锁,对于并发条件下要求数 ...
- 谁说双非本科就一定无缘阿里?H哥粉丝6面通过,喜提Offer!
本文来自作者投稿(原作者:小胖儿),原作者是一位2021届本科毕业生,就读于一所双非(非985.非211)院校,在今年2月份的时候,我曾经帮他指导过简历,并且根据他的简历内容帮他提了一些可能会问到的问 ...
- 记录我在Docker 中一步一步搭建Mysql 数据库存开发环境
准备在docker下来搭建mysql开发环境玩玩,当作学习笔记.搭建环境是:win10 企业版,docker desktop 19.03.8,mysql 5.7,Windows PowerShell ...
- JVM调优总结(五)-典型配置举例
以下配置主要针对分代垃圾回收算法而言. 堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理 ...
- dsPIC单片机的波特率的计算
如果要求的波特率 为250Kbps 如何配置dsPIC单片机的波特率控制寄存器 1.求F1: Fosc/预分频(CiCFG1<5:0>) 2.求N: F1/250 3.同步段+传播段+Ph ...
- redis 缓存穿透,缓存雪崩,缓存击穿
1.缓存穿透:缓存穿透是指查询一个不存在的数据,由于缓存是不命中,将去查询数据库,但是数据库也无此记录,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义.在流量大时,可能DB就挂掉 ...
- 第三篇-用Flutter手撸一个抖音国内版,看看有多炫
前言 前一篇已经开发了大部分框架,包含视频上下滑动播放,这次将上次未完成的数据显示友好显示,以及底部音乐走马灯特效,另外优化了加载数据的bug,在dart语言里 & 会自动变成& 另 ...
- mysql页面查询
<?php $link = mysql_connect('127.0.0.1', 'root', 'root'); if (!$link) { die('Could not connect: ' ...
- [python爬虫]简单爬虫功能
在我们日常上网浏览网页的时候,经常会看到某个网站中一些好看的图片,它们可能存在在很多页面当中,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我们最常规的做法就是通过鼠标 ...