OnSize之后有边框残影是怎么回事?

ocean1004 2011-10-24 03:30:39
对话框里有子控件,子控件随对话框放大缩小。在对话框的OnSize里调整子控件大小。

我在OnSize之后调整了子控件大小之后调Invalidate(),但是对话框的背景里还是有子控件调整大小之前的边框残影。
要怎么做?
...全文
183 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2011-11-19
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
czg1984 2011-10-26
  • 打赏
  • 举报
回复
你试试这样,将下面的代码
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);

}
用户 昵称 2011-10-26
  • 打赏
  • 举报
回复
在最后
Invalidate()
乡客2023 2011-10-26
  • 打赏
  • 举报
回复
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);
ocean1004 2011-10-26
  • 打赏
  • 举报
回复
上面三种方法都试过,不行。

[Quote=引用 3 楼 jennyvenus 的回复:]
在最后
Invalidate()
[/Quote]
。。。。。麻烦看一下提问
zgl7903 2011-10-24
  • 打赏
  • 举报
回复
GetParent()->Invalidate(TRUE);
wwzzz 2011-10-24
  • 打赏
  • 举报
回复
Invalidate()只是使窗口的客户区无效。可能没那么快,楼主可以试试UpdateWindow( ),这个是立刻更新重绘窗口

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧