
②确定显示位置。可以在主对话框中加入一个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应该都会的。。。。。
哈,完了。。。。。。。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)