有个静态文本框控件 ID在CFormView窗口中,我用
GetDlgItem(ID)->GetWindowRect(cr[i][j]);这句得到该ID的CRect,
我用鼠标点中它,就给这ID的四边画上直线,相当于给它的边框着色。
而当我拖动CFormView窗口的垂直滚动条(由于窗口较长)时,控件自然隐藏,当把控件拖出来的时候,此时,窗口会调用OnPaint这个函数来刷新屏幕,但同时,之前用于着色的边框线条也被抹去了,现在我想留下那些线条,但不知怎样弄。我重载过OnPaint函数,但当拖动滚动条时,那着色框也会跟着走,而不是随着控件的隐藏而隐藏,也不会随着控件的出现而出现。请问各位有什么建议吗?
void
CMyProjectView::OnPaint()
{
CPaintDC dc(this);
for(int i=0;i<30;i++)
{
for(int j=0;j<8;j++)
{
if(DisplayData::allbn[i][j]==1)
refreshBTFrame(i,j);
}
}
}
这是我重载的OnPaint函数,根据鼠标是否在框内点击过而画边框
GetDlgItem(ID)->GetWindowRect(cr[i][j]);这句得到该ID的CRect,
我用鼠标点中它,就给这ID的四边画上直线,相当于给它的边框着色。
而当我拖动CFormView窗口的垂直滚动条(由于窗口较长)时,控件自然隐藏,当把控件拖出来的时候,此时,窗口会调用OnPaint这个函数来刷新屏幕,但同时,之前用于着色的边框线条也被抹去了,现在我想留下那些线条,但不知怎样弄。我重载过OnPaint函数,但当拖动滚动条时,那着色框也会跟着走,而不是随着控件的隐藏而隐藏,也不会随着控件的出现而出现。请问各位有什么建议吗?
void
CMyProjectView::OnPaint()
{
CPaintDC dc(this);
for(int i=0;i<30;i++)
{
for(int j=0;j<8;j++)
{
if(DisplayData::allbn[i][j]==1)
refreshBTFrame(i,j);
}
}
}
这是我重载的OnPaint函数,根据鼠标是否在框内点击过而画边框
CBrush brush;
CPen pen;
pen.CreatePen(PS_SOLID,4,RGB(249,231,35));
CDC *pdc=this->GetDC();
pdc->SelectObject(pen);
CRect rectClient,treerect;
CRgn rgn1,rgn2[30][8],treergn,rgn3[30][8],rgn4[30][8],rgn5[30][8]; GetClientRect(rectClient);
rgn1.CreateRectRgnIndirect(rectClient); GetDlgItem(IDC_TREE_IP)->GetClientRect(treerect);
treergn.CreateRectRgnIndirect(treerect);
rgn1.CombineRgn(&rgn1,&treergn,RGN_XOR);
for(int i=0;i<30;i++)
{
for(int j=0;j<8;j++)
{
ID=10000+(i+1)*10+(j+1);
GetDlgItem(ID)->GetWindowRect(cr[i][j]);
sid=10000+ID;
GetDlgItem(sid)->GetWindowRect(scr[i][j]); cr[i][j].left-=6;cr[i][j].top-=77;cr[i][j].right-=6;cr[i][j].bottom-=77;
rgn2[i][j].CreateRectRgnIndirect(cr[i][j]);
scr[i][j].left-=6;scr[i][j].top-=77;scr[i][j].right-=6;scr[i][j].bottom-=77;
rgn3[i][j].CreateRectRgnIndirect(scr[i][j]);
rgn2[i][j].CombineRgn(&rgn2[i][j],&rgn3[i][j],RGN_OR);
rgn1.CombineRgn(&rgn1,&rgn2[i][j],RGN_DIFF); if(point.x>cr[i][j].left+6&&point.x<cr[i][j].right+6&&point.y>cr[i][j].top+77&&point.y<cr[i][j].bottom+77)
{
if(CMyProjectApp::statue[i]==1&&GetDlgItem(ID)->IsWindowVisible())
{
DisplayData::allbn[i][j]=1;
ii=i;
jj=j;
} }
}
}
brush.CreateSolidBrush(RGB(119,159,213));
pdc->FillRgn(&rgn1,&brush);
brush.DeleteObject();
refreshBTFrame(ii,jj);
CFormView::OnLButtonDown(nFlags, point);
//////////////////////////////////////////////////////////////画边框的代码//////////////////////
void
CMyProjectView::refreshBTFrame(int m_num, int b_num)
{
CPen pen;
pen.CreatePen(PS_SOLID,4,RGB(249,231,35));
CDC *pdc=this->GetDC();
pdc->SelectObject(pen);
pdc->MoveTo( cr[m_num][b_num].left-2, cr[m_num][b_num].top-4);
pdc->LineTo(scr[m_num][b_num].left-2, cr[m_num][b_num].top-4);
pdc->MoveTo(scr[m_num][b_num].right+2,cr[m_num][b_num].top-4);
pdc->LineTo( cr[m_num][b_num].right+2,cr[m_num][b_num].top-4);
pdc->LineTo( cr[m_num][b_num].right+2,cr[m_num][b_num].bottom+4);
pdc->LineTo(scr[m_num][b_num].right+2,cr[m_num][b_num].bottom+4);
pdc->MoveTo(scr[m_num][b_num].left-2, cr[m_num][b_num].bottom+4);
pdc->LineTo( cr[m_num][b_num].left-2, cr[m_num][b_num].bottom+4);
pdc->LineTo( cr[m_num][b_num].left-2, cr[m_num][b_num].top-4);
ReleaseDC(pdc);
}
::GetWindowRect(::GetDlgItem(m_hWnd,IDC_EDIT),&rect);
::Rectangle(::GetDlgItem(m_hWnd,IDC_EDIT)),rect.left,rect.top,rect.right,rect.bottom);
这样就可以给文本框控件加边框边框。