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

调用Invalidate出现奇怪有关问题

2012-02-20 
调用Invalidate出现奇怪问题!用vc6在做一个基于对话框的应用程序的时候出现这样一个问题:做的是一个下棋的

调用Invalidate出现奇怪问题!
用vc6在做一个基于对话框的应用程序的时候出现这样一个问题:做的是一个下棋的应用程序,所以呢,棋盘和棋子都是画上去的,背景用了一幅图片.我已经在OnPaint里面将画棋子的程序实现了。现在的情况是,我在别的地方,比如一个菜单的响应函数中调用Invalidate();UpdateWindow();之后就只有背景图片,棋子并没有画出来,但是如果这时候我的窗体被其他窗体遮挡了一下之后,它就会出现棋子了,就恢复正常了,不知道为什么?
因为程序比较大,不方便贴源码,请大家帮帮忙!谢谢了!

[解决办法]
代码看不出有什么问题。实在不行改成这样试下
void CDotsAndBoxesDlg::OnPaint() 
{
CPaintDC dc(this); // device context for painting
if (IsIconic())
{
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
{
CDialog::OnPaint();
}
//重画棋盘
CPen pen(PS_SOLID,10,RGB(0,0,0));
CPen* pOldpen=dc.SelectObject(&pen);
for(int i=0;i<rowDots;i++)
{
for(int j=0;j<rowDots;j++)
{
dc.MoveTo(pPointArray[i][j]);//pPointArray是保存点的坐标的数组
dc.LineTo(pPointArray[i][j]);
}
}
dc.SelectObject(pOldpen);
}
[解决办法]
一个严重问题:在OnPaint函数中,你必须用CPaintDC dc(this)提供给你的DC,不得去GetDC,因为WM_PAINT需要控制绘图区域,普通的DC不行

热点排行