随笔 - 192,  文章 - 0,  评论 - 2,  阅读 - 25万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

属性页控件
属性页->选项卡->对话框
CTabCtrl
一、建立名为tabCtrl的mfc工程,添加Tab Control控件,设置属性ID为IDC_TAB,并添加变量m_tab

在tabCtrlDlg.cpp文件函数BOOL CtabCtrlDlg::OnInitDialog()中添加
// TODO: 在此添加额外的初始化代码
m_tab.InsertItem(0,_T("第一页"));
m_tab.InsertItem(1,_T("第二页"));
二、在资源视图中添加两个dialog,分别设置属性ID为 IDD_PAGE1,IDD_PAGE2。因为dialog是嵌入到tab里边,所以设置style ->child,Border->None(IDD_PAGE1,IDD_PAGE2都要设置);

为属性ID为 IDD_PAGE1 的dialog添加类CPage1Dlg ,属性ID为 IDD_PAGE2 的dialog添加类 CPage2Dlg
在tabCtrlDlg.h中添加两个变量
// 实现
protected:
HICON m_hIcon;
CPage1Dlg m_page1;
CPage2Dlg m_page2;
记得在tabCtrlDlg.h中添加头文件
#include "Page1Dlg.h"
#include "Page2Dlg.h"


为了显示添加的对话框需在CtabCtrlDlg::OnInitDialog()中继续添加
// TODO: 在此添加额外的初始化代码
m_tab.InsertItem(0,_T("第一页"));
m_tab.InsertItem(1,_T("第二页"));

m_page1.Create(MAKEINTRESOURCE(IDD_PAGE1),&m_tab);
m_page2.Create(MAKEINTRESOURCE(IDD_PAGE2),&m_tab);

CRect rc;
m_tab.GetClientRect(rc);
rc.top += 30;
rc.left += 8;
rc.right -= 8;
rc.bottom -= 8;
m_page1.MoveWindow(rc);
m_page2.MoveWindow(rc);

m_page1.ShowWindow(SW_SHOW); //显示对话框1
三、为了使tab页有切换效果需在主窗口IDD_TABCTRL_DIALOG中添加事件处理函数如图步骤,并添加代码

在tabCtrlDlg.cpp文件中添加
void CtabCtrlDlg::OnTcnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
switch(m_tab.GetCurSel())
{
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;
default:
break;
}
*pResult = 0;
}

 

四、源码下载

 

链接:https://pan.baidu.com/s/1hJbgenDGk0r5X5-6efjT9A
提取码:mjk8

 

posted on   Malphite  阅读(628)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示