您的位置:首页 > 编程语言

窗口切分代码。

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: