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);

     

  • 相关阅读:
    用Python在地图上模拟疫情扩散
    Word VBA 单元格处理
    SAR目标检测相关文献整理
    anaconda+pycharm+flask环境搭建
    航空遥感图像(Aerial Images)目标检测数据集汇总
    VS2017新建或拷贝项目编译时出现:找不到 Windows SDK 版本8.1.请安装所需的版本的 Windows SDK
    opencv图像裁剪与拼接
    OpenCV之光流法运动目标跟踪
    R = [obj for obj in recs[imagename] if obj['name'] == classname] KeyError:'1'
    xml.etree.ElementTree.ParseError: not well-formed (invalid token)
  • 原文地址:https://www.cnblogs.com/ltyandy/p/10928354.html
Copyright © 2011-2022 走看看