盲点:当你的程序pWnd->Invalidate(); pWnd->UpdateWindow();后,你所做的改变又被你的IDC_SI的默认WM_PAINT消息处理程序又覆盖点了。如果你把以下语句注释掉:
//pWnd->Invalidate();
//pWnd->UpdateWindow();此时应该能看到你做的改变。老弟需要闭关修练呀!!!!
//pWnd->Invalidate();
//pWnd->UpdateWindow();此时应该能看到你做的改变。老弟需要闭关修练呀!!!!
CClientDC dc(this) ;
应可以搞定了!
1、pctrlwnd->Invalidate() 导致该控件所在的矩形区域失效,注意,不仅对该控件来说如此,控件的父窗口(对话框)也标记该区域失效。
2、pctrlwnd->UpdateWindow()迫使该控件立即更新矩形区域的显示。
3、执行你的绘图代码。
4、因为在父窗口中标记为失效,所以父窗口的DC会更新该区域的显示(也就是你的绘图效果)。
而当顺序颠倒时,所有的语句都执行了,只不过你的绘图动作在前,然后又被控件的绘图动作所覆盖。
如果没有pctrlwnd->Invalidate(),父窗口得不到该区域的失效信息,对控件的任何绘图操作都反映不出来。在此情况下,你可以尝试调用父窗口的Invalidate(),看看结果如何?
我没试验过,所以不知道父窗口的Invalidate()会不会导致控件重画,如果是,那你将仍然看不到自己的绘图效果。