|
장성호님께서 답변해주신대로 구현을 하였습니다.
일단 DragOver 함수에 진입하기에는 성공했는데요..
void __fastcall CVTV_GroupTree::VTV_GroupTreeDragOver(TBaseVirtualTree *Sender, TObject *Source, TShiftState Shift,
TDragState State, const TPoint &Pt, TDropMode Mode, int &Effect, bool &Accept)
{
/* ... 중략 ... */
if (nSelLevel != 0 && m_DragSrcNodeParent != Node && m_DragSrcNodeParent != Node->Parent)
{
Accept = true;
//Effect = crDrag;
}
}
Accept 의 값이 true인데도 드래그앤드랍이 허용이 되질 않네요..
SendMessage를 하지 않고 정상적으로 DragOver 함수가 호출되어었을 경우엔 이상없이 잘 돌아 가는데요..
답변부탁드립니다 (^^;;)
장성호 님이 쓰신 글 :
: 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)로
: :
: : 드래그오버 메세지를 발생시켜 주고 싶은데.. 어떻게 방법이 없을까요..?;;
|