WM_NCLBUTTONDBLCLK 这个消息可不可以发给panel, 为什么panel可以响应WM_NCLBUTTONDOWN 这个消息,而不响应 WM_NCLBUTTONDOWN 那!

解决方案 »

  1.   

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

  2.   

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

  3.   

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

  4.   

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

  5.   

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

  6.   

    sendmessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);你把这个消息发送过去以后,你得panel是怎么响应这个消息的?
      

  7.   

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

  8.   

    原来如此,你想实现在客户区托动窗体的功能,
    那你就理解错了,
    你这个消息其实是发送给窗体的,
    并不是你得panel来响应的,这几个消息都是非客户区相应的。sendmessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
    你这里的handle其实是窗体的handle,csdn上的红星星们可不是吃素的,可不要轻易说人家不懂,哈哈。
      

  9.   

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

  10.   

    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吗?????? 不懂,请赐教?
      

  11.   

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

  12.   

    你可以确认一下,在你的这段代码添加一个showmessage(inttostr(handle));
    然后把你编写的这个组件拖到窗体里,然后在窗体的一个button click事件里写一个
    showmessage(inttostr(form1.handle));你看看这两个handle的值是不是一样的。
      

  13.   

    to  flyforlove(为情飞) 
    ===============================
    呵呵 没关系 我还要谢谢你有空来看我的问题那不是一样的,看完你的后我试了一下,两个handle值是不一样的。
      

  14.   

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

  15.   

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

  16.   

    其实TWinControl下的都是窗体,看看帮助就知道了
    TWinControl provides the common functionality for all controls that act as wrappers for Microsoft Windows screen objects ("windows").按道理说TCustomControl类里的应该也可以响应WM_LBUTTONDBLCLK消息的。
    但是不知道为什么,就是没有执行,这个还得看看源文件。