悉野小楼

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

MFC学习 标签页与属性页及各常用控件使用

参考 http://blog.csdn.net/anye3000/article/details/6700023

CTabCtrl:

复制代码
BOOL CTabTestDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
    //  执行此操作
    SetIcon(m_hIcon, TRUE);            // 设置大图标
    SetIcon(m_hIcon, FALSE);        // 设置小图标

    // TODO: 在此添加额外的初始化代码
    m_TabCtrl.InsertItem(0, "表一");
    m_dlgTabl1.Create(IDD_DIALOG1, &m_TabCtrl);
    //设立页面在控件中的范围
    CRect rc;
    m_TabCtrl.GetClientRect(rc);
    rc.top += 20;
    rc.bottom -= 1;
    rc.left += 1;
    rc.right -= 1;
    m_dlgTabl1.MoveWindow(rc);
    m_dlgTabl1.ShowWindow(SW_SHOW);
    m_TabCtrl.InsertItem(1, "表二");
    m_dlgTabl2.Create(IDD_DIALOG2, &m_TabCtrl);
    m_dlgTabl2.MoveWindow(rc);
    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
复制代码

在点击标签时要增加事件

复制代码
void CTabTestDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
    // TODO: 在此添加控件通知处理程序代码
    
    switch(m_TabCtrl.GetCurSel())
    {
        case 0:
            {
                m_dlgTabl1.ShowWindow(SW_SHOW);
                m_dlgTabl2.ShowWindow(SW_HIDE);
                break;
            }
        case 1:
            {
                m_dlgTabl1.ShowWindow(SW_HIDE);
                m_dlgTabl2.ShowWindow(SW_SHOW);
                break;
            }
        default:
            m_dlgTabl1.ShowWindow(SW_SHOW);
            m_dlgTabl2.ShowWindow(SW_HIDE);

    }
    *pResult = 0;
}
复制代码

 

CPropSheet:

在设置器中添加几个PropertypePage, 分别建立类, 增加OnSetActive(必要)事件处理, OnWinzarNext事件处理

复制代码
BOOL PropPage2::OnSetActive()
{
    CPropertySheet* pSheet = (CPropertySheet*)GetParent();
    pSheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_NEXT);
    return CPropertyPage::OnSetActive();
}

LRESULT PropPage2::OnWizardNext()
{
    //Radio分组是以每个分组第一个radio设置属性group为true, 后面的radio不用设置, 都属于这个组, 
    //第二组的第一个radio也是设置group为true, 其它本组radrio不用设置group, 依次类推
    if(m_Sel1.GetCheck() == 0 && ((CButton*)GetDlgItem(IDC_RADIO2))->GetCheck() == 0 
        && ((CButton*)GetDlgItem(IDC_RADIO1))->GetCheck() == 0)
    {
        MessageBox("请选择数字1");
        return -1;
    }
    else if((((CButton*)GetDlgItem(IDC_RADIO4))->GetCheck() == 0) 
        && ((CButton*)GetDlgItem(IDC_RADIO5))->GetCheck() == 0)
    {
        MessageBox("请选择数字2");
        return -1;
    }
    return CPropertyPage::OnWizardNext();
}
复制代码

 

 

在类视图中右击添加一个类, 选择MFC类(不是普通类), 继承选择CPropertySheet, 添加几个PropertypePage派生类成员, PropSheet构造函数加入数据成员.

 

PropSheet::PropSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
    :CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
    AddPage(&m_PropPage1);
    AddPage(&m_PropPage2);
    AddPage(&m_PropPage3);
    AddPage(&m_PropPage4);
}

 常用控件使用在附件中. 包括单选, 复选按钮, 下拉列表, 进度条,CSpinButton(点了数字加减, 或滚动条移的那种按钮), 滑动条.

 本例源码下载

另附:孙鑫MFC讲义代码下载

posted on   悉野  阅读(1301)  评论(1编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示