|
VirtualTreeView1->BeginDrag(true,0);
위와같이 코딩하고 마우스가 VirtualTreeView 위에 올라가면 dragover이벤트가 뜰것입니다.
그런데 마우스가 VirtualTreeView위에 있지 않으면서 VirtualTreeView에서 dragover이벤트가 뜨게 하려면
CM_DRAG 메세지를 VirtualTreeView에 날리면 되는데 아래 예제를 참조하세요
예제는
Button1을 클릭했을때 Memo1이 drag모드로 들어가게 했구요
Button2를 클릭하면 1회성으로 Memo1에서 DragOver 이벤트가 발생하도록 했습니다.
void __fastcall TForm1::Memo1DragOver(TObject *Sender, TObject *Source,
int X, int Y, TDragState State, bool &Accept)
{
Memo1->Lines->Add("Memo1DragOver");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Lines->Clear();
Memo1->BeginDrag(true,1);
}
//---------------------------------------------------------------------------
Longint MyDragMessage(HWND Handle,TDragMessage Msg,TDragObject *Source,void * Target, const TPoint Pos)
{
TDragRec DragRec;
Longint Result=0;
if( Handle )
{
DragRec.Pos = Pos;
DragRec.Target = Target;
DragRec.Source = Source;
DragRec.Docking= false;
Result = SendMessage(Handle, CM_DRAG, Longint(Msg), Longint(&DragRec));
}
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
// TDragMessage = (dmDragEnter, dmDragLeave, dmDragMove, dmDragDrop, dmDragCancel, dmFindTarget);
TPoint pt;
pt.x=Mouse->CursorPos.x;
pt.y=Mouse->CursorPos.y;
MyDragMessage(Memo1->Handle,dmDragMove,(TDragObject *)Memo1,Memo1,pt);
}
//---------------------------------------------------------------------------
그럼..
해바라기 님이 쓰신 글 :
: 메인 윈도우에서 마우스무브 상태를 감지한후, 특정 조건이 맞을때 트리뷰(VirtualTree View)로
:
: 드래그오버 메세지를 발생시켜 주고 싶은데.. 어떻게 방법이 없을까요..?;;
|