求助:VC 绘图问题

来源:百度知道 编辑:UC知道 时间:2024/05/14 05:08:35
VC 绘图问题

在对话框程序中,我用如下语句在一个控件中绘图

CCientDC dc(GetDlgItem(IDC_XXXX));
CBrush br(RGB(255,0,0);
dc.SelectObject(&br);
dc.Ellipse(0,0,30,30);

奇怪的是,如果把这段代码放在一个消息函数里,例如点击一个按钮的消息响应函数,当点击这个按钮,控件上就会画出一个圆,可是如果把它放在IntiDialog()的初始化函数里,就什么也画不出来了,把br定义成成员变量也不行,想知道这是为什么,如果要在初始化时就绘图完成,应该怎么办?

PS1:我是想用这个方法做一个指示灯,如果哪位就更好的方法,在此多谢了;
PS2:我试过用WM_CTRCOLOR的消息响应函数,但如果这样,似乎就无法再对它进行重画了。

绘图一般放在OnPaint消息处理过程里面,因为有很多事件都会触发窗口重画操作,你在其他过程里头画出来的东西可能被默认的WM_PAINT消息处理过程给覆盖掉了。
如果你想点击一个按钮然后更改绘图的内容,可以用一个成员变量保存一些要设置的参数,点击按钮后改变参数,然后用Invalidate再让窗口重画,OnPaint中根据改变的参数来决定绘图效果。
例如:
void OnPaint(){
if(m_bDraw){
CCientDC dc(GetDlgItem(IDC_XXXX));
CBrush br(RGB(255,0,0);
dc.SelectObject(&br);
dc.Ellipse(0,0,30,30);
}
}
void OnBtnChangeDraw(){
m_bDraw = !m_bDraw;
Invalidate();
}

如LS所说,不是没画出来,是画了后又被擦掉了