WM_NCLBUTTONDBLCLK 消息, 高手求解

时间:2021-06-30 18:13:07
WM_NCLBUTTONDBLCLK 这个消息可不可以发给panel, 为什么panel可以响应WM_NCLBUTTONDOWN 这个消息,而不响应 WM_NCLBUTTONDOWN 那!

19 个解决方案

#1


up

#2


WM_NCLBUTTONDBLCLK WM_NCLBUTTONDOWN 
这类消息应该是非客户区的消息吧,
不知道你的panel是怎么响应的。

#3


你给我试一试Panel如何响应WM_NCLBUTTONDBLCLK消息看看

#4


不可以的。非客户区

#5


to Linux2001(恋人不如自恋) :
====================================
你自己作个panel组件,然后重写 WM_LBUTTONDOWN 这个消息
Procedure TRollUpTitel.LButtonDown(Var Message: TWMLButtonDown);
Begin
  inherited;
  releasecapture;
  sendmessage(Parent.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
End;
你看它响应不响应!!!
不知道就说不知道, 何必搞的你和高手一样。

#6


sendmessage(Parent.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
去掉parent
  sendmessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);

#7


button 居然都可以响应 , 谁能告诉我为什么!!!!!!

#8


sendmessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);

你把这个消息发送过去以后,你得panel是怎么响应这个消息的?

#9


to  flyforlove(为情飞) 
================================
实际上就是鼠标按着form的标题栏拖动的效果, 也就是说发完这个消息,你就可以按着鼠标左键来拖动这个panel了,

#10


原来如此,你想实现在客户区托动窗体的功能,
那你就理解错了,
你这个消息其实是发送给窗体的,
并不是你得panel来响应的,这几个消息都是非客户区相应的。

sendmessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
你这里的handle其实是窗体的handle,

csdn上的红星星们可不是吃素的,可不要轻易说人家不懂,哈哈。

#11


这个消息是非客户窗体部分的双击事件,非客户窗体部分的理解最好看看vcmfc这本书就明白了

#12


to  flyforlove(为情飞) 
================================
怎么会是窗体那, 这个handle是继承自panel的组件。。。。。
  tapnel = class(TPanel)
  public
    Procedure LButtonDown(Var Message: TWMLButtonDown);  Message WM_LBUTTONDOWN;
    Procedure LButtonDBDown(Var Message: TWMLButtonDblClk);  Message  WM_LBUTTONDBLCLK;
  end;
这里面
procedure tapnel.LButtonDown(var Message: TWMLButtonDown);
begin
  releasecapture;
  sendmessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
end;
的handle会是窗体的handle吗?????? 不懂,请赐教?

#13


to  flyforlove(为情飞) 
原来如此,你想实现在客户区托动窗体的功能,
================================
我实现的并不是托动窗体的功能,而是在窗体中拖动panel的功能

#14


你可以确认一下,在你的这段代码添加一个showmessage(inttostr(handle));
然后把你编写的这个组件拖到窗体里,

然后在窗体的一个button click事件里写一个
showmessage(inttostr(form1.handle));

你看看这两个handle的值是不是一样的。

#15


原来是这样呀,我误会你的意思了。
我再看看。

#16


to  flyforlove(为情飞) 
===============================
呵呵 没关系 我还要谢谢你有空来看我的问题那

不是一样的,看完你的后我试了一下,两个handle值是不一样的。

#17


呵呵,真是有意思,我一直以为这类消息是用在非客户区的,
没想到还有这样的用法,
我试了一下TWinControl类的子类里,
只有TCustomControl里的子类没有办法响应WM_NCLBUTTONDBLCLK消息,
别的都可以,
TWinControl类的子类都可以响应WM_NCLBUTTONDOWN消息,
至于为什么会是这样的,我也不知道,哈哈。

#18


to  flyforlove(为情飞) 
===============================
呵呵 我找了半天vcl的源码,我认为其实form、panel、button都是窗体,为什么TWinControl类的子类都可以响应WM_NCLBUTTONDOWN消息,肯定是vcl里什么地方处理了,所以才会有的只响应WM_NCLBUTTONDOWN这个消息,而不响应WM_LBUTTONDBLCLK这个消息,但是我却找不到,不知道你怎么想。

#19


其实TWinControl下的都是窗体,看看帮助就知道了
TWinControl provides the common functionality for all controls that act as wrappers for Microsoft Windows screen objects ("windows").

按道理说TCustomControl类里的应该也可以响应WM_LBUTTONDBLCLK消息的。
但是不知道为什么,就是没有执行,这个还得看看源文件。

#1


up

#2


WM_NCLBUTTONDBLCLK WM_NCLBUTTONDOWN 
这类消息应该是非客户区的消息吧,
不知道你的panel是怎么响应的。

#3


你给我试一试Panel如何响应WM_NCLBUTTONDBLCLK消息看看

#4


不可以的。非客户区

#5


to Linux2001(恋人不如自恋) :
====================================
你自己作个panel组件,然后重写 WM_LBUTTONDOWN 这个消息
Procedure TRollUpTitel.LButtonDown(Var Message: TWMLButtonDown);
Begin
  inherited;
  releasecapture;
  sendmessage(Parent.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
End;
你看它响应不响应!!!
不知道就说不知道, 何必搞的你和高手一样。

#6


sendmessage(Parent.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
去掉parent
  sendmessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);

#7


button 居然都可以响应 , 谁能告诉我为什么!!!!!!

#8


sendmessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);

你把这个消息发送过去以后,你得panel是怎么响应这个消息的?

#9


to  flyforlove(为情飞) 
================================
实际上就是鼠标按着form的标题栏拖动的效果, 也就是说发完这个消息,你就可以按着鼠标左键来拖动这个panel了,

#10


原来如此,你想实现在客户区托动窗体的功能,
那你就理解错了,
你这个消息其实是发送给窗体的,
并不是你得panel来响应的,这几个消息都是非客户区相应的。

sendmessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
你这里的handle其实是窗体的handle,

csdn上的红星星们可不是吃素的,可不要轻易说人家不懂,哈哈。

#11


这个消息是非客户窗体部分的双击事件,非客户窗体部分的理解最好看看vcmfc这本书就明白了

#12


to  flyforlove(为情飞) 
================================
怎么会是窗体那, 这个handle是继承自panel的组件。。。。。
  tapnel = class(TPanel)
  public
    Procedure LButtonDown(Var Message: TWMLButtonDown);  Message WM_LBUTTONDOWN;
    Procedure LButtonDBDown(Var Message: TWMLButtonDblClk);  Message  WM_LBUTTONDBLCLK;
  end;
这里面
procedure tapnel.LButtonDown(var Message: TWMLButtonDown);
begin
  releasecapture;
  sendmessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
end;
的handle会是窗体的handle吗?????? 不懂,请赐教?

#13


to  flyforlove(为情飞) 
原来如此,你想实现在客户区托动窗体的功能,
================================
我实现的并不是托动窗体的功能,而是在窗体中拖动panel的功能

#14


你可以确认一下,在你的这段代码添加一个showmessage(inttostr(handle));
然后把你编写的这个组件拖到窗体里,

然后在窗体的一个button click事件里写一个
showmessage(inttostr(form1.handle));

你看看这两个handle的值是不是一样的。

#15


原来是这样呀,我误会你的意思了。
我再看看。

#16


to  flyforlove(为情飞) 
===============================
呵呵 没关系 我还要谢谢你有空来看我的问题那

不是一样的,看完你的后我试了一下,两个handle值是不一样的。

#17


呵呵,真是有意思,我一直以为这类消息是用在非客户区的,
没想到还有这样的用法,
我试了一下TWinControl类的子类里,
只有TCustomControl里的子类没有办法响应WM_NCLBUTTONDBLCLK消息,
别的都可以,
TWinControl类的子类都可以响应WM_NCLBUTTONDOWN消息,
至于为什么会是这样的,我也不知道,哈哈。

#18


to  flyforlove(为情飞) 
===============================
呵呵 我找了半天vcl的源码,我认为其实form、panel、button都是窗体,为什么TWinControl类的子类都可以响应WM_NCLBUTTONDOWN消息,肯定是vcl里什么地方处理了,所以才会有的只响应WM_NCLBUTTONDOWN这个消息,而不响应WM_LBUTTONDBLCLK这个消息,但是我却找不到,不知道你怎么想。

#19


其实TWinControl下的都是窗体,看看帮助就知道了
TWinControl provides the common functionality for all controls that act as wrappers for Microsoft Windows screen objects ("windows").

按道理说TCustomControl类里的应该也可以响应WM_LBUTTONDBLCLK消息的。
但是不知道为什么,就是没有执行,这个还得看看源文件。

#20