菜鸟问题,大家过来拿分吧。
GARY 2009-10-22 10:02:19 小弟是菜鸟初学者,问个简单的问题。
我建立的是MFC程序,智能设备应用程序,VC2005。
基于对话框。
我只是想在对话框出来之后,自动就在屏幕上画个椭圆。
我刚开始是这样写的。
BOOL CtestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
CDC *pDC=new CClientDC(this);
CBrush brushGreen(RGB(0,255,0));
CBrush* pOldBrush=pDC->SelectObject(&brushGreen);
CPen penBlack;
penBlack.CreatePen(PS_SOLID,3,RGB(255,0,0));
CPen* pOldPen=pDC->SelectObject(&penBlack);
CRect rect;
GetClientRect(rect);
rect.DeflateRect(20,20);
pDC->Ellipse(rect);
pDC->SelectObject(pOldBrush);
pDC->SelectObject(pOldPen);
brushGreen.DeleteObject();
penBlack.DeleteObject();
delete pDC;
pDC=NULL;
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回TRUE
}
结果没有反应,我设了个断点。程序走到这的时候,窗口还没有绘制出来。
所以程序中的CDC *pDC=new CClientDC(this);就不会起作用
因为还没有客户区,是这样吗?
然后我写了如下代码,我想在OnPaint()中添加代码
void CtestDlg::OnPaint()
{
CPaintDC dc(this);
CBrush brushGreen(RGB(0,255,0));
CBrush* pOldBrush=dc.SelectObject(&brushGreen);
CPen penBlack;
penBlack.CreatePen(PS_SOLID,3,RGB(255,0,0));
CPen* pOldPen=dc.SelectObject(&penBlack);
CRect rect;
GetClientRect(rect);
rect.DeflateRect(20,20);
dc.Ellipse(rect);
dc.SelectObject(pOldBrush);
dc.SelectObject(pOldPen);
brushGreen.DeleteObject();
penBlack.DeleteObject();
}
因为OnPaint函数应该就是绘制窗口的吧?
编译出现错误
error C2509: 'OnPaint' : member function not declared in 'CtestDlg'
然后我去testDlg.h文件加了
private:
void OnPaint();
编译没错误了。但是运行,还是什么反应都没有。
我在这个函数设置了断点,调试运行,发现程序好像都不进入这个函数。为什么?
希望大家指点我一下,首先看我理解的对不对。然后教我一下,怎么才对话框建立之后,
自动在屏幕上就绘制了一个椭圆。当然直线什么的也行,都是一个道理。