我知道,在一个对话框中绘图可以在OnPaint()中进行,但是现在我需要在程序运行过程中不断的更新绘图。
例如,我新建了个绘图函数void CMyDlg::pain()
{
CDC *p=GetDC();
p->textout(10,10,"123");
}我把pain()放在OnInitDialog()函数,结果对话框中没有:“123”,好像函数没有执行。
然后我改成这样
void CMyDlg::pain()
{
CDC *p=GetDC();
p->textout(10,10,"123");
Onpaint(); //增加了这一行,本想相应的,但是程序终止了
}
我猜想可能与消息有关,所以请教大家,怎样响应pain()函数,让它在别的函数了可以调用执行。
其次,如果我画了一个矩形,怎样删除这个矩形呢?谢谢大家了
例如,我新建了个绘图函数void CMyDlg::pain()
{
CDC *p=GetDC();
p->textout(10,10,"123");
}我把pain()放在OnInitDialog()函数,结果对话框中没有:“123”,好像函数没有执行。
然后我改成这样
void CMyDlg::pain()
{
CDC *p=GetDC();
p->textout(10,10,"123");
Onpaint(); //增加了这一行,本想相应的,但是程序终止了
}
我猜想可能与消息有关,所以请教大家,怎样响应pain()函数,让它在别的函数了可以调用执行。
其次,如果我画了一个矩形,怎样删除这个矩形呢?谢谢大家了
解决方案 »
- 程序获取键盘输入都有哪些方法?
- DLL和调用程序的编译环境设置
- 新手求助:在View类中对象的生命周期的问题
- 关于触发自绘事件
- 关于VC++结构体作为函数参数:BUG or 其它。
- 如何在Ndis层分析以太网数据包头?重组ip封包?(大送分)
- 哪里有《windows网络编程》的电子版下?
- 数据库的导入,导出问题,来着有分,前十个每人十分,有正确答案的另外再每人给50啊!
- 高手请帮忙 如何获取系统闲置的时间?(立刻给分,决不食言)
- 请问怎样设置对话框的背景颜色(比如要设置Dlialog的背景颜色为RGB(76,74,93)
- 对话框中的picture控件如何重绘?
- VC++中如何自制程序运行结果显示界面???
如果你真的想在对话框启动完毕调用的话,可以重载PreTranslateMessage
BOOL CTstDisableDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
static BOOL boFirstDrawn=FALSE;
if (!boFirstDrawn)
{
Paint();
boFirstDrawn = TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}WM_PAINT是最好的绘图时机,你却不用另外,几乎所有OnXXXXX开头的消息处理函数,你是不能自己调用的,原因就是在于MFC在调用之间都会为消息处理函数“作准备”,你没有为这个函数“作准备”,只所以为什么会退出,则看情况而定了。
然后在ontimer中paint()...
这样就会一直刷新了。
Onpaint一般在窗体大小改变等因素下会绘图
如果你想实时绘图,要么使用定时器
不过我建议里使用线程消息或者是观察者模式进行绘图,这样效率会高一点