窗口切分代码。
2010-01-07 16:28
281 查看
CFormView 1/4
---------------------------
CFormView 3/4
CRect ClientRect;
GetClientRect(&ClientRect);
if(!m_wndSplitter.CreateStatic(this,2,1))
return FALSE;
if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CPliView),CSize(ClientRect.Width(),ClientRect.Height()/4),pContext))
return FALSE;
if(!m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CFormV),CSize(ClientRect.Width(),ClientRect.Height()/4*3),pContext))
return FALSE;
CFormView Width 1 Height 1/2
---------------------------------------------------
CFormView 1/2 1/2 | CFormView 1/2 1/2
CRect ClientRect;
GetClientRect(&ClientRect);
if(!m_wndSplitter.CreateStatic(this,2,1))
return FALSE;
if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CPliView),CSize(ClientRect.Width(),ClientRect.Height()/2),pContext))
return FALSE;
//
// if(!m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CFormV),CSize(ClientRect.Width(),ClientRect.Height()/4*3),pContext))
// return FALSE;
if (!m_wndSplitter2.CreateStatic(
&m_wndSplitter, // our parent window is the first splitter
1,2, // the new splitter is 2 rows, 1 column
WS_CHILD | WS_VISIBLE | WS_BORDER, // style, WS_BORDER is needed
m_wndSplitter.IdFromRowCol(1, 0)
// new splitter is in the first row, 2nd column of first splitter
))
{
TRACE0("Failed to create nested splitter/n");
return FALSE;
}
if (!m_wndSplitter2.CreateView(0, 0,
RUNTIME_CLASS(CFormV), CSize(ClientRect.Width()/2, ClientRect.Height()/2), pContext))
{
TRACE0("Failed to create second pane/n");
return FALSE;
}
if (!m_wndSplitter2.CreateView(0, 1,
RUNTIME_CLASS(CFormV), CSize(ClientRect.Width()/2, ClientRect.Height()/2), pContext))
{
TRACE0("Failed to create third pane/n");
return FALSE;
}
上面两个都按照我的思路来做了。可以当我再写第三个也就是
CFormView |CFormView
------------------------------
CFormView
时候上面的距离总是为零。不知道为何?
问题解决了。。。。
——————————————————————————————————
m_wndSplitter.CreateStatic(this,1,2);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CFormV),CSize(200,100),pContext);
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CFrameWnd),CSize(200,100),pContext);
m_wndSplitter2.CreateStatic(m_wndSplitter.GetPane(0,0),2,1);
m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CFormV),CSize(200,100),pContext);
m_wndSplitter2.CreateView(1,0,RUNTIME_CLASS(CFormV),CSize(200,100),pContext);
另外通过重载OnDrawSplitter与OnInvertTracker 可以改变分隔条的颜色。但是拖动的时候会出现图像重叠的情况,只适合锁定的情况下使用。
http://www.vckbase.com/document/viewdoc/?id=192里面还有适用于对话框切割的方法。
void CViewExSplitWnd::OnDrawSplitter(CDC* pDC, ESplitType nType, const CRect& rect)
{
// TODO: 在此添加专用代码和/或调用基类
if(pDC==NULL)
{
RedrawWindow(rect,NULL,RDW_INVALIDATE|RDW_NOCHILDREN);
return;
}
ASSERT_VALID(pDC);
CRect rc=rect;
switch(nType)
{
case splitBorder:
//重画分割窗口边界,使之为红色
pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0));
rc.InflateRect(-CX_BORDER,-CY_BORDER);
pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0));
return;
case splitBox:
pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0));
rc.InflateRect(-CX_BORDER,-CY_BORDER);
pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0));
rc.InflateRect(-CX_BORDER,-CY_BORDER);
pDC->FillSolidRect(rc,RGB(0,0,0));
pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0));
return;
case splitBar:
//重画分割条,使之为绿色
pDC->FillSolidRect(rc,RGB(255,255,255));
rc.InflateRect(-5,-5);
pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0));
return;
default:
ASSERT(FALSE);
}
pDC->FillSolidRect(rc,RGB(0,0,255));
CSplitterWnd::OnDrawSplitter(pDC, nType, rect);
}
void CViewExSplitWnd::OnInvertTracker(const CRect& rect)
{
// TODO: 在此添加专用代码和/或调用基类
ASSERT_VALID(this);
ASSERT(!rect.IsRectEmpty());
ASSERT((GetStyle()&WS_CLIPCHILDREN)==0);
CRect rc=rect;
rc.InflateRect(2,2);
CDC* pDC=GetDC();
CBrush* pBrush=CDC::GetHalftoneBrush();
HBRUSH hOldBrush=NULL;
if(pBrush!=NULL) hOldBrush=(HBRUSH)SelectObject(pDC->m_hDC,pBrush->m_hObject);
pDC->PatBlt(rc.left,rc.top,rc.Width(),rc.Height(),BLACKNESS);
if(hOldBrush!=NULL)
SelectObject(pDC->m_hDC,hOldBrush);
ReleaseDC(pDC);
CSplitterWnd::OnInvertTracker(rect);
}
1月11号:
如果想使用原来的View,可以使用如下的语句进行创建。
if(!m_wndSplitter.CreateView(0,0,pContext->m_pNewViewClass,CSize(130,50),pContext))
{
TRACE0("Failed to create first pane/n");
return FALSE;
}
---------------------------
CFormView 3/4
CRect ClientRect;
GetClientRect(&ClientRect);
if(!m_wndSplitter.CreateStatic(this,2,1))
return FALSE;
if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CPliView),CSize(ClientRect.Width(),ClientRect.Height()/4),pContext))
return FALSE;
if(!m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CFormV),CSize(ClientRect.Width(),ClientRect.Height()/4*3),pContext))
return FALSE;
CFormView Width 1 Height 1/2
---------------------------------------------------
CFormView 1/2 1/2 | CFormView 1/2 1/2
CRect ClientRect;
GetClientRect(&ClientRect);
if(!m_wndSplitter.CreateStatic(this,2,1))
return FALSE;
if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CPliView),CSize(ClientRect.Width(),ClientRect.Height()/2),pContext))
return FALSE;
//
// if(!m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CFormV),CSize(ClientRect.Width(),ClientRect.Height()/4*3),pContext))
// return FALSE;
if (!m_wndSplitter2.CreateStatic(
&m_wndSplitter, // our parent window is the first splitter
1,2, // the new splitter is 2 rows, 1 column
WS_CHILD | WS_VISIBLE | WS_BORDER, // style, WS_BORDER is needed
m_wndSplitter.IdFromRowCol(1, 0)
// new splitter is in the first row, 2nd column of first splitter
))
{
TRACE0("Failed to create nested splitter/n");
return FALSE;
}
if (!m_wndSplitter2.CreateView(0, 0,
RUNTIME_CLASS(CFormV), CSize(ClientRect.Width()/2, ClientRect.Height()/2), pContext))
{
TRACE0("Failed to create second pane/n");
return FALSE;
}
if (!m_wndSplitter2.CreateView(0, 1,
RUNTIME_CLASS(CFormV), CSize(ClientRect.Width()/2, ClientRect.Height()/2), pContext))
{
TRACE0("Failed to create third pane/n");
return FALSE;
}
上面两个都按照我的思路来做了。可以当我再写第三个也就是
CFormView |CFormView
------------------------------
CFormView
时候上面的距离总是为零。不知道为何?
问题解决了。。。。
——————————————————————————————————
m_wndSplitter.CreateStatic(this,1,2);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CFormV),CSize(200,100),pContext);
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CFrameWnd),CSize(200,100),pContext);
m_wndSplitter2.CreateStatic(m_wndSplitter.GetPane(0,0),2,1);
m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CFormV),CSize(200,100),pContext);
m_wndSplitter2.CreateView(1,0,RUNTIME_CLASS(CFormV),CSize(200,100),pContext);
另外通过重载OnDrawSplitter与OnInvertTracker 可以改变分隔条的颜色。但是拖动的时候会出现图像重叠的情况,只适合锁定的情况下使用。
http://www.vckbase.com/document/viewdoc/?id=192里面还有适用于对话框切割的方法。
void CViewExSplitWnd::OnDrawSplitter(CDC* pDC, ESplitType nType, const CRect& rect)
{
// TODO: 在此添加专用代码和/或调用基类
if(pDC==NULL)
{
RedrawWindow(rect,NULL,RDW_INVALIDATE|RDW_NOCHILDREN);
return;
}
ASSERT_VALID(pDC);
CRect rc=rect;
switch(nType)
{
case splitBorder:
//重画分割窗口边界,使之为红色
pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0));
rc.InflateRect(-CX_BORDER,-CY_BORDER);
pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0));
return;
case splitBox:
pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0));
rc.InflateRect(-CX_BORDER,-CY_BORDER);
pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0));
rc.InflateRect(-CX_BORDER,-CY_BORDER);
pDC->FillSolidRect(rc,RGB(0,0,0));
pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0));
return;
case splitBar:
//重画分割条,使之为绿色
pDC->FillSolidRect(rc,RGB(255,255,255));
rc.InflateRect(-5,-5);
pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0));
return;
default:
ASSERT(FALSE);
}
pDC->FillSolidRect(rc,RGB(0,0,255));
CSplitterWnd::OnDrawSplitter(pDC, nType, rect);
}
void CViewExSplitWnd::OnInvertTracker(const CRect& rect)
{
// TODO: 在此添加专用代码和/或调用基类
ASSERT_VALID(this);
ASSERT(!rect.IsRectEmpty());
ASSERT((GetStyle()&WS_CLIPCHILDREN)==0);
CRect rc=rect;
rc.InflateRect(2,2);
CDC* pDC=GetDC();
CBrush* pBrush=CDC::GetHalftoneBrush();
HBRUSH hOldBrush=NULL;
if(pBrush!=NULL) hOldBrush=(HBRUSH)SelectObject(pDC->m_hDC,pBrush->m_hObject);
pDC->PatBlt(rc.left,rc.top,rc.Width(),rc.Height(),BLACKNESS);
if(hOldBrush!=NULL)
SelectObject(pDC->m_hDC,hOldBrush);
ReleaseDC(pDC);
CSplitterWnd::OnInvertTracker(rect);
}
1月11号:
如果想使用原来的View,可以使用如下的语句进行创建。
if(!m_wndSplitter.CreateView(0,0,pContext->m_pNewViewClass,CSize(130,50),pContext))
{
TRACE0("Failed to create first pane/n");
return FALSE;
}
相关文章推荐
- 一些VC例子的代码--切分窗口
- VB6.0代码窗口不支持鼠标中键操作滚动条解决方法
- iframe里面的元素触发父窗口元素事件的jquery代码 转
- 微软实现的获取进程主窗口句柄代码
- vc6代码实现: 怎样判断一个点是否在一个窗口(或对话框或控件)内?
- windows 建立窗口的程序代码
- 网页页面浮动窗口示例代码(JavaScript 代码)——按钮
- 用CFrame生成空白窗口的代码
- javascript获得网页窗口实际大小的示例代码
- jQuery弹出窗口简单实现代码
- 静态切分窗口问题(error C2653: “CCSDI_2View”: 不是类或命名空间名称)
- 为什么控件的有些属性在代码中可用,但是在设计界面的属性窗口中就没有
- Qt 代码: 子窗口调用父窗口
- VB6.0代码窗口不支持鼠标中键操作滚动条解决方法
- VS2008中如何查看被智能感知窗口盖住的代码
- c# 列举所有窗口和子窗口(代码未整理)
- 关闭页面代码和弹出窗口,出现确定,取消按钮+执行
- 关于在右下脚弹出窗口javascript代码,并用ASP.NET在后台调用(原创)
- MFC 透明窗口两种代码对比
- Flex控制弹出窗口拖动范围示例代码