zoukankan      html  css  js  c++  java
  • 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);
    让数据变得更安全!
  • 相关阅读:
    delphi 在DLL中添加窗体.
    C#学习心得1
    以自我为中心
    试试角标看看
    哇..今天终于可以让车子在大范围内匀速了..原来一直是我调试PID的方法不对.按照工程整定法!!非常有效
    R485集线器定协议有多少种能否抗干扰?
    前端学习之路(此篇为借鉴)
    HTML特殊字符大全,实体名称转义字符对照表
    FingerprintJS
    js/jquery移动端手势拖动,放大,缩小预览图片
  • 原文地址:https://www.cnblogs.com/Alyoyojie/p/5283988.html
Copyright © 2011-2022 走看看