我的CView里面有这么一段代码,执行的时候出问题的几率很高,有一半情况显示正常,另外一半情况是显示文本有问题,文本1-文本7只显示部分,文本1、文本2、文本3后面的不显示,或者只显示文本1,后面的不显示,但是我打出的结果:所有pdc地址都没有变化,drawtext结果返回也正常,就是显示有问题,如能解决,另赠分500,请高人解答代码如下: int startx=(m_innerRect.Width() - WIDTH_OF_WAITERBK) / 2 + WIDTH_OF_LEFT;
int starty=(m_innerRect.Height() - HEIGHT_OF_WAITERBK) / 2 + HEIGHT_OF_TOP;
CFont newFont,*oldFont;
newFont.CreatePointFont(100,"仿宋体",NULL);
oldFont=pDC->SelectObject(&newFont);
//rys 2008-1-2 写当前报名人数
CRect  cRect;
cRect.SetRect(startx+158,starty+40,startx+184,starty+56);
pDC->SetTextColor(RGB(0,0,0));
pDC->SetBkMode(TRANSPARENT);
CString szTemp;
nt = pDC->DrawText("文本1", &cRect, DT_CENTER);
sz.Format("%x / %x / %d", pDC, &pDC, nt);
ShowMsg(sz); cRect.SetRect(startx+96,starty+88,startx+180,starty+114);
nt = pDC->DrawText("文本2", &cRect, DT_CENTER);
sz.Format("%x / %x / %d", pDC, &pDC, nt);
ShowMsg(sz); cRect.SetRect(startx+96,starty+116,startx+180,starty+140);
nt = pDC->DrawText("文本3", &cRect, DT_CENTER);
sz.Format("%x / %x / %d", pDC, &pDC, nt);
ShowMsg(sz); szTemp.Format("%d人", m_MatchInfo.nMatchTotalPlayerNum);
cRect.SetRect(startx+96,starty+144,startx+180,starty+166);
nt = pDC->DrawText("文本4", &cRect, DT_CENTER);
sz.Format("%x / %x / %d", pDC, &pDC, nt);
ShowMsg(sz); cRect.SetRect(startx+278,starty+88,startx+368,starty+114);
nt = pDC->DrawText("文本5", &cRect, DT_CENTER);
sz.Format("%x / %x / %d", pDC, &pDC, nt);
ShowMsg(sz); cRect.SetRect(startx+278,starty+116,startx+368,starty+140);
nt = pDC->DrawText("文本6", &cRect, DT_CENTER);
sz.Format("%x / %x / %d", pDC, &pDC, nt);
ShowMsg(sz); cRect.SetRect(startx+278,starty+144,startx+368,starty+166);
nt = pDC->DrawText("文本7", &cRect, DT_CENTER);
sz.Format("%x / %x / %d", pDC, &pDC, nt);
ShowMsg(sz);

解决方案 »

  1.   

    其实代码很简单,不过这么点代码大家没法看出问题:1.把m_innerRect是ClinetRect吗?
    2.程序中用到的几个宏都是多少?
      

  2.   

    不是在OnPaint里的,另外画的有时显示:
    文本1
    文本2
    文本3
    文本4有时只显示
    文本1
    文本2有时全部能显示,很奇怪
      

  3.   

    还有个伴生问题,就是当drawtext出现问题的时候,所有其他的画图函数也不能正常运行了,画不出图来
      

  4.   

    你只画了一次么? 是不是画了以后有其它窗口挡住过一下, 从而使部分画面无效了?? 把代码写到OnDraw里面试试..
      

  5.   

    绘制代码都放到绘制消息(如WM_PAINT/WM_DRAW等)响应函数里,不要放到外面,否则很容易丢失
      

  6.   

    jameshooo :
       很容易丢失是什么意思?什么原因会让所有画图函数失效?
      

  7.   

    意思就是图像在被别的窗体覆盖了一下后, 原有的图像会被擦除, 当覆盖的窗体移开后, 你绘图的窗体会自动重画, 所以你必须把相关绘图的代码写在OnDraw中让窗体重画..
      

  8.   

    oldFont=pDC-> SelectObject(&newFont);后面有没有
    pDC->SelectObject(oldFont);
    newFont.DeleteObject();