这段代码其实并不是在"对话框"上作图.
注意:
CWnd* p=GetDlgItem(IDC_S);
CDC* c=p->GetDC();
所获取的CWnd和CDC其实只是对话框上的控件IDC_S的,然后,也都是在IDC_S上作图的.
明白这点,对你的问题:WM_PAINT在调用UpdateWindow或RedrawWindow时发出。
上面的代码中在OnPaint()中调用UpdateWindow()是不是有些矛盾?
就应该好理解了.
调用UpdateWindows是让控件IDC_S产生一个WM_PAINT的事件,不是再次触发对话框的OnPaint事件.
注意:
CWnd* p=GetDlgItem(IDC_S);
CDC* c=p->GetDC();
所获取的CWnd和CDC其实只是对话框上的控件IDC_S的,然后,也都是在IDC_S上作图的.
明白这点,对你的问题:WM_PAINT在调用UpdateWindow或RedrawWindow时发出。
上面的代码中在OnPaint()中调用UpdateWindow()是不是有些矛盾?
就应该好理解了.
调用UpdateWindows是让控件IDC_S产生一个WM_PAINT的事件,不是再次触发对话框的OnPaint事件.
我有些糊涂! 我是个初学者
请高手指明! 非常感谢 packager 、wine 和各位高手
2.WINE的讲述可谓精辟至极.
1、当对话框窗口被其他窗口覆盖或对话框窗口被移出至屏幕外,需要重画对话框自己本身时,OnPaint事件被触发。
2、你的OnPaint()函数里的主要工作:是去绘制在对话框里面的一个控件(其ID号为IDC_S)的颜色,绘制颜色的范围是在该控件的(0,0,10,10)。
3、缘于对话框窗口已经重绘,那么,IDC_S控件也需要重绘,所以UpdateWindow()也就触发IDC_S的OnPaint()。
4、为什么其它正常情况,不要再触发对话框中的其它子控件OnPaint()事件呢?原因很简单,因为,你是去获IDC_S控件的DC,你自己往IDC_S控件上画颜色,这件事,默认的MFC是不会干这件事的,在这种情况下,它也不知道,所以,你要自己去通知你的IDC_S控件去重新绘制一下。