怎样用MFC基于对话框的属性表单,属性页作为软件界面,一个属性表单包含多个属性页相当于MFC中的选型卡功能

类似于这样的界面,不用TAB控件,而是由一个属性表单包含多个属性页完成,新手给个例子啊... 类似于这样的界面,不用TAB控件,而是由一个属性表单包含多个属性页完成,新手 给个例子啊 展开
 我来答
ahcc08
推荐于2017-12-16 · 知道合伙人软件行家
ahcc08
知道合伙人软件行家
采纳数:11853 获赞数:51934
拥有丰富的软件开发经验。

向TA提问 私信TA
展开全部
对话框做主框架。
1,创建Dialog Based Appcation Exe with MFC wizard
2,添加资源Large Property Page 一个,后按住CTRL点击它并拖动,重复三次这样就得到了三个Large Property Page
    保持默认的ID。
3,用Wizard 以PAGE3作为模板,生成我们的嵌套的CMyPage,它派生自CPropertyPage。
4,CPropertyPage 类添加4个成员变量:
    CPropertyPage m_page1;
    CPropertyPage m_page2;
    CPropertyPage m_page3;
   CPropertySheet m_sheet;
5,CPropertyPage 类添加消息响应:WM_CREATE WM_SIZE,并添加如下code:


int CMyPage::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
    if (CPropertyPage::OnCreate(lpCreateStruct) == -1)
        return -1;
    
    // TODO: Add your specialized creation code here
    m_page1.Construct(IDD_PROPPAGE_LARGE);
    m_page2.Construct(IDD_PROPPAGE_LARGE1);
    m_page3.Construct(IDD_PROPPAGE_LARGE2);
    m_sheet.Construct("SomeInfo",this);
    m_sheet.AddPage(&m_page1);
    m_sheet.AddPage(&m_page2);
    m_sheet.AddPage(&m_page3);
    
    m_sheet.Create(this,WS_CHILD | WS_VISIBLE);
    return 0;
}

void CMyPage::OnSize(UINT nType, int cx, int cy) 
{
    CPropertyPage::OnSize(nType, cx, cy);
    
    // TODO: Add your message handler code here
    // TODO: Add your message handler code here
    CRect rc;
    GetWindowRect(rc);
    ScreenToClient(rc);
    rc.InflateRect(0,5,0,0);
    m_sheet.SetWindowPos(&wndTop,rc.left,rc.top,rc.right,rc.bottom,NULL);
    // TODO: Add your message handler code here
    
}
5,处理对话框类:
1》添加菜单资源,IDM_MENU1 ,右键设置属性,Minimize Maximize 打上勾,菜单设为以上菜单。
2》添加成员:
    CPropertyPage m_page1;
    CPropertyPage m_page2;
    CPropertyPage m_page3;
    CMyPage m_MyPage;
    CPropertySheet m_sheet;
别忘了#include“MyPage.h"...哈哈。。。。、
3》添加消息响应:WM_CREATE WM_SIZE,并添加如下code:

int CDialog_PropertyDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
    if (CDialog::OnCreate(lpCreateStruct) == -1)
        return -1;
    
    // TODO: Add your specialized creation code here
    m_page1.Construct(IDD_PROPPAGE_LARGE);
    m_page2.Construct(IDD_PROPPAGE_LARGE1);
    m_page3.Construct(IDD_PROPPAGE_LARGE2);
    m_MyPage.Construct(IDD_PROPPAGE_LARGE3);
    m_sheet.Construct("SomeInfo",this);
    m_sheet.AddPage(&m_page1);
    m_sheet.AddPage(&m_page2);
    m_sheet.AddPage(&m_page3);
    m_sheet.AddPage(&m_MyPage);
    m_sheet.Create(this,WS_CHILD | WS_VISIBLE);
    
    return 0;
}

void CDialog_PropertyDlg::OnSize(UINT nType, int cx, int cy) 
{
    CDialog::OnSize(nType, cx, cy);
    
    // TODO: Add your message handler code here
    
    CRect rc;
    GetClientRect(rc);
/*    GetWindowRect(rc);
    ScreenToClient(rc);*/
    rc.InflateRect(0,5,0,0);
        //    m_edit.SetWindowPos(&wndTop,rc.left,rc.top,rc.right,rc.bottom,NULL);
    m_sheet.SetWindowPos(&wndTop,rc.left,rc.top,rc.right,rc.bottom,NULL);
}
好了截止现在,一个嵌套的属性表框架做好了,效果如下:


记得把属性页和对话框拉大一点噢!!!
美化的话我就不再废话了。。。至于那个ListCtrl,看一下MSDN应该都会的。。。。。
哈,完了。。。。。。。

追问
大神辛苦啊 这是你自己写的例子?有资料的话,给个链接,谢谢
追答
网上资料很多
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式