读书人

对话框部分遮挡后重绘,该怎么解决

发布时间: 2012-01-13 22:43:30 作者: rapoo

对话框部分遮挡后重绘
程序是基于对话框的,就一个无标题栏的主对话框,初始化为:SetWindowPos(NULL, 10, 10, 672, 294, SWP_NOZORDER | SWP_NOMOVE);
我在WM_PAINT消息下绘制一个方框,方框是7行5列里面有31个小格子,每个格子里面填充汉字。现在的问题是如果窗体的一部分被遮挡后,那部分的字就消失了,画的格子线还在。请问大哥们,我该怎么重绘窗体,让字也不消失。程序如下:
void CDialogTestDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{


CPaintDC dc(this);
for (int i = 0; i < 6; i++)//垂直线
{
int x = i*32+5;
if (i < 2)
{
dc.MoveTo(x, 68);
dc.LineTo(x, 278);
}
dc.MoveTo(x, 68);
dc.LineTo(x, 248);
}
for (i = 0; i < 7; i++)//水平线
{
int y = i*30 + 68;
dc.MoveTo(5, y);
dc.LineTo(165, y);
}
dc.MoveTo(5, 278);
for (i = 0; i < 7; i++)
{
int y = 30*i + 68;
for (int j = 0; j < 5; j++)
{
int x = 32*j + 5;
CString strText;
m_rcLocation[i][j].SetRect(x, y, x+32, y+30);//设置每个省简称方框的坐标
if (m_strLocation.GetLength() > 0)
{
strText=m_strLocation.Left(2);
m_strLocation.Delete(0,2);
dc.DrawText(strText, m_rcLocation[i][j], DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}
}
}
UpdateData(FALSE);
ReleaseDC(&dc);
CDialog::OnPaint();
}
}
这只是程序的部分,程序没有问题,就是把各省的简称填充到表格里面。
m_strLocation= "鄂京津沪渝冀晋辽吉黑苏浙皖闽赣鲁豫湘粤琼川贵云陕甘青藏桂蒙宁新 ";
m_rcLocation[7][5]是CRect类的对象,现在的问题是窗体一被遮挡这部分的字就消失了,方框还是能看见的。我该怎么重绘呢?大哥们帮帮忙谢谢!

[解决办法]
UpdateData(FALSE);这个最好不要放在OnPaint里;
//ReleaseDC(&dc);不需要
//CDialog::OnPaint();注释掉

你的问题像是在if (m_strLocation.GetLength() > 0)循环里面将m_strLocation清空了,这样刷新一次后当然不会再绘制里面的内容。

数据的修改处理不要放在OnPaint中,因为刷新是随时都可能发生的,这样你就不能控制数据。
[解决办法]
m_strLocation.Delete(0,2);问题再这,重绘的时候m_strLocation里面什么都没有了.
if (m_strLocation.GetLength() > =2*(i*5+j))
{
strText=m_strLocation.Mid(2*(i*5+j),2);
// m_strLocation.Delete(0,2);
dc.DrawText(strText, m_rcLocation[i][j], DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}}

读书人网 >VC/MFC

热点推荐