CMyDlg* pMyDlg = new CMyDlg(this); 
pMyDlg->Create(IDD_DIALOG1,this);
pMyDlg->ShowWindow(SW_SHOW);
pMyDlg->m_ProgressCtrl.SetRange(0,100); //m_ProgressCtrl为派生CProcessCtrl类的成员
for(int i=0;i<100;i++)
{
   pMyDlg->m_ProgressCtrl.SetPos(i);
}
在pMyDlg->m_ProgressCtrl.SetPos(i)这里和OnPaint()设置断点,发现不是每一次都能进入OnPaint(),这是为什么呀?

解决方案 »

  1.   

    你的progressctrl不在client area里面,所以setpos触发的应该是wm_ncpaint消息所以不能触发你的onpaint另外,setpos真的触发了wm_xxPaint消息了吗?它就不能自己getDC()然后自己画了,发什么消息啊
    发消息以后整个窗口不是都闪烁了?
      

  2.   

    他有的时候也能进入OnPaint()阿
    m_progressCtrl是CTextProcessCtrl类的对象(派生自CProcessCtrl)
      

  3.   

    就像调Invalidate()也不一定马上更新窗口一样。
    窗口无效了,但是只有当消息没有阻塞时并且有必要重绘窗口时才会调OnPaint()。使用UpdateWindow()。