none
怎样刷新ocx的非客户区? RRS feed

  • 问题

  • 我通过MFC建立了一个ocx控件,并设置了标题和边框。重载了WM_NCPAINT消息响应函数,在其中绘制我的标题栏。

    但是问题来了,我的控件在IE8当中运行的时候,如果使用了IE8的缩放功能,发现没有收到WM_NCPAINT消息,但是可以收到WM_SIZE和WM_NCCALSIZE消息。我不知道该如何刷新我的非客户区,以保证能收到WM_NCPAINT消息。

    谢谢!

    2010年8月5日 7:34

答案

全部回复

  • this->InvalidateRect(&rect,true);
    this->RedrawWindow(&rect,NULL,RDW_INTERNALPAINT|RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE);

    用這兩個去刷新

     

    2010年8月6日 2:17
  • 谢谢。

    但是我测试了一下,还是不行。

    难道是我调用的有问题,应该放在那里调用?我是在OnNcCalcSize当中调用的,代码如下,不知道对不对。

    this->InvalidateRect(&lpncsp->rgrc[0],true);
    this->RedrawWindow(&lpncsp->rgrc[0],NULL,RDW_INTERNALPAINT|RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE);
    COleControl::OnNcCalcSize(bCalcValidRects, lpncsp);
    
    正确的调用应该是在什么地方呢?

    2010年8月9日 1:39
  • WM_SIZE 用這訊息
    2010年9月13日 8:36