怪问题!C++高手和界面高手请进 我定义了一个数组【200】,然后在OnPaint中利用该数组的数据画线,在DEBUG编译时没有问题,在Realease后中数据图形出现有几个数据变化,多次编译都在同一位置,(程序基于对话框) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Ariesman(超然) 代码,整个程序怕不小于5000行了吧,教我怎么贴 bluebohe(薄荷) 你把该数组的数据都正确赋值了?这个应该是赋值了的,不然怎么出来图形 头文件中 BYTE rxdata[200];初始化 for(BYTE i=0; i<200; i++) { rxdata[i] = (BYTE)(i/2); }作图void CDljcDlg::ReDrawP(void){ CClientDC pDC(this); CRect rect; GetClientRect(&rect); CBrush bBrush; LOGBRUSH logb; lpLogPen.lopnWidth = CPoint(2,2); //曲线 lpLogPen.lopnColor = RGB(255, 0, 0); lpLogPen.lopnStyle = PS_SOLID; pPen.CreatePenIndirect(&lpLogPen); pDC.SelectObject(&pPen); WORD bY; if(rxdata[0] < 1) rxdata[0] = 1; if(rxdata[0] > 105) rxdata[0] = 105; pDC.MoveTo(3, rxdata[0]*3+36); for(int i=1; i<200; i++) { if(rxdata[i] < 1) rxdata[i] = 1; if(rxdata[i] > 105) rxdata[i] = 105; bY = (WORD)(rxdata[i]*3+36); pDC.LineTo(3+3*i, bY); } pPen.DeleteObject(); }在Onpaint()中调用ReDrawP();rxdata在程序中有再次赋值的时候,但现在不赋值就出现如题的问题 很粗心地看了一下,感觉有几个地方做的不好1、lpLogPen.lopnWidth = CPoint(2,2); //曲线 lpLogPen.lopnColor = RGB(255, 0, 0); lpLogPen.lopnStyle = PS_SOLID; pPen.CreatePenIndirect(&lpLogPen);创建一个画笔不用如此麻烦2、pDC.SelectObject(&pPen);要注意保存以前的绘图环境3、pPen.DeleteObject();这个地方应该是恢复以前绘图环境。因为粗心,所以没看出问题的根本:) ahphone(阿丰) 怎样实现啊。半年多没做VC了,现在又重做,找不到资料了 pDC.SelectObject(&pPen);pPen.DeleteObject();几乎没见过这种使用办法,一般都是 CPen *pOldPen =pDC.SelectObject(&pPen);pDC.SelectObject(pOldPen); pDC.SelectObject(&pPen);pPen.DeleteObject();这种方法绝对不行,因为画笔已经被dc使用了,怎么能删除 kongyunzhongque(云雀) 假如要再一次创建,也是这样吗?我程序怎么老出问题我这样用的:Cpen pen;CPen *pOldPen;pen.createpOldPen = pDC.SelectObject(&pPen);.........pDC.SelectObject(pOldPen);pen.createpOldPen = pDC.SelectObject(&pPen);.........pDC.SelectObject(pOldPen);怎么不行啊 CPen *pOldPen = pDC.SelectObject(&pPen);//drawpDC.SelectObject(pOldPen); // 没有这行就pPen.DeleteObject();是不行的,因为pPen还在选 // 中状态pPen.DeleteObject(); Cpen pen;CPen *pOldPen;pen.createpOldPen = pDC.SelectObject(&pPen);.........pDC.SelectObject(pOldPen);pen.DeleteObject(); // **pen.createpOldPen = pDC.SelectObject(&pPen);.........pDC.SelectObject(pOldPen);pen.DeleteObject();// ** 呵呵,还是不行啊,现在debug都出错了 不过这只是消耗GDI资源,不会有“数据变化”啊?我有一点怀疑是你别的一个指针变量没有初始化,而导致它在运行中覆盖你BYTE rxdata[200]一部分。 终于解决了!还是这样引起的头文件:char *x;InitDialog(){x = new char[20];sprintf(x, "", ......);//这里出问题} 改进:Cpen pen;CPen *pOldPen;pen.createpOldPen = pDC.SelectObject(&pPen);.........pDC.SelectObject(pOldPen)->DeleteObject;//可以不要pen.DeleteObject(); // **pen.createpDC.SelectObject(&pPen);.........pDC.SelectObject(pOldPen)->DeleteObject;//pen.DeleteObject();// **可以不要这样的错误我也见过一般原因如下:1 堆栈溢出 可能局部变量太多2 指针操作错误3 sprintf函数的使用一定要注意 我在View文件中定义了HANDLE的变量,可是在App文件中引用的时候说该变量没有定义 图形界面问题-----求一个图片下载地址 请教GDI+填充圆的问题!! CTab 响应问题 和 Group的 RADIO Btn 问题?? VC++访问WebService命名空间的问题 我的应用程序想访问我的dll中定义的一个变量,怎么得不到值?请看。 !!!关于COM对象线程模型!!! 关于调用 动态库DLL的问题 ,请哪位大神帮看看,谢谢了! 菜鸟提问:奇怪,我怎么检测不到文件结束? 关于改变鼠标光标的问题 网页爬虫 new出现错误,请问如何解决?附Dr.Watson出错信息。
bluebohe(薄荷) 你把该数组的数据都正确赋值了?这个应该是赋值了的,不然怎么出来图形
BYTE rxdata[200];
初始化 for(BYTE i=0; i<200; i++)
{
rxdata[i] = (BYTE)(i/2);
}
作图
void CDljcDlg::ReDrawP(void)
{
CClientDC pDC(this);
CRect rect;
GetClientRect(&rect);
CBrush bBrush;
LOGBRUSH logb;
lpLogPen.lopnWidth = CPoint(2,2); //曲线
lpLogPen.lopnColor = RGB(255, 0, 0);
lpLogPen.lopnStyle = PS_SOLID;
pPen.CreatePenIndirect(&lpLogPen);
pDC.SelectObject(&pPen);
WORD bY;
if(rxdata[0] < 1)
rxdata[0] = 1;
if(rxdata[0] > 105)
rxdata[0] = 105;
pDC.MoveTo(3, rxdata[0]*3+36);
for(int i=1; i<200; i++)
{
if(rxdata[i] < 1)
rxdata[i] = 1;
if(rxdata[i] > 105)
rxdata[i] = 105;
bY = (WORD)(rxdata[i]*3+36);
pDC.LineTo(3+3*i, bY);
}
pPen.DeleteObject();
}
在Onpaint()中调用ReDrawP();
rxdata在程序中有再次赋值的时候,但现在不赋值就出现如题的问题
感觉有几个地方做的不好1、
lpLogPen.lopnWidth = CPoint(2,2); //曲线
lpLogPen.lopnColor = RGB(255, 0, 0);
lpLogPen.lopnStyle = PS_SOLID;
pPen.CreatePenIndirect(&lpLogPen);创建一个画笔不用如此麻烦2、
pDC.SelectObject(&pPen);
要注意保存以前的绘图环境3、
pPen.DeleteObject();
这个地方应该是恢复以前绘图环境。因为粗心,所以没看出问题的根本
:)
怎样实现啊。半年多没做VC了,现在又重做,找不到资料了
pPen.DeleteObject();几乎没见过这种使用办法,
一般都是 CPen *pOldPen =pDC.SelectObject(&pPen);
pDC.SelectObject(pOldPen);
pPen.DeleteObject();
这种方法绝对不行,因为画笔已经被dc使用了,怎么能删除
假如要再一次创建,也是这样吗?我程序怎么老出问题
我这样用的:
Cpen pen;
CPen *pOldPen;
pen.create
pOldPen = pDC.SelectObject(&pPen);
.........
pDC.SelectObject(pOldPen);
pen.create
pOldPen = pDC.SelectObject(&pPen);
.........
pDC.SelectObject(pOldPen);怎么不行啊
// 中状态pPen.DeleteObject();
CPen *pOldPen;
pen.create
pOldPen = pDC.SelectObject(&pPen);
.........
pDC.SelectObject(pOldPen);pen.DeleteObject(); // **pen.create
pOldPen = pDC.SelectObject(&pPen);
.........
pDC.SelectObject(pOldPen);
pen.DeleteObject();// **
头文件:char *x;InitDialog()
{
x = new char[20];
sprintf(x, "", ......);//这里出问题
}
Cpen pen;
CPen *pOldPen;
pen.create
pOldPen = pDC.SelectObject(&pPen);
.........
pDC.SelectObject(pOldPen)->DeleteObject;//可以不要pen.DeleteObject(); // **pen.create
pDC.SelectObject(&pPen);
.........
pDC.SelectObject(pOldPen)->DeleteObject;
//pen.DeleteObject();// **可以不要这样的错误我也见过一般原因如下:
1 堆栈溢出 可能局部变量太多
2 指针操作错误
3 sprintf函数的使用一定要注意