控件ctrl 继承CWnd,创建在CDialogBar上, 设计时捕捉鼠标离开控件时重画.
extern "C" WINUSERAPI BOOL WINAPI TrackMouseEvent(LPTRACKMOUSEEVENT lpEventTrack);
// 全局的消息传递在控件的MouseMove处理消息:
void CXXXX::OnMouseMove(UINT nFlags, CPoint point) 
{
         //.....
if(!m_bOver)
{
TRACKMOUSEEVENT tme;
m_bOver = true;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags = TME_LEAVE;
tme.dwHoverTime = NULL;
tme.hwndTrack = m_hWnd;
::TrackMouseEvent(&tme);
}
         //....
}
消息:ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
鼠标离开后处理
void CXXXX::OnMouseLeave()
{
if(m_bOver)
{
m_bOver = false;
Invalidate();
}
}
发现在Release版本的时候.在OnMouseLeave()后, 信息丢失,控件类内部成员丢失.
在关闭的时候,出错:
(MFC42.DLL):0xC0000005 :Acecss Violation.请大家分析出错原因.

解决方案 »

  1.   

    调用一下SetCapture和ReleaseCapture
      

  2.   

    // 刷新的时候指针变量被释放了.
       对,但是我的成员是静态的,比如:CBrush m_brBkcrl;   SetCapture 和ReleaseCapture应该放在程序那一段?OnMouseLeave()还是OnMouseMove?
      

  3.   

    应该是release版本才出问题吧
    这是老问题了:消息的声明不规范:
    如果是ON_MESSAGE,那么消息映射的原型为:LRESULT Onxxx(WPARAM wParam, LPARAM lParam)
    由于此处的wParam和lParam均没有什么作用,那么可以采用ON_MESSAGE_VOID的宏,这样,消息映射的原型就可以这样写了:void Onxxx()
      

  4.   

    消息宏ON_MESSAGE_VOID的定义在那里? 我把ON_MESSAGE改成ON_MESSAGE_VOID后编译出错.
    提示没有定义.
      

  5.   

    其实也可以把OnMouseLeave()改成OnMouseLeave(WPARAM wParam, LPARAM lParam).
    问题也一样可以解决.