急急急!mfc中怎么在基于对话框的主界面中显示proppage属性页?最好有例子

急急急!mfc中怎么在基于对话框的主界面中显示proppage属性页?最好有例子,第1张

添加资源和变量。添加4个属性页资源,为每个页面添加一个类,每个类定义一个变量并放到主程序;每个类可以加入自身的方法属性。

②确定显示位置。可以在主对话框中加入一个CStatic控件,它只提供位置信息,之后就要被隐藏并且Disable掉;第一步中添加的变量在主程序初始化的时候进行new *** 作,位置信息由CStatic提供,父窗口可以设置为主对话框, *** 作完毕后所有的属性页都隐藏并且Disable。

③程序控制显示/隐藏。程序运行过程中控制各个页面的显示/隐藏和Enable/Disable。

挺简单,开始懒得这样去弄,想找一些更好的办法。最后还是用了下下策。如果进行一下封装,做成简单定制版的TabCtrl也是有可能的。

首先,程序本身没有简单的法识别图像上“汽车顶部”的位置,这种图像识别的功能,属于“模式识别学”范畴,是计算机科学中比较高深的一个学科,目前还没有简单的法实现(当然,使用现成的图像识别算法另说)。因此,你需要人工干预位置,比如说,点击鼠标或者拖动之类的。在点击鼠标定位之后,你有两种法实现你的需求:将之前隐藏的编辑框显示并移动到鼠标坐标位置,主要涉及函数ShowWindow、MoveWindow通过代码动态创建编辑框,大致代码如下:editT1=newCEdit()editT1->Create(ES_MULTILINE|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER,CRect(0,0,50,20),this,IDC_EDITT1)

对话框做主框架。

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应该都会的。。。。。

哈,完了。。。。。。。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7989935.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存