控件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.请大家分析出错原因.
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.请大家分析出错原因.
解决方案 »
- CserialPort v1.27怎么使用啊?
- 实现PreTranslateMessage,导致鼠标OnLButtonUp不响应
- 用VC写的QQ自动登录程序,密码框无法收到消息,请教
- 我做了个起始屏,可是在运行的时候,有个窗口老是和起始屏一块出现,而且一闪而过,把它弄去啊??谢谢了各位大哥
- 晕啊!请问在远程控制中控制别人的一端应该叫“服务端”还是“客户端”啊?
- Basic question when Build a program
- 。。。。。。。有没有人用过自己的数据引擎?就是把数据库操作的代码,嵌到自己的程序里。
- 哪位知道如何获得和修改本机的ip地址,不用vc也行,能给多少给多少分
- 当神经网络的输出层过多时怎么处理
- SQL翻译器的实现
- 求救:请高手看看这段程序错在哪里,万分感谢!急!
- 怎样让CDialogBar的按钮变灰啊???
对,但是我的成员是静态的,比如:CBrush m_brBkcrl; SetCapture 和ReleaseCapture应该放在程序那一段?OnMouseLeave()还是OnMouseMove?
这是老问题了:消息的声明不规范:
如果是ON_MESSAGE,那么消息映射的原型为:LRESULT Onxxx(WPARAM wParam, LPARAM lParam)
由于此处的wParam和lParam均没有什么作用,那么可以采用ON_MESSAGE_VOID的宏,这样,消息映射的原型就可以这样写了:void Onxxx()
提示没有定义.
问题也一样可以解决.