麻烦看一眼
本人有一程序,用VC6和DX写成,有关的代码如下所示,本意是在全屛模式下,在指定位置画36根红线,不料却发现过了一段时间后红线变成了黑线,不知是什么原因?
WinMain()函数中
LineState = 0;
SetTimer(hWnd,WM_TIMER,400,NULL);
WndProc()函数中
case WM_TIMER:
if (g_bActive)
{ LineState++;
if ( LineState >= 36 ) LineState=0;
}
break;
...
DisplayFrame()函数中
HPEN hpen = CreatePen(PS_SOLID, 3, RGB(255,0,0));
SelectObject(hdc, hpen);
int PosX, PosY;
switch(LineState%6)
{
case 0:
PosX = 125;
break;
case 1:
PosX = 225;
break;
case 2:
PosX = 325;
break;
case 3:
PosX = 425;
break;
case 4:
PosX = 525;
break;
case 5:
PosX = 625;
break;
}
switch(LineState/6)
{
case 0:
PosY = 25;
break;
case 1:
PosY = 125;
break;
case 2:
PosY = 225;
break;
case 3:
PosY = 325;
break;
case 4:
PosY = 425;
break;
case 5:
PosY = 525;
break;
}
MoveToEx(hdc, PosX+25, PosY+3, NULL);
LineTo(hdc, PosX+25, PosY+48);
pBack->ReleaseDC(hdc);
...
问题点数:20、回复次数:7Top
1 楼YangLin1ST(杨家枪法第六十七代传人)回复于 2003-01-17 17:46:46 得分 10
这个问题在于每隔一段时间,程序就会重新画一遍。每此都在上次的颜色上加重了颜色,你可以设置一下 绘图的 方式,设置成 覆盖 就可以了Top
2 楼steve_shun(steve)回复于 2003-01-17 21:56:04 得分 0
杨大哥,您能不能指点一下小弟具体该怎样改好吗?小弟是初级菜鸟,麻烦您给段代码.小弟改完后马上就结贴,谢谢Top
3 楼steve_shun(steve)回复于 2003-01-18 22:06:54 得分 0
自己UP一下Top
4 楼GPE(黑客虫)回复于 2003-01-20 09:22:25 得分 4
不能了解你的真正的错误所在,但是可以提出你的绘制代码有问题
你没有释放创建的画笔,没有选入选出的画笔,
我想问题可能出在这里。Top
5 楼steve_shun(steve)回复于 2003-01-21 11:26:49 得分 0
怎么样修改呢?Top
6 楼toldds(笑傲江湖)回复于 2003-01-25 11:34:44 得分 4
楼主连这么复杂算法都想的出来,实在是在下自叹不如啊。我想你是打算画个棋盘或则什么的吧?用2个for循环大约5行代码就可以搞定。再说说你的绘制问题吧:可以使用3种方式解决:
1.先把背景用Brush刷一遍,呵呵,会非常慢的哦
2.把开始画好的线条先用背景色画一遍,呵呵,比较块的作法
3.改用Brush画吧,呵呵
正常(比较"专业")做的方法是先画到一个图片中,再用BitBlt画,哪里要修改就在BackSurface中修改哪里吧Top
7 楼zzzl(不拉拉链)回复于 2003-01-26 15:37:56 得分 2
是啊,你先用"画图"程序画好,然后,把它读进来。Top




