• tab封装MFC


    #pragma once
    #include <vector>
    using  std::vector;
    
    // CMyTabCtrl
    
    class CMyTabCtrl : public CTabCtrl
    {
        DECLARE_DYNAMIC(CMyTabCtrl)
    
    public:
        CMyTabCtrl();
        virtual ~CMyTabCtrl();
        //     m_ctrlTab.InsertDlg(5,
        //         L"呵呵1", ID_DLGA, &DlgA,
        //         L"呵呵2", ID_DLGB, &DlgB,
        //         L"呵呵3", ID_DLGC, &DlgC,
        //         L"呵呵4", ID_DLGD, &DlgD,
        //         L"呵呵5", ID_DLGE, &DlgE, );
    
        void  InsertDlg(DWORD  dwCount, ...)
        {
            va_list  vl;
            va_start(vl, dwCount);
            TCHAR* szName = NULL;
            DWORD dwId = 0;
            CDialogEx* pDlg = NULL;
            CRect  rt = {};
            GetClientRect(rt);
            rt.DeflateRect(1, 23, 1, 1);
            for (DWORD i = 0; i < dwCount;i++)
            {
                // 获取选项的名字
                szName = va_arg(vl, TCHAR*);
                //获取对话框的ID
                dwId = va_arg(vl, DWORD);
                //获取子对话框的对象指针
                pDlg = va_arg(vl, CDialogEx*);
                //添加一项
                InsertItem(i, szName);
                //创建子窗口
                pDlg->Create(dwId, this);
                pDlg->MoveWindow(rt, TRUE);
                m_vecDlg.push_back(pDlg);
            }
            m_vecDlg[0]->ShowWindow(SW_SHOW);
            va_end(vl);
        }
    
    
    
        vector<CDialogEx*> m_vecDlg;
    
    protected:
        DECLARE_MESSAGE_MAP()
    public:
        afx_msg void OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult);
    };
    // MyTabCtrl.cpp : 实现文件
    //
    
    #include "stdafx.h"
    #include "01 Tab控件的封装.h"
    #include "MyTabCtrl.h"
    
    
    // CMyTabCtrl
    
    IMPLEMENT_DYNAMIC(CMyTabCtrl, CTabCtrl)
    
    CMyTabCtrl::CMyTabCtrl()
    {
    
    }
    
    CMyTabCtrl::~CMyTabCtrl()
    {
    }
    
    
    BEGIN_MESSAGE_MAP(CMyTabCtrl, CTabCtrl)
        ON_NOTIFY_REFLECT(TCN_SELCHANGE, &CMyTabCtrl::OnTcnSelchange)
    END_MESSAGE_MAP()
    
    
    
    // CMyTabCtrl 消息处理程序
    
    
    
    //注意:反射消息,用以处理当选项改变时,窗口的显式隐藏问题
    void CMyTabCtrl::OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult)
    {
        // TODO:  在此添加控件通知处理程序代码
        int nSel = GetCurSel();
        for (int i = 0; i < m_vecDlg.size();i++)
        {
            //找到被选择的项,将其显示出来
            if (i == nSel)
            {
                m_vecDlg[i]->ShowWindow(SW_SHOW);
            }
            //非选择项,将其隐藏
            else
            m_vecDlg[i]->ShowWindow(SW_HIDE);
        }
        *pResult = 0;
    }
        // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
        //  执行此操作
        SetIcon(m_hIcon, TRUE);            // 设置大图标
        SetIcon(m_hIcon, FALSE);        // 设置小图标
    
        // TODO:  在此添加额外的初始化代码
             m_ctrlTab.InsertDlg(4,
                 L"呵呵1", IDD_DLGA, new CDlgA,
                L"呵呵2", IDD_DLGB, new CDlgB,
                L"呵呵3", IDD_DLGC, new CDlgC,
                L"呵呵4", IDD_DLGD,new CDlgD);
    让数据变得更安全!
  • 相关阅读:
    Oracle连接数一直在增
    ora00020: maximum number of processes (150) exeeded
    oracle归档日志满了
    C# ZPL
    error CS0227: 不安全代码只会在使用 /unsafe 编译的情况下出现
    最全zpl语言指令解析(含乱码)
    ZPL 打印机实例
    ora-01400 无法将NULL插入 ID 解决方法
    windows 选择时间控件(选择日期, 小时分钟秒)
    用户登陆检验----没有优化,大神可以帮忙优化优化
  • 原文地址:https://www.cnblogs.com/Alyoyojie/p/5283988.html
Copyright © 2020-2023  润新知