zoukankan      html  css  js  c++  java
  • 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讲义代码下载

  • 相关阅读:
    SQLite-SQLiteDatabase 数据库实例练习
    全局配置一个ajax的错误监控
    文件上传&&验证文件格式
    CSS3 resize 属性
    select change()
    window.location.Reload()和window.location.href 区别
    条件检索
    jQuery $.ajax传递数组的traditional参数传递必须true 对象的序列化
    jquery中attr方法和prop方法的区别
    resize
  • 原文地址:https://www.cnblogs.com/barrysgy/p/3197861.html
Copyright © 2011-2022 走看看