百分求助:请高手帮忙解读代码!

trueadou 2006-08-14 09:26:31
最近读到一段源代码,没看明白,请高手帮忙指点下!

#if !defined(AFX_TRACKCONTROL_H__06A38C29_E713_4289_97B5_EC17CA3DAED0__INCLUDED_)
#define AFX_TRACKCONTROL_H__06A38C29_E713_4289_97B5_EC17CA3DAED0__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// TrackControl.h : header file
// Modified by jingzhou xu

template<class BaseClass>
/////////////////////////////////////////////////////////////////////////////
// CTrackControl window

class CTrackControl : public BaseClass
{
// Construction
public:
CTrackControl()
{
m_bTracking=m_bHover=FALSE;
}
virtual ~CTrackControl() {}
BOOLEAN IsHover()
{
return m_bHover;
}

// Implementation
public:
virtual void OnHoverEnter()=0;
virtual void OnHoverLeave()=0;

// Generated message map functions
protected:
virtual LRESULT WindowProc(UINT nMessage, WPARAM wParam, LPARAM lParam)
{
LRESULT nResult=BaseClass::WindowProc(nMessage,wParam,lParam);
switch(nMessage)
{
case WM_MOUSEMOVE:
{
if (!m_bTracking)
{
TRACKMOUSEEVENT Tme;
Tme.cbSize = sizeof(Tme);
Tme.hwndTrack = GetSafeHwnd();
Tme.dwFlags = TME_LEAVE|TME_HOVER;
Tme.dwHoverTime = 1;
if (_TrackMouseEvent(&Tme))
m_bTracking=TRUE;
}
break;
}
case WM_MOUSEHOVER:
m_bHover=TRUE;
OnHoverEnter();
break;
case WM_MOUSELEAVE:
m_bTracking=m_bHover=FALSE;
OnHoverLeave();
break;
}
return nResult;
}

private:
BOOLEAN m_bTracking;
BOOLEAN m_bHover;
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_TRACKCONTROL_H__06A38C29_E713_4289_97B5_EC17CA3DAED0__INCLUDED_)
...全文
135 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
snowbirdfly 2006-08-14
  • 打赏
  • 举报
回复
那什么控件有啊,都是什么名字的消息啊?
那就看你要使用什么控件了~~~
当你创建该控件可以对它进行右键查看事件或者是直接在对话框中右键,选择类向导~~
然后在事件中选择你要选择的控件的ID,可以选择添加相应的事件 ~~~
折腾_苏州 2006-08-14
  • 打赏
  • 举报
回复
编辑状态下 对你的控件右键->EVENTS...能看到....
trueadou 2006-08-14
  • 打赏
  • 举报
回复
那什么控件有啊,都是什么名字的消息啊?
折腾_苏州 2006-08-14
  • 打赏
  • 举报
回复
CEDIT木有,需要重载CEDIT才有,上面的代码提供了通用的扩展,岂不方便
trueadou 2006-08-14
  • 打赏
  • 举报
回复
发现这段代码是用来扩展CEDIT类的,不过难道CEDIT之类的没有相应的消息吗?
折腾_苏州 2006-08-14
  • 打赏
  • 举报
回复
template <class T>
模板,可以写通用的函数...
函数里具体的类型或自定义的类 用 T 来 代表。

template <class T>
void Swap(T &a,T &b)
{
T c=a;
a=b;
b=c;
}
//以上编译是通过的

思危 2006-08-14
  • 打赏
  • 举报
回复
这是模板的语法。

BaseClass 是一个模板参数, 只有在具体实现该类时,编译器才对该文件进行编译,所以在定义时不需要。
trueadou 2006-08-14
  • 打赏
  • 举报
回复
主要是这句:template<class BaseClass>
为什么没有包含那个什么头文件呢?!
whatabig 2006-08-14
  • 打赏
  • 举报
回复
CTrackControl是BaseClass的子类。

virtual void OnHoverEnter()=0;
virtual void OnHoverLeave()=0;
纯虚函数,其子类一定要实现。

WindowProc()拦住
WM_MOUSEMOVE:
WM_MOUSEHOVER:
WM_MOUSELEAVE:
3个消息,其他消息由BaseClass::WindowProc()处理

你的子类实现2个纯虚函数就可以了。
DentistryDoctor 2006-08-14
  • 打赏
  • 举报
回复
检测鼠标是否移到某个窗口上或离开。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧