• MFC_2.10选项卡控件的封装


    选项卡控件的封装

    1.新建默认MFC项目

    2.添加资源Dialog,属性style改child,边框改none,添加类取名CMyDialog1;

    同理,CMyDialog2;

    3.类向导,添加MFC类-CTabCtrl类,取名CMyTabCtrl。

    4.CMyTabCtrl类添加自定义封装函数


    VOID CMyTabCtrl::InesrtTabColumn(int count, ...)
    {
    va_list valist;
    va_start(valist, count);

    for (int i = 0; i < count; ++i)
    {
    // 获取字符串类型的值
    LPCWSTR Text = va_arg(valist, LPCWSTR);

    // 添加到选项卡
    InsertItem(i, Text);
    }

    va_end(valist);
    }

    // 创建窗口必须要[对象][id]
    VOID CMyTabCtrl::InsertTabDialog(int count, ...)
    {
    va_list valist;
    va_start(valist, count);

    // 计算出需要移动的位置
    CRect Rect;
    GetClientRect(&Rect);
    Rect.DeflateRect(17, 44, -9, -12);

    for (int i = 0; i < count; ++i)
    {
    // 获取对话框
    CDialog* Dlg = va_arg(valist, CDialog*);

    // 获取资源的 id
    UINT DlgId = va_arg(valist, UINT);
    Dlg->Create(DlgId);

    // 移动窗口
    Dlg->MoveWindow(&Rect);

    // 将对话框添加到容器中
    DialogVec.push_back(Dlg);
    }

    ShowTabDialog(0);

    va_end(valist);
    }


    VOID CMyTabCtrl::ShowTabDialog(int index)
    {
    for (int i = 0; i < DialogVec.size(); ++i)
    {
    if (i == index)
    DialogVec[i]->ShowWindow(SW_NORMAL);
    else
    DialogVec[i]->ShowWindow(SW_HIDE);
    }
    }

     

    5.CMyTabCtrl类添加选项卡响应消息-消息-选择=TCN_SELCHANGE

    添加。编辑程序

    BEGIN_MESSAGE_MAP(CMyTabCtrl, CTabCtrl)
    ON_NOTIFY_REFLECT(TCN_SELCHANGE, &CMyTabCtrl::OnTcnSelchange)
    END_MESSAGE_MAP()
    // CMyTabCtrl 消息处理程序
    void CMyTabCtrl::OnTcnSelchange(NMHDR* pNMHDR, LRESULT* pResult)
    {

    // 获取点击了第几个
    int index = GetCurSel();

    // 显示指定的
    ShowTabDialog(index);

    *pResult = 0;
    }

    6.CMyTabCtrl头文件写

    #include <vector> using namespace std;

    vector<CDialog*> DialogVec;

    7.系统默认Dialog添加绑定变量,取名m_TabCtrl,类型为CMyTabCtrl。

    头文件添加CMyTabCtrl.h

    8.系统默认Dialog相关cpp初始化

     

    #include "CMyDialog1.h"
    #include "CMyDialog2.h"

    // 添加选项卡和名字
    m_TabCtrl.InesrtTabColumn(2, L"第一个", L"第二个");

    // 添加具体的对话框和id
    m_TabCtrl.InsertTabDialog(2,
    new CMyDialog1, IDD_DIALOG1,
    new CMyDialog2, IDD_DIALOG2);

     

  • 相关阅读:
    spark 插入数据到mysql时遇到的问题 org.apache.spark.SparkException: Task not serializable
    Linux编译安装python3
    爬取基于Flex技术的网站数据
    转:MySQL到Greenplum迁移分析
    Greenplum基本介绍
    Hive on Spark
    Flume可分布式日志收集系统
    Redis高性能内存数据库
    Kafka 分布式发布-订阅消息系统
    Spark学习之Spark Streaming
  • 原文地址:https://www.cnblogs.com/ltyandy/p/10928354.html
Copyright © 2020-2023  润新知