BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
// return m_wndSplitter.Create(this,
// 2, 2, // TODO: adjust the number of rows, columns
// CSize(10, 10), // TODO: adjust the minimum pane size
// pContext); m_wndSplitter.CreateStatic( this, 2, 1 );
m_wndSplitter.CreateView( 0, 0, RUNTIME_CLASS( CMyForm ),
CSize( 0, 440 ), pContext );
m_wndSplitter.CreateView( 1, 0, RUNTIME_CLASS( CMyView ),
CSize( 0, 200 ), pContext );
m_wndSplitter.SetActivePane(1,0,NULL);
SetTimer(1,3000,NULL);
// pmyview = new CMyView; return true;}
上面是我将窗口分成两部分void CMyForm::OnDraw(CDC* pDC)
{
// TODO: Add your specialized code here and/or call the base class
RECT rect;
int i; int mx,my; //中间图标节点坐标
int width,lenth; //窗口长/高
// int ulinenum,dlinenum; //机器行数// int b1x,b1y,b1l; //黑线的定位信息
// int b2x,b2y,b2l;
// int uw,uh,mw,mh,dw,dh;
CBitmap bmpPlantUp;
CBitmap bmpPlantMid;
CBitmap bmpPlantDown;
CFont myfont; BITMAP bm;
BITMAP bmmid;
BITMAP bmdown; CDC dcMem;
CDC dcMemMid;
CDC dcMemdown;
CPen* pNewPenGreen,* pNewPenRed;
CPen* pblackpen;
pNewPenGreen=new CPen;
pNewPenRed=new CPen;
pblackpen=new CPen;
pNewPenRed->CreatePen(PS_SOLID,4,RGB(210,0,0));//红
pNewPenGreen->CreatePen(PS_SOLID,4,RGB(0,128,0));//绿
pblackpen->CreatePen(PS_SOLID,4,RGB(0,0,0));//黑
bmpPlantUp.LoadBitmap(IDB_PLANTUP);
bmpPlantUp.GetObject(sizeof(BITMAP),&bm);
uw = bm.bmWidth ;
uh = bm.bmHeight ;// dcMem.CreateCompatibleDC(pDC);
// CBitmap* pbmpOld=dcMem.SelectObject(&bmpPlantUp); bmpPlantMid.LoadBitmap(IDB_PLANTMID);
bmpPlantMid.GetObject(sizeof(BITMAP),&bmmid);
mw = bmmid.bmWidth ;
mh = bmmid.bmHeight ;// dcMemMid.CreateCompatibleDC(pDC);
// CBitmap* pbmpOldMid=dcMemMid.SelectObject(&bmpPlantMid); bmpPlantDown.LoadBitmap(IDB_PLANTDOWN);
bmpPlantDown.GetObject(sizeof(BITMAP),&bmdown);
dw = bmdown.bmWidth ;
dh = bmdown.bmHeight ;// dcMemdown.CreateCompatibleDC(pDC);
// CBitmap* pbmpOlddown=dcMemdown.SelectObject(&bmpPlantDown); GetClientRect(&rect);
width=rect.right-rect.left; // 长
lenth=rect.bottom-rect.top; // 高
// Lanum = vcc.LcNum ;
T2num = vcc.RtNum ; //获得机器行数
ulinenum = (Lanum -1)/ MacNumPerLine +1;
dlinenum = (T2num-1) / MacNumPerLine +1; //获得中心坐标
mx = width/2;
my = PMar+ulinenum*(UpLHigh+uh )+MdLHigh+ mh /2;
//两条黑线
b1y = PMar+ulinenum*(UpLHigh+uh );
// b1y=50;
if (1 == ulinenum ) //Lanum <= MacNumperLine 单行
{
b1x = mx- (( Lanum-1)* UpGInc) / 2;
b1l = (Lanum-1)* UpGInc;
}
else //多行
{
b1x = mx- (( MacNumPerLine-1)* UpGInc) / 2;
if (Lanum % MacNumPerLine)
b1l = (MacNumPerLine-1)* UpGInc+(ulinenum-2)*(UpGInc/(ulinenum));
else
b1l = (MacNumPerLine)* UpGInc-(UpGInc/ulinenum); }
b2y = PMar+ulinenum*(UpLHigh+uh )+2*MdLHigh+ mh;
// b2y=200;
if (1 == dlinenum ) //T2num <= MacNumperLine 单行
{
b2x = mx- ( (T2num-1)* DnGInc) / 2;
b2l = (T2num-1)* DnGInc;
}
else //多行
{
b2x = mx- (( MacNumPerLine-1)* DnGInc) / 2;
if (T2num % MacNumPerLine)
b2l = (MacNumPerLine-1)* DnGInc+(dlinenum-2)*(DnGInc/dlinenum);
else
b2l = (MacNumPerLine)* DnGInc-(DnGInc/dlinenum);
//b2l = (MacNumPerLine+1)* DnGInc-(DnGInc/dlinenum);
} pDC->SelectObject(pblackpen); pDC->MoveTo (b1x,b1y);
pDC->LineTo(b1x+b1l,b1y);
pDC->MoveTo (b2x,b2y);
pDC->LineTo(b2x+b2l,b2y);
//中间的两根黑线
pDC->MoveTo (mx,b1y);
pDC->LineTo(mx,b1y+MdLHigh);
pDC->MoveTo (mx,b2y);
pDC->LineTo(mx,b2y-MdLHigh); dcMemMid.CreateCompatibleDC(pDC);
CBitmap* pbmpOldMid=dcMemMid.SelectObject(&bmpPlantMid); pDC->BitBlt(mx-mw/2,my-mh/2,mw,mh,&dcMemMid,0,0,SRCAND);
dcMemMid.SelectObject(pbmpOldMid); myfont.CreateFont (24,0,0,0,FW_BOLD,FALSE,FALSE,0,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,FF_MODERN,"Arial");
pDC->SelectObject (&myfont);
int curx,cury;
dcMem.CreateCompatibleDC(pDC);
CBitmap* pbmpOld=dcMem.SelectObject(&bmpPlantUp); for (i=0;i<Lanum;i++)
{ if (lflag[i]) //green
{
pDC->SelectObject(pNewPenGreen);
pDC->SetTextColor(RGB(0,120,0));
} else {
pDC->SelectObject(pNewPenRed);
pDC->SetTextColor(RGB(210,0,0));
} curx = b1x+(i % MacNumPerLine)*UpGInc+(i/MacNumPerLine)*(UpGInc/ulinenum);
cury = b1y-UpLHigh-(i/MacNumPerLine)*(UpLHigh+uh);
pDC->MoveTo (curx,b1y);
pDC->LineTo(curx,cury);
pDC->BitBlt(curx-uw/2,cury-uh,uw,uh,&dcMem,0,0,SRCAND);
pDC->TextOut (curx-uw/2,cury-uh-20 ,(vcc.pLcList+i)->LcName );
}
dcMemdown.CreateCompatibleDC(pDC);
CBitmap* pbmpOlddown=dcMemdown.SelectObject(&bmpPlantDown); for (i=0;i<T2num;i++)
{ if (colorflag[i]) //green
{
pDC->SelectObject(pNewPenGreen);
pDC->SetTextColor(RGB(0,120,0));
} else {
pDC->SelectObject(pNewPenRed);
pDC->SetTextColor(RGB(210,0,0));
} curx = b2x+(i % MacNumPerLine)*DnGInc+(i/MacNumPerLine)*(DnGInc/dlinenum);
cury = b2y+DnLHigh+(i/MacNumPerLine)*(DnLHigh+dh);
pDC->MoveTo (curx,b2y);
pDC->LineTo(curx,cury);
pDC->BitBlt(curx-dw/2,cury,dw,dh,&dcMemdown,0,0,SRCAND);
pDC->TextOut (curx-dw/3,cury+dh+3 ,(vcc.pRtList +i)->peerName );
} /*
dcMem.SelectObject(pbmpOld);*/
delete pNewPenGreen;
delete pNewPenRed;
delete pblackpen;}
当我拖动划分2部分区域的分界线,当上部分FORM区域变小时出现了滚动条,但FORM中图的下部分没有全部显示出来,如何解决这个问题?谢谢?急!若没看懂我所讲的,我在线等待!
CCreateContext* pContext)
{
// return m_wndSplitter.Create(this,
// 2, 2, // TODO: adjust the number of rows, columns
// CSize(10, 10), // TODO: adjust the minimum pane size
// pContext); m_wndSplitter.CreateStatic( this, 2, 1 );
m_wndSplitter.CreateView( 0, 0, RUNTIME_CLASS( CMyForm ),
CSize( 0, 440 ), pContext );
m_wndSplitter.CreateView( 1, 0, RUNTIME_CLASS( CMyView ),
CSize( 0, 200 ), pContext );
m_wndSplitter.SetActivePane(1,0,NULL);
SetTimer(1,3000,NULL);
// pmyview = new CMyView; return true;}
上面是我将窗口分成两部分void CMyForm::OnDraw(CDC* pDC)
{
// TODO: Add your specialized code here and/or call the base class
RECT rect;
int i; int mx,my; //中间图标节点坐标
int width,lenth; //窗口长/高
// int ulinenum,dlinenum; //机器行数// int b1x,b1y,b1l; //黑线的定位信息
// int b2x,b2y,b2l;
// int uw,uh,mw,mh,dw,dh;
CBitmap bmpPlantUp;
CBitmap bmpPlantMid;
CBitmap bmpPlantDown;
CFont myfont; BITMAP bm;
BITMAP bmmid;
BITMAP bmdown; CDC dcMem;
CDC dcMemMid;
CDC dcMemdown;
CPen* pNewPenGreen,* pNewPenRed;
CPen* pblackpen;
pNewPenGreen=new CPen;
pNewPenRed=new CPen;
pblackpen=new CPen;
pNewPenRed->CreatePen(PS_SOLID,4,RGB(210,0,0));//红
pNewPenGreen->CreatePen(PS_SOLID,4,RGB(0,128,0));//绿
pblackpen->CreatePen(PS_SOLID,4,RGB(0,0,0));//黑
bmpPlantUp.LoadBitmap(IDB_PLANTUP);
bmpPlantUp.GetObject(sizeof(BITMAP),&bm);
uw = bm.bmWidth ;
uh = bm.bmHeight ;// dcMem.CreateCompatibleDC(pDC);
// CBitmap* pbmpOld=dcMem.SelectObject(&bmpPlantUp); bmpPlantMid.LoadBitmap(IDB_PLANTMID);
bmpPlantMid.GetObject(sizeof(BITMAP),&bmmid);
mw = bmmid.bmWidth ;
mh = bmmid.bmHeight ;// dcMemMid.CreateCompatibleDC(pDC);
// CBitmap* pbmpOldMid=dcMemMid.SelectObject(&bmpPlantMid); bmpPlantDown.LoadBitmap(IDB_PLANTDOWN);
bmpPlantDown.GetObject(sizeof(BITMAP),&bmdown);
dw = bmdown.bmWidth ;
dh = bmdown.bmHeight ;// dcMemdown.CreateCompatibleDC(pDC);
// CBitmap* pbmpOlddown=dcMemdown.SelectObject(&bmpPlantDown); GetClientRect(&rect);
width=rect.right-rect.left; // 长
lenth=rect.bottom-rect.top; // 高
// Lanum = vcc.LcNum ;
T2num = vcc.RtNum ; //获得机器行数
ulinenum = (Lanum -1)/ MacNumPerLine +1;
dlinenum = (T2num-1) / MacNumPerLine +1; //获得中心坐标
mx = width/2;
my = PMar+ulinenum*(UpLHigh+uh )+MdLHigh+ mh /2;
//两条黑线
b1y = PMar+ulinenum*(UpLHigh+uh );
// b1y=50;
if (1 == ulinenum ) //Lanum <= MacNumperLine 单行
{
b1x = mx- (( Lanum-1)* UpGInc) / 2;
b1l = (Lanum-1)* UpGInc;
}
else //多行
{
b1x = mx- (( MacNumPerLine-1)* UpGInc) / 2;
if (Lanum % MacNumPerLine)
b1l = (MacNumPerLine-1)* UpGInc+(ulinenum-2)*(UpGInc/(ulinenum));
else
b1l = (MacNumPerLine)* UpGInc-(UpGInc/ulinenum); }
b2y = PMar+ulinenum*(UpLHigh+uh )+2*MdLHigh+ mh;
// b2y=200;
if (1 == dlinenum ) //T2num <= MacNumperLine 单行
{
b2x = mx- ( (T2num-1)* DnGInc) / 2;
b2l = (T2num-1)* DnGInc;
}
else //多行
{
b2x = mx- (( MacNumPerLine-1)* DnGInc) / 2;
if (T2num % MacNumPerLine)
b2l = (MacNumPerLine-1)* DnGInc+(dlinenum-2)*(DnGInc/dlinenum);
else
b2l = (MacNumPerLine)* DnGInc-(DnGInc/dlinenum);
//b2l = (MacNumPerLine+1)* DnGInc-(DnGInc/dlinenum);
} pDC->SelectObject(pblackpen); pDC->MoveTo (b1x,b1y);
pDC->LineTo(b1x+b1l,b1y);
pDC->MoveTo (b2x,b2y);
pDC->LineTo(b2x+b2l,b2y);
//中间的两根黑线
pDC->MoveTo (mx,b1y);
pDC->LineTo(mx,b1y+MdLHigh);
pDC->MoveTo (mx,b2y);
pDC->LineTo(mx,b2y-MdLHigh); dcMemMid.CreateCompatibleDC(pDC);
CBitmap* pbmpOldMid=dcMemMid.SelectObject(&bmpPlantMid); pDC->BitBlt(mx-mw/2,my-mh/2,mw,mh,&dcMemMid,0,0,SRCAND);
dcMemMid.SelectObject(pbmpOldMid); myfont.CreateFont (24,0,0,0,FW_BOLD,FALSE,FALSE,0,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,FF_MODERN,"Arial");
pDC->SelectObject (&myfont);
int curx,cury;
dcMem.CreateCompatibleDC(pDC);
CBitmap* pbmpOld=dcMem.SelectObject(&bmpPlantUp); for (i=0;i<Lanum;i++)
{ if (lflag[i]) //green
{
pDC->SelectObject(pNewPenGreen);
pDC->SetTextColor(RGB(0,120,0));
} else {
pDC->SelectObject(pNewPenRed);
pDC->SetTextColor(RGB(210,0,0));
} curx = b1x+(i % MacNumPerLine)*UpGInc+(i/MacNumPerLine)*(UpGInc/ulinenum);
cury = b1y-UpLHigh-(i/MacNumPerLine)*(UpLHigh+uh);
pDC->MoveTo (curx,b1y);
pDC->LineTo(curx,cury);
pDC->BitBlt(curx-uw/2,cury-uh,uw,uh,&dcMem,0,0,SRCAND);
pDC->TextOut (curx-uw/2,cury-uh-20 ,(vcc.pLcList+i)->LcName );
}
dcMemdown.CreateCompatibleDC(pDC);
CBitmap* pbmpOlddown=dcMemdown.SelectObject(&bmpPlantDown); for (i=0;i<T2num;i++)
{ if (colorflag[i]) //green
{
pDC->SelectObject(pNewPenGreen);
pDC->SetTextColor(RGB(0,120,0));
} else {
pDC->SelectObject(pNewPenRed);
pDC->SetTextColor(RGB(210,0,0));
} curx = b2x+(i % MacNumPerLine)*DnGInc+(i/MacNumPerLine)*(DnGInc/dlinenum);
cury = b2y+DnLHigh+(i/MacNumPerLine)*(DnLHigh+dh);
pDC->MoveTo (curx,b2y);
pDC->LineTo(curx,cury);
pDC->BitBlt(curx-dw/2,cury,dw,dh,&dcMemdown,0,0,SRCAND);
pDC->TextOut (curx-dw/3,cury+dh+3 ,(vcc.pRtList +i)->peerName );
} /*
dcMem.SelectObject(pbmpOld);*/
delete pNewPenGreen;
delete pNewPenRed;
delete pblackpen;}
当我拖动划分2部分区域的分界线,当上部分FORM区域变小时出现了滚动条,但FORM中图的下部分没有全部显示出来,如何解决这个问题?谢谢?急!若没看懂我所讲的,我在线等待!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货