zoukankan      html  css  js  c++  java
  • 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);

     

  • 相关阅读:
    Dubbo学习系列之六(微服务架构实战)
    流式计算(二)-Kafka Stream
    流式计算(一)-Java8Stream
    Dubbo学习系列之七(分布式订单ID方案)
    Dubbo学习系列之十六(ELK海量日志分析框架)
    什么情况下不能使用 Java 泛型
    Java Stream 流如何进行合并操作
    可别在代码中写那么多魔法值了,脑壳疼!
    你知道如何自动保存 Spring Boot 应用进程号吗
    Spring 官方发起Spring Authorization Server 项目
  • 原文地址:https://www.cnblogs.com/ltyandy/p/10928354.html
Copyright © 2011-2022 走看看