gpt4 book ai didi

c++ - 在 MFC 中绘制后更新显示

转载 作者:行者123 更新时间:2023-11-28 07:17:41 27 4
gpt4 key购买 nike

我成功绘制了 Van Koch 雪花,但绘制后它没有立即显示。我必须最大化、向下还原或移动窗 Eloquent 能显示它。 input 是一个带有“F”、“+”、“-”、“[”、“]”的字符串。

//VanKoch Koch Snowflake
CString VanKochSnowflake("F++F++F");
CString VanKochSnowflakeRule("F-F++F-F");

//alpha Van Kochk
double alphaVanKockSnowflake =0;
double alphaVanKockSnowflake1 =PI/3;

Line dt;
void DrawLine(DiemThuc &p,double alpha, double d)
{
DiemThuc pNew;
pNew.x=p.x+cos(alpha)*d;
pNew.y=p.y+sin(alpha)*d;
dt.Draw(p.x,p.y,pNew.x,pNew.y);
p.x=pNew.x;
p.y=pNew.y;
}
void DrawFractalString(CString str)
{

stack<double> Posx;
stack<double> Posy;
stack<double> Stacka;
for(int i=0;i<str.GetLength();i++)
{
switch (str[i])
{
case 'F':case'L':case'R':
DrawLine(p,alpha,d);break;
case '+':
alpha+=alpha1;break;
case '-':
alpha-=alpha1;break;
case '[':
{
Posx.push(p.x);
Posy.push(p.y);
Stacka.push(alpha);
}break;
case ']':
{
p.x=Posx.top();Posx.pop();
p.y=Posy.top();Posy.pop();
alpha=Stacka.top();Stacka.pop();
}break;
default:
break;
}

}

}
void Cbaitap1View::ThayTheChuoi()
{

for(int i=1;i<=n;i++)
{
CString new_str("");
for(int j=0;j<str.GetLength();j++)
{
sub = str[j];
if(sub =='F' && state!=4 && state!=5)
new_str += str_Rule;
else
if(sub=='L')
new_str+=str_Rule1;
else
if(sub=='R')
new_str+=str_Rule2;
else
new_str += sub;
}
str=new_str;
}

}

void Cbaitap1View::OnDraw(CDC* /*pDC*/)
{
Cbaitap1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
wglMakeCurrent(m_hDC,m_hRC);
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(1,1,1,0);
glColor3f(0,1,0);
glPointSize(1);
switch (state)
{
case 1:
{
n=D.SoN;
d=5;
str = VanKochSnowflake;
str_Rule = VanKochSnowflakeRule;
alpha = alphaVanKockSnowflake;
alpha1 = alphaVanKockSnowflake1;

ThayTheChuoi();
if(p.x!=0 && p.y!=0)
DrawFractalString(str);
}break;
default:
break;
}

glEnd();
glFlush();
SwapBuffers(::GetDC(GetSafeHwnd()));
wglMakeCurrent(NULL,NULL);

}

void Cbaitap1View::OnVedt()
{

D.DoModal();
state=1;

// TODO: Add your command handler code here
}

OnDraw 中我认为是错误的,但我无法修复它@@

最佳答案

您可能想在完成绘图后重绘窗口。

这是最小化和最大化时发生的情况。

你可以在这里阅读 abotu mfc 重绘: http://msdn.microsoft.com/en-us/library/0fdz8ey6(v=vs.90).aspx

如果您想尝试重绘您正在更改的控件,您可以在控件上调用 invalidate() ,它会重绘。

关于c++ - 在 MFC 中绘制后更新显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19974988/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com