int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CClientDC dc(this);
// TEXTMETRIC word;
// dc.GetTextMetrics(&word);//该处应该为指针
// CreateSolidCaret(word.tmMaxCharWidth/10,word.tmHeight);


CClientDC adc(this);
adc.TextOut(0,300,"这是一个失败的例子!");
bitmap.LoadBitmap(IDB_BITMAP1);
CreateCaret(&bitmap);  //需要使用指针
ShowCaret();

// TODO: Add your specialized creation code here

return 0;
}
窗口重绘会发生在什么时候呢,为什么这个语句adc.TextOut(0,300,"这是一个失败的例子!");一次都不会显示。

解决方案 »

  1.   

    这里是创建,又不是重绘。重绘在OnPaint,OnDraw之类的。到时会把这个TextOut的内容覆盖掉的
      

  2.   

    Dialog一般在OnPaint里,FormView一般在OnDraw里;
      

  3.   

    嘿嘿 OnDraw(CDC *pDC) 下 直接用传过来的pDC。
      

  4.   

    把你绘图的代码放到OnDraw函数中去
      

  5.   

    把你的代码放在OnPaint或OnDraw里,并且把adc.TextOut(0,300,"这是一个失败的例子!");
    放到加载BMP图像之后,以免被覆盖掉
      

  6.   

    我已经在ONDRAW里写了。
    只是不清楚这个地方为什么不能显示。
    谢谢各位了。
      

  7.   

    不要放在OnCreate()中, 这时候窗口还没有创建完成.
      

  8.   

    你说的可以,在更新窗口的时候就会重绘。
    比如你调用:Invalidate()函数的时候;
    ondraw只重绘view部分,就是一开始生成的白的部分,俗称客户区,工作区。工具栏菜单栏属于框架类。ondraw绘制的部分不但显示在屏幕上而且可以输出到打印机等其他输出设备上,onpaint是处理窗口在标准输出(显示器)重绘的。
    一:一般的ONPAINT是系统默认调用的,如果不重绘,给要重绘的窗口加上一句,mywin.ShowWindow(SW_HIDE);
    二:如果要在其他事件函数中强制重绘加 函数 InvalidateRect(&Rect)Invalidate()UpdateWindow()
    三:动态绘制,比如我点一个BUTTON开始绘图,但我窗口被覆盖刚才绘制的图像就消失了怎么办?
    四:MFC中主窗体先OnInitDialog(),然后调用其他窗口的Create方法调用Oncreate方法,Oncreate方法完成后,进行OnPaint方法。
    五:MFC中对窗口或者区域的操作都是通过CRect来是想的:如:
       CRect rectqx;
    GetDlgItem(IDC_STATIC_SPEEDVIEW)->GetWindowRect(&rectqx);
            ScreenToClient(rectqx);