首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

OnSize之后有边框残影是咋回事

2012-03-11 
OnSize之后有边框残影是怎么回事?对话框里有子控件,子控件随对话框放大缩小。在对话框的OnSize里调整子控件

OnSize之后有边框残影是怎么回事?
对话框里有子控件,子控件随对话框放大缩小。在对话框的OnSize里调整子控件大小。

我在OnSize之后调整了子控件大小之后调Invalidate(),但是对话框的背景里还是有子控件调整大小之前的边框残影。
要怎么做?

[解决办法]
Invalidate()只是使窗口的客户区无效。可能没那么快,楼主可以试试UpdateWindow( ),这个是立刻更新重绘窗口
[解决办法]
GetParent()->Invalidate(TRUE);
[解决办法]
在最后
Invalidate()

[解决办法]
void CTimeCheckDatas::updateIDRect(CRect m_oldRect,CRect m_nowRect)
{
CWnd *pWnd; 
int idc[12]={IDC_STATIC_Da_bumenTree,IDC_STATIC_Da_shuakadatas,IDC_TREE_DataCheck,
IDC_LIST1,IDC_DATETIM_Da_Data,IDC_DATETIME_Da_time1,IDC_STATIC_Split,
IDC_DATETIME_Da_time2,IDC_BTN_Da_lastday,IDC_BTN_Da_nextday,IDC_BTN_Da_Outdatas,IDC_BTN_check};
int i,num = 12;

for(i=0;i<=num;i++)
{
pWnd = GetDlgItem(idc[i]);
if(pWnd)
{
CRect rect; //获取控件变化前的大小
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
int height = rect.Height();
rect.left = rect.left*m_nowRect.Width()/m_oldRect.Width();//调整控件大小
rect.right = rect.right*m_nowRect.Width()/m_oldRect.Width();
rect.top = rect.top*m_nowRect.Height()/m_oldRect.Height();
rect.bottom= rect.bottom*m_nowRect.Height()/m_oldRect.Height();
if(i >=6)
{
pWnd->MoveWindow(rect.left,rect.top,rect.Width(),height);//设置控件大小
}
else
{
pWnd->MoveWindow(rect);//设置控件大小
}

}
}
}



在用一个消息ONSIZI()调用
void CTimeCheckDatas::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

GetClientRect(&m_NowRect);

updateIDRect(m_OldRect,m_NowRect);

m_NowRect = m_OldRect;
}
在onintdialog()
GetclientRect(&OldRect);
这是我的项目中的相关代码,可以参考下,正常!!!

不知道是不是我遇到的这种情况:贴来给你参考下
重载OnCtrlColor()函数,目的把CStatic 控件设置成透明背景,
例如:
HBRUSH CXXXXX::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogBar::OnCtlColor(pDC, pWnd, nCtlColor);
 
if( nCtlColor == (IDC_STATIC_Dpt_List)))//可以直接用IDC_STATIC把所有的静态控件设为透明
{
pDC->SetBkMode(TRANSPARENT); //不用NULL_BRUSH,一般不会发生重叠
hbr = (HBRUSH)GetStockObject( NULL_BRUSH );
}
  
return hbr;
}

下列方法可以解决字体重叠现象:

CRect rect;
((CStatic*)GetDlgItem(IDC_STATIC_Dpt_List))->GetClientRect(&rect);
InvalidateRect(rect);

[解决办法]
你试试这样,将下面的代码
void CTimeCheckDatas::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

GetClientRect(&m_NowRect);

updateIDRect(m_OldRect,m_NowRect);

m_NowRect = m_OldRect;
}
改为

void CTimeCheckDatas::OnSize(UINT nType, int cx, int cy)
{

GetClientRect(&m_NowRect);

updateIDRect(m_OldRect,m_NowRect);

m_NowRect = m_OldRect;

CDialog::OnSize(nType, cx, cy);

}

热点排行