首先我用分隔条把两个视图分开,左边的是CFromView,右边的是CScrollView.
我在CFromView中创建了一个属性框,并在属性框中加载了两个属性页.然后在void CMyFormView::OnInitialUpdate()
中加入下面的代码:
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
CWnd* pwndPropSheetHolder = GetDlgItem(IDC_PLACEHOLDER);
m_pMyPropSheet = new CMyPropSheet(pwndPropSheetHolder);
if(!m_pMyPropSheet->Create(pwndPropSheetHolder,WS_CHILD|WS_VISIBLE,0))
{
delete m_pMyPropSheet;
m_pMyPropSheet = NULL;
return;
}
CRect rectTemp;
this->GetWindowRect(rectTemp);
pwndPropSheetHolder->SetWindowPos(NULL,0,0,rectTemp.Width(),rectTemp.Height()-100,0);
pwndPropSheetHolder->GetWindowRect(rectTemp);
m_pMyPropSheet->SetWindowPos(NULL,0,0,rectTemp.Width()-20,rectTemp.Height(),SWP_NOZORDER|SWP_NOACTIVATE);}
此时编译运行没有错误,但是不知道怎么看不到属性框右边的边界,很奇怪.然后我在CFormView中加入OnSize函数响应WM_SIZE信息..
void CMyFormView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CWnd* pwndPropSheetHolder = GetDlgItem(IDC_PLACEHOLDER);
CRect rectTemp;
this->GetWindowRect(rectTemp);
pwndPropSheetHolder->SetWindowPos(NULL,0,0,rectTemp.Width(),rectTemp.Height()-100,0);
pwndPropSheetHolder->GetWindowRect(rectTemp);
m_pMyPropSheet->SetWindowPos(NULL,0,0,rectTemp.Width()-20,rectTemp.Height(),SWP_NOZORDER|SWP_NOACTIVATE);
}
编译构件都没有问题,但是一运行就来问题了..
出现(关闭 调试)对话框.
我对OnSize函数在多视图中的运行机制不明白,请高手指点一下..有遇到过看不到属性框右边界的也告诉我一下原因^_^
我在CFromView中创建了一个属性框,并在属性框中加载了两个属性页.然后在void CMyFormView::OnInitialUpdate()
中加入下面的代码:
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
CWnd* pwndPropSheetHolder = GetDlgItem(IDC_PLACEHOLDER);
m_pMyPropSheet = new CMyPropSheet(pwndPropSheetHolder);
if(!m_pMyPropSheet->Create(pwndPropSheetHolder,WS_CHILD|WS_VISIBLE,0))
{
delete m_pMyPropSheet;
m_pMyPropSheet = NULL;
return;
}
CRect rectTemp;
this->GetWindowRect(rectTemp);
pwndPropSheetHolder->SetWindowPos(NULL,0,0,rectTemp.Width(),rectTemp.Height()-100,0);
pwndPropSheetHolder->GetWindowRect(rectTemp);
m_pMyPropSheet->SetWindowPos(NULL,0,0,rectTemp.Width()-20,rectTemp.Height(),SWP_NOZORDER|SWP_NOACTIVATE);}
此时编译运行没有错误,但是不知道怎么看不到属性框右边的边界,很奇怪.然后我在CFormView中加入OnSize函数响应WM_SIZE信息..
void CMyFormView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CWnd* pwndPropSheetHolder = GetDlgItem(IDC_PLACEHOLDER);
CRect rectTemp;
this->GetWindowRect(rectTemp);
pwndPropSheetHolder->SetWindowPos(NULL,0,0,rectTemp.Width(),rectTemp.Height()-100,0);
pwndPropSheetHolder->GetWindowRect(rectTemp);
m_pMyPropSheet->SetWindowPos(NULL,0,0,rectTemp.Width()-20,rectTemp.Height(),SWP_NOZORDER|SWP_NOACTIVATE);
}
编译构件都没有问题,但是一运行就来问题了..
出现(关闭 调试)对话框.
我对OnSize函数在多视图中的运行机制不明白,请高手指点一下..有遇到过看不到属性框右边界的也告诉我一下原因^_^
解决方案 »
- 谁知道CXimage中Dump函数是做什么用的,是不是将图片信息保存到二进制对象中
- 错误1 error C2440: “初始化”: 无法从“const GLfloat [2]”转换为“point2 ”
- 【请教】OnScroll的正确用法
- 字符串指针问题,看看这几句什么问题
- 请问各位:谁知道delphi的widestring对应vc里的哪种类型??????
- release版本OldLoadPicture出现异常,非常着急
- 该死的创天中文,搞得我得程序调试老有问题!
- 在sdk程序中,想使用CString, CFile等类, 该如何实现?
- 为什么我用dreamweaver时不能插入表格和描绘层?
- 我的WinSockets程序出错,错误代码是:10054,这是什么错误呢?
- GetWindowThreadProcessId只是获取创建窗口的线程ID,可是我是想获取进程ID,如何做呢?
- ShellExecute获取所调用程序的返回信息:)
原来是属性页比属性框大的缘故.
但是怎么样在程序中动态设置属性页的大小,
属性页其实就是一个对话框,在CPropertPage中我没看到初始化函数,是不是要放入CPropertySheet中初始化Page上的控件?
第一次,sheet还没有create出来。你需要判断一下他的句柄是否为非0.如果是0,就return.
比如我写
CRect rectTemp;
this->GetWindowRect(rectTemp);
m_MyPage1.MoveWindow(0,0,rectTemp.Width(),rectTemp.Height());
那第一个属性页就把整个属性框盖了,别的页全看不见了..我在void CMyFormView::OnSize(UINT nType, int cx, int cy)中加了
if(m_pMyPropSheet)
同样在执行的时候报错,跟原来情况一样^_^;
m_MyPage1.GetWindowRect(rectTemp);
m_MyPage1.GetParent()->ScreenToClient(rectTemp);
m_MyPage1.MoveWindow(rectTemp.left, rectTemp,rectTemp.Width()-10, rectTemp.Height()-10);
哪里有创建单文档多视图界面,并且响应OnSize()的例子??
解决这个问题是不是要重载CSplitterWnd类???