我想在dialog的static控件中画个图,但是就是没有显示 dialog ID:IDC_FZ1 
static ID:IDC_FZ1_STATIC 
dialog 的类是Fz1 代码如下: Fz1.h 中: CDC* pDC; 
CWnd* pWnd; 
virtual void OnPaint(); Fz1.cpp 中: void Fz1::OnPaint() 

    
    pWnd = GetDlgItem(IDC_FZ1_STATIC); 
    pDC = pWnd->GetDC();     pWnd->UpdateWindow(); 
    pDC->SelectStockObject(BLACK_BRUSH); 
    pDC->Rectangle(0, 0, 10, 10);      pWnd->ReleaseDC(pDC); 
    pWnd->Invalidate(); } 请高手帮我看看,这个就是不显示画的图.谢谢各位!

解决方案 »

  1.   

    看你给出的 函数 定义 就不怎么对啊    如果是自己对话框程序的话  不会是 Fz1::吧??应该是Fz1Dlg::吧 ??呵呵   我也是乱说的   还有  在OnPaint()里面 好像不需要 用 Invalidate(); 和UpdateWindow(); 的吧??  这2个函数的作用是 导致某些区域失效而重绘  不应该在 OnPaint()里面出现吧??
      

  2.   

    Invalidate()显然是多余的
    这个函数本身就是刷新试图,调用ONPAIN()
    你这么调用可能会陷入死循环
      

  3.   

    去掉
       pWnd->Invalidate(); 
      

  4.   

        Rectangle()中 10太小了,根本看不到,建议你改大点,我用的20,可以看到    CWnd *pWnd = GetDlgItem(IDC_STATIC_CIRCLE); 
        CDC *pDC = pWnd->GetDC(); 
        
        pDC->SelectStockObject(BLACK_BRUSH); 
        pDC->Rectangle(0, 0, 20, 20);      pWnd->ReleaseDC(pDC); 
      

  5.   

    pWnd->Invalidate(); 
    似乎是和OnPait()重了,不需要!
      

  6.   

    谢谢大家,现在已经能显示了,
    但是我是用按钮触发的,可以在初始化dialog里直接显示么?
    void Fz1::OnPaint()
    {
        pWnd = GetDlgItem(IDC_FZ1_STATIC);
        pDC = pWnd->GetDC();
        pDC->SelectStockObject(BLACK_BRUSH);
        pDC->Rectangle(0, 0, 10, 10); 
        pWnd->ReleaseDC(pDC); 
    }BOOL Fz1::OnInitDialog()
    {
        OnPaint();
    }
    无论在OnInitDialog()是否调用,都不在初始化里显示,而且,在OnInitDialog()调用OnPaint()时,用断点测试,也确实调用了这个函数,但是图没有画出来.
      

  7.   

    OnInitDialog() 时,对话框应该都还没有显示出来,即使调用OnPaint()自然也没什么用。
    你一定要这么做,可以在OnInitDialog()里面设置一个定时器,1000毫秒应该可以了,当定时器触发后,杀掉该定时器,然后调用OnPaint(),这样就可以看到显示了。其实你这种做法是非常规做法,常规做法是,自己从CStatic派生一个类,在这个类里面重载OnPaint()函数,在OnPaint()里面实现你的绘图动作,然后将IDC_FZ1_STATIC和这个类关联起来。具体做法,可以在网上搜搜,也可以重开一贴,让大家来讨论。
      

  8.   

    不要把这个函数放到初始化里
    模态的对话框有些动作是不能在初始化里完成的
    因为有些控件并没有在这个时候生成完成
    二,建议象这样画图的函数都放到OnPaint消息处理中去,而不是自己建一个这样函数
    否则你的界面一刷新图不就没有了?