我想在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(); } 请高手帮我看看,这个就是不显示画的图.谢谢各位!
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(); } 请高手帮我看看,这个就是不显示画的图.谢谢各位!
这个函数本身就是刷新试图,调用ONPAIN()
你这么调用可能会陷入死循环
pWnd->Invalidate();
CDC *pDC = pWnd->GetDC();
pDC->SelectStockObject(BLACK_BRUSH);
pDC->Rectangle(0, 0, 20, 20); pWnd->ReleaseDC(pDC);
似乎是和OnPait()重了,不需要!
但是我是用按钮触发的,可以在初始化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()时,用断点测试,也确实调用了这个函数,但是图没有画出来.
你一定要这么做,可以在OnInitDialog()里面设置一个定时器,1000毫秒应该可以了,当定时器触发后,杀掉该定时器,然后调用OnPaint(),这样就可以看到显示了。其实你这种做法是非常规做法,常规做法是,自己从CStatic派生一个类,在这个类里面重载OnPaint()函数,在OnPaint()里面实现你的绘图动作,然后将IDC_FZ1_STATIC和这个类关联起来。具体做法,可以在网上搜搜,也可以重开一贴,让大家来讨论。
模态的对话框有些动作是不能在初始化里完成的
因为有些控件并没有在这个时候生成完成
二,建议象这样画图的函数都放到OnPaint消息处理中去,而不是自己建一个这样函数
否则你的界面一刷新图不就没有了?