在VS环境下,用C++实现清除GDI+产生的图形
在VS环境下,用C++实现清除GDI+产生的图形我是新手,刚使用GDI+,右边的三个输入x,y,和旋转角度。用vb可以清除掉之前产生的图形,但是c++里面我还没有找到可以...
在VS环境下,用C++实现清除GDI+产生的图形
我是新手,刚使用GDI+,右边的三个输入x,y,和旋转角度。用vb可以清除掉之前产生的图形,但是c++里面我还没有找到可以清除的语句。
void Cc图形练习Dlg::OnBnClickedButton1()
{
//system("cls");
//_clean();
Graphics graphics(this->m_hWnd);
CString str1;
CString str2;
CString str3;
int i1;
int i2;
int i3;
GetDlgItem(IDC_EDIT1)->GetWindowText(str1);
GetDlgItem(IDC_EDIT2)->GetWindowText(str2);
GetDlgItem(IDC_EDIT3)->GetWindowText(str3);
i1=_ttoi(str1);
i2=_ttoi(str2);
i3=_ttoi(str3);
Pen greenPen(Color(255,0,255,0),3);
graphics.RotateTransform(i3);
graphics.DrawRectangle(&greenPen,i1,i2,100,50);
}
代码如上。请大神指点。 展开
我是新手,刚使用GDI+,右边的三个输入x,y,和旋转角度。用vb可以清除掉之前产生的图形,但是c++里面我还没有找到可以清除的语句。
void Cc图形练习Dlg::OnBnClickedButton1()
{
//system("cls");
//_clean();
Graphics graphics(this->m_hWnd);
CString str1;
CString str2;
CString str3;
int i1;
int i2;
int i3;
GetDlgItem(IDC_EDIT1)->GetWindowText(str1);
GetDlgItem(IDC_EDIT2)->GetWindowText(str2);
GetDlgItem(IDC_EDIT3)->GetWindowText(str3);
i1=_ttoi(str1);
i2=_ttoi(str2);
i3=_ttoi(str3);
Pen greenPen(Color(255,0,255,0),3);
graphics.RotateTransform(i3);
graphics.DrawRectangle(&greenPen,i1,i2,100,50);
}
代码如上。请大神指点。 展开
2个回答
展开全部
InvalidateRect(NULL);
MFC里应该是这样写。这代码会让windows把当前窗口标记为需要重绘,然后就会重新画一遍窗口,你后面自己画上去的东西就没了
MFC里应该是这样写。这代码会让windows把当前窗口标记为需要重绘,然后就会重新画一遍窗口,你后面自己画上去的东西就没了
追问
已经很好的实现了这个功能。但是InvalidateRect(NULL);应该放在哪里,才会让第二次点击的时候直接清除上一次的图形。而不是重新设置一个按钮。
追答
……才发现居然是点按钮的那个里面绘图。这样的话就不能用InvalidateRect了。
你可以获取画窗口背景用的Brush然后画一个填充矩形来填充整个窗口。
不会获取的话也可以创建一个颜色一样的Brush来填充
(我自己的思路可能比较麻烦,GetClassName获取窗口的类名,GetClassInfo获取窗口类信息,里面有一个hbrBackground就是画窗口背景用的Brush
2015-01-29
展开全部
重画就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询