游侠无极限 发表于 2005-5-4 12:19:00

人都死光了??? WTL问题!!!

一个准备用来SubClass的WTL 控件类
#include < ATLTYPES.H >
class CWTLFileListCtrl : public CWindowImpl < CWTLFileListCtrl ,CListViewCtrl >
{
BEGIN_MSG_MAP_EX(CWTLFileListCtrl)
MSG_WM_LBUTTONUP(OnLButtonUp)
END_MSG_MAP()
public:
CWTLFileListCtrl(void);
~CWTLFileListCtrl(void);
void OnLButtonUp(UINT flag, CPoint pt);
};
为什么 无法响应 WM_LBUTTONUP 消息,反而响应的是WM_LBUTTONDBLCLK ??
WTL版本 7.5
[此贴子已经被作者于2005-5-4 12:22:15编辑过]

yzhlinux 发表于 2005-5-4 15:45:00

<P>你也开始比WYL吸引了啊 。</P><P>你说的问题一般来说这是不可能的。</P><P>在WTL中这两个消息的定义的确在一起,如下:</P><P>#define MSG_WM_LBUTTONUP(func)if (uMsg == WM_LBUTTONUP){   SetMsgHandled(TRUE);   func((UINT)wParam, CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)));   lResult = 0;   if(IsMsgHandled())    return TRUE;}
#define MSG_WM_LBUTTONDBLCLK(func)if (uMsg == WM_LBUTTONDBLCLK){   SetMsgHandled(TRUE);   func((UINT)wParam, CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)));   lResult = 0;   if(IsMsgHandled())    return TRUE;}</P><P>而 IsMsgHandled 中是判断 m_bMsgHandled 这个bool变量(m_bMsgHandled 是BEGIN_MSG_MAP_EX中定义的),除非你在 OnLButtonUp 函数中将这个辩论设置为 false 了,那么自然会运行到 MSG_WM_LBUTTONDBLCLK(func) 。但是如果说直接运行到 MSG_WM_LBUTTONDBLCLK 那么除非满足 if (uMsg == WM_LBUTTONUP) 否则怎么可能?(难道你的 WTL摸板的代码被修改了?)</P><P>另外你的代码里没有 定义 WM_LBUTTONDBLCLK ,你怎么知道“反而响应的是WM_LBUTTONDBLCLK ”??是跟出来的吗?</P>

游侠无极限 发表于 2005-5-4 17:06:00

<P>开始因为只有我双击的时候才响应,所以我以为响应了双击消息</P><P>后来由试了一下 WM_LBUTTONDOWN,倒是没有问题</P><P>还有WM_RBUTTONUP 和WM_LBUTTONUP 问题一样,只有连续快速的按2次(差不多就是双击,不过右键没有双击的消息吧)才会响应一次,按1次不会响应</P>

游侠无极限 发表于 2005-5-4 19:38:00

<P>看来是控件本身的问题,鼠标一次点击不产生BUTTONUP消息……</P>MFC也一样
[此贴子已经被作者于2005-5-5 0:08:54编辑过]
页: [1]
查看完整版本: 人都死光了??? WTL问题!!!