mfc 课堂笔记 day002

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mfc 课堂笔记 day002相关的知识,希望对你有一定的参考价值。

table控件的使用

  1. 创建自定义table类,继承自CTabCtrl
    类向导,添加MFC类
    技术分享图片

创建CMyTab类
技术分享图片

  1. 给tab控件添加变量,变量类型为刚才创建的自定义类
    技术分享图片
  2. 给tab控件添加标签
    技术分享图片
    void CMyTab::PreSubclassWindow()
    {
    // TODO: 在此添加专用代码和/或调用基类
    InsertItem(0, L"A");
    InsertItem(1, L"B");
    InsertItem(2, L"C");
    CTabCtrl::PreSubclassWindow();
    }
  3. 准备3个子窗口资源
    技术分享图片
    设置窗口属性为子窗口口,无边框
    技术分享图片
    添加类
    技术分享图片
    重复以上操作3次
  4. 把以上子窗口作为tab控件的子窗口->定义成员变量,并初始化
    void CMyTab::PreSubclassWindow()
    {
    // TODO: 在此添加专用代码和/或调用基类
    InsertItem(0, L"A");
    InsertItem(1, L"B");
    InsertItem(2, L"C");
    m_child[0] = new CMyDlgA;
    m_child[0]->Create(IDD_DIALOG1,this);
    m_child[1] = new CMyDlgB;
    m_child[1]->Create(IDD_DIALOG2,this);
    m_child[2] = new CMyDlgC;
    m_child[2]->Create(IDD_DIALOG3,this);
    // 把子窗口移动到和客户区一样大
    CRect rt = {};
    GetClientRect(&rt);
    rt.DeflateRect(0, 25, 0, 0);
    m_child[0]->MoveWindow(&rt);
    m_child[0]->ShowWindow(SW_SHOW);
    CTabCtrl::PreSubclassWindow();
    }
  5. 添加按钮切换消息
    技术分享图片
    void CMyTab::OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult)
    {
    // TODO: 在此添加控件通知处理程序代码
    *pResult = 0;
    int nSel = GetCurSel();
    // 隐藏之前的窗口,只显示现在点击的这个标签所在的窗口
    for (int i=0;i<3;i++)
    {
        m_child[i]->ShowWindow(SW_HIDE);
    }
    // 把子窗口移动到和客户区一样大
    CRect rt = {};
    GetClientRect(&rt);
    rt.DeflateRect(0, 25, 0, 0);
    m_child[nSel]->MoveWindow(&rt);
    m_child[nSel]->ShowWindow(SW_SHOW);
    }

变参函数

void Fun(int nCount, ...) {
    va_list va;
    va_start(va, nCount);
    // 循环读取变参参数
    for (int i=0;i<nCount;i++)
    {
        // 取int数
        int n = va_arg(va, int);
        char *p = va_arg(va, char*);
        printf("%d%s\n", n, p);
    }
    va_end(va);
}
int main()
{
    Fun(3, 12, "12", 34, "34", 56, "12345");
    Fun(2, 88,"34", 56, "12345");
    return 0;
}

TABLE控件的封装

  1. 前面几步:添加table控件,自定义table类,绑定table变量,准备子窗口,和前面的table控件使用一样
  2. 提供一个变参接口给使用该table控件的人用
    // 标题  对话框  对话框ID
    void CMyTab01::MyInsertItem(DWORD dwCount, ...)
    {
    va_list va;
    va_start(va, dwCount);
    m_dwCount = dwCount;
    for (DWORD i = 0 ; i< dwCount;i++)
    {
        TCHAR* pHeader = va_arg(va, TCHAR*);
        CDialogEx*pWnd = va_arg(va, CDialogEx*);
        UINT uID = va_arg(va, UINT);
        InsertItem(i, pHeader);
        pWnd->Create(uID, this);
        m_child[i] = pWnd;
    }
    va_end(va);
    // 把子窗口移动到和客户区一样大
    CRect rt = {};
    GetClientRect(&rt);
    rt.DeflateRect(0, 25, 0, 0);
    m_child[0]->MoveWindow(&rt);
    m_child[0]->ShowWindow(SW_SHOW);
    }
  3. 对话框调用该接口,实现table控件的子窗口个数动态增加
    m_tab.MyInsertItem(3,
        L"我是1号", new CMyDlgA01, IDD_DIALOG1,
        L"我是2号", new CMyDlgB01, IDD_DIALOG2,
        L"我是3号", new CMyDlgC01, IDD_DIALOG3);

以上是关于mfc 课堂笔记 day002的主要内容,如果未能解决你的问题,请参考以下文章

C++MFC编程笔记day06 MFC向导MFC绘图类使用

mysql学习笔记-day2

[code] PTA 胡凡算法笔记 DAY039

python_002days

Day 002:PAT练习--1021 个位数统计 (15 分)

HLS NGINX-RTMP [错误] 1281#0:* 58 hls:强制片段拆分:10.002 秒