怎样得到拖拽Form的事件,或者说判断Form被拖动的事件是什么?

chensy0626 2002-09-13 05:26:19
怎样得到拖拽Form的事件,或者说判断Form被拖动的事件是什么?
...全文
90 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bcb_fans 2002-09-16
  • 打赏
  • 举报
回复
不能使用消息WM_MOVE,窗口移动之后才触发这个消息,

SDK:

The WM_MOVE message is sent after a window has been moved.
bcb_fans 2002-09-16
  • 打赏
  • 举报
回复
1、重载窗口过程WndProc

2、检测消息WM_MOVING
chensy0626 2002-09-16
  • 打赏
  • 举报
回复
多谢大家解答,我现在拖拽Form的标题栏好像Form的事件都不起作用,比如:FormMouseDown事件就不好使,为什么?
shclhs 2002-09-13
  • 打赏
  • 举报
回复
我人为应该是在FormMouseDown中记录下你的Form的位置在转化为屏幕坐标用
ClientToScreen(...)函数,再在FormMouseMove中对Form的位置进行计算
Hawk_sun 2002-09-13
  • 打赏
  • 举报
回复
通过捕获WM_MOVE事件你可以检测到!

在Form1上放置TApplicationEvent,
在OnMessage()中:

bool DragAlreadyStart=false;
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
bool &Handled)
{
if(Msg.message==WM_MOVE&&Msg.hWnd==Form1->Handle&&!DragAlreadyStart)
{
DragAlreadyStart=true;
ShowMessage("Begin Drag Form1");
Handled=false;//让系统接着处理这个消息

}

}
最后别忘了在Drag事件结束的时候将DragAlreadyStart=false,这样才不影响下一次要发生的Drag动作的捕获!
Hawk_sun 2002-09-13
  • 打赏
  • 举报
回复
TO :kingcaiyao(AKing)

有问题吧,人家问的是怎样判断自己程序的某个FORM被drag这个事件怎么检出来!你的例子是你的Form怎么接受别人Drag过来的File的个数的,有区别哦!
kingcaiyao 2002-09-13
  • 打赏
  • 举报
回复
.h File
//---------------------------------------------------------------------------

#ifndef dragdropH
#define dragdropH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TMemo *Memo1;
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
void __fastcall DragDropFiles(TMessage &Message);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_DROPFILES,TMessage,DragDropFiles);
END_MESSAGE_MAP(TForm);
protected:
virtual void __fastcall WndProc(TMessage &Message);

};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
.cpp File
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "dragdrop.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
DragAcceptFiles(Handle,true);


}
//---------------------------------------------------------------------------
void __fastcall TForm1::WndProc(TMessage &Message)
{
if(Message.Msg==WM_SYSCOMMAND)
{
if(Message.WParam==SC_CLOSE || Message.WParam==SC_SCREENSAVE)
{
Message.WParam=0;
}
}
TForm::WndProc(Message);
}
//-------------------------DragDropFiles Function-------------------------------------------

void __fastcall TForm1::DragDropFiles(TMessage &Message)
{
char FileName[512];
int i,Sum;
Sum=DragQueryFile(HDROP(Message.WParam),0xFFFFFFFF,NULL,0);
Memo1->Lines->Add("Total Drag and Drop Files:"+IntToStr(Sum));
Memo1->Lines->Add("____________________________________________");

//enum filename
for(i=0;i<Sum;i++)
{
DragQueryFile(HDROP(Message.WParam),i,FileName,512);
Memo1->Lines->Add(FileName);
Memo1->Lines->Add("_______________________________________________________");
}
DragFinish(HDROP(Message.WParam));

}


void __fastcall TForm1::Button1Click(TObject *Sender)
{
int button;
button=Application->MessageBox("Do you want to exit thisform?","Confirmation",MB_YESNO+MB_ICONQUESTION);
if(button==IDYES)
{
Application->Terminate();
}





}
//---------------------------------------------------------------------------



tongzhenhua 2002-09-13
  • 打赏
  • 举报
回复
我的一个浮动回收站的源码。(拖窗口的程序一下子不知放到哪里去了。^_^0)

void TForm1::WMDropFiles(TMessage& Msg)//消息拦截函数的定义
{
//TODO: Add your source code here
char FileName[128];
int i,sum;
//当第二个参数为0xFFFFFFFF时,DragQueryFile函数返回的是拖动文件的个数
sum=DragQueryFile(HDROP(Msg.WParam),0xFFFFFFFF,NULL,0);
for(i=0;i<sum;i++)
{
DragQueryFile(HDROP(Msg.WParam),i,FileName,128);//获取第i个文件名
if(MessageBox(Handle,("是否将"+AnsiString(FileName)+"删除?").c_str (),"删除警告",MB_DEFBUTTON1|MB_OKCANCEL|MB_ICONWARNING==IDOK))
DeleteFile(AnsiString(FileName));//直接删除文件,不是把文件移到回收站
}
DragFinish(HDROP(Msg.WParam));//拖动操作完成
}


void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
Drawing=true;
xx=X;
yy=Y;
}
//-------------------------------------------------------------
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if(Drawing)
{
Left+=X-xx;
Top+=Y-yy;
}
}
//-----------------------------------------------------------
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
Drawing=false;
}
//------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
Canvas->Brush->Color=clRed;
Canvas->Pen->Width=2;
Canvas->Pen->Color=clBlack;
Canvas->MoveTo(1,1);//将当前点移动到(1,1)位置;
Canvas->LineTo(59,1);//画直线;
Canvas->LineTo(59,59);
Canvas->LineTo(1,59);
Canvas->LineTo(1,1);
}
//----------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Width=60;//设置拖放窗体的宽
Height=60;//设置拖放窗体的高
DragAcceptFiles(Handle,true);//将窗体设置成为接受拖动文件状态
}
//-----------


void __fastcall TForm1::exit1Click(TObject *Sender)
{
this->Close();
}
//--------------------------------------------------------
gfh21cn 2002-09-13
  • 打赏
  • 举报
回复
具体的就记不情了
gfh21cn 2002-09-13
  • 打赏
  • 举报
回复
好像是重载wndproc,然后好像是几个消息组合起来判断的

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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