界面一开始变灰,在OnDraw里面的绘画出不来,抖动网页时,出来了,画面凌乱!

解决方案 »

  1.   

    在return之前加上
    bHandled = FALSE;
    试一试。
    另,为什么不写在OnPaint中呢?
      

  2.   

    bHandled = FALSE;???
    在ATL写ActiveX里面,有OnPaint吗?
    xuslei(蓝狐),你明白我说什么了吗?
      

  3.   

    你不是第一次用ATL写ActiveX控件的话,我想不会这样问的。我刚刚做的ActiveX控件就是这样实现的,至少我觉得你没有风度!
      

  4.   

    对不起xuslei(蓝狐),我道歉。
    我只是质疑你的OnPaint,我只是想寻找别的,
    不想用其他消息而解决这个问题!
      

  5.   

    程序员很多都是这个样子,说起话来比冰都冷,比石头都硬,也许我有的时候也是这样,真不希望自己变成怪物。
    建议不要在OnPaint里绘制,这样你的控件会有太多的局限。能否给出代码,大家分析一下。
      

  6.   

    简单的〉:
    HRESULT OnDraw(ATL_DRAWINFO& di)
    {
    RECT &rc = *(RECT*)di.prcBounds;
    Rectangle(di.hdcDraw, rc.left, rc.top, rc.right, rc.bottom); // --[1]
    SetTextAlign(di.hdcDraw, TA_CENTER|TA_BASELINE);
    LPCTSTR pszText = _T(S_TEST);
    TextOut(di.hdcDraw, (rc.left + rc.right) / 2,                // --[2]
    (rc.top + rc.bottom) / 2, pszText, lstrlen(pszText));
    return S_OK;
    }
    控件写好了,打开网页的时候,发现只有[2]处正常,而且字体是变灰的。
    改变网页的大小之后,恢复正常,但是有时候[2]处也经常不绘画.
      

  7.   

    绘画之后,应该加一次Invalidate(true);
    紧紧加一次就可以了。
    if(!m_bFrush)
    {
        m_bFrush = false;
        Invalidate(true);
    }
    就可以刷新屏幕,获得焦点。