金山界面库分析(10)

来源:互联网 发布:java简历ssh项目 编辑:程序博客网 时间:2024/05/21 06:56

鼠标消息、窗口状态的管理


首先来看CBkDialogViewImpl类的鼠标消息处理方法

 

OnMouseLeave方法:

如果现在处于非跟踪的状态,那么调用_TrackMouseEvent并设置m_bTrackFlag;

之后获取现在鼠标所悬停的控件,通过调用header,body和footer的BkGetHWNDFromPoint方法来判断,因为这三者覆盖整个客户区域

如果当前悬停控件和记录的hover控件不一致,那么进行更新操作

 

OnMouseLeave方法:

设置不跟踪状态

如果hover控件存在,那么重置状态

如果pushdown控件存在,那么重置状态

 

OnLButtonDown方法:

查看是否是点击标题栏,如果是,调用最大化,最小化和恢复处理

在非标题栏点击情况下,设置capture状态

 

OnLButtonUp方法

ReleaseCapture,设置控件状态

 

OnLButtonDblClk方法

在双击标题栏情况下最大化或者恢复窗口

 

在类CBkWindow 中,使用m_dwState变量来标示控件的状态,主要由以下几种状态:

// State Define

enum{

   BkWndState_Normal       = 0x00000000UL,   //正常

   BkWndState_Hover        = 0x00000001UL,   //悬停

   BkWndState_PushDown     = 0x00000002UL,   //按下

   BkWndState_Check        = 0x00000004UL,   //选中

   BkWndState_Invisible    = 0x00000008UL,   //不可见

   BkWndState_Disable      = 0x00000010UL,   //失活

};

主要使用ModifyState方法来改变控件的状态。

原创粉丝点击