|
WARSHIP 님이 쓰신 글 :
: 둥이네 님이 쓰신 글 :
: : void __fastcall TForm1::FFPanel9MouseMove(TObject *Sender,
: : TShiftState Shift, int X, int Y)
: : {
: : //............................
: : POINT pPos ;
: : pPos.x = X;
: : pPos.y = Y;
: : GetCursorPos(&pPos);
: :
: : if (FindControl(WindowFromPoint(pPos)) == NULL)
: : return ;
: : TFFPanel *PanTest = (TFFPanel *)FindControl(WindowFromPoint(pPos));
: :
: : if( PanTest->Tag>0 ){
: : RxSpeedButton->Left = PanTest->Left-2;
: : RxSpeedButton->Top = PanTest->Top-2;
: : xPoint = X;
: : yPoint = Y;
: : //.....................
: : }
: :
: :
: : 이렇게 된 부분을.... 중간에..TFFPanel *PanTest = (TFFPanel *)FindControl(WindowFromPoint(pPos));
: : 윕부분까지를 따로 함수를 만들어서 빼낼려고 합니다.
: : 이부분이 중복 되는 구간이 많아서 따로 뺄려고 하거등요..
: :
: :
: : void __fastcall TForm1::FFPanel9MouseMove(TObject *Sender,
: : TShiftState Shift, int X, int Y)
: : {
: : // ..........................
: : TFFPanel *PanTest;
: : FindPanel(*PanTest,X, Y);
: : if( PanTest->Tag>0 ){
: : RxSpeedButton->Left = PanTest->Left-2;
: : RxSpeedButton->Top = PanTest->Top-2;
: : xPoint = X;
: : yPoint = Y;
: :
: :
: :
: : //...........................
: : }
: :
: : void __fastcall TForm1::FindPanel(TFFPanel &PanTest,int X,int Y){
: : POINT pPos ;
: : pPos.x = X;
: : pPos.y = Y;
: : GetCursorPos(&pPos);
: :
: : if (FindControl(WindowFromPoint(pPos)) == NULL)
: : return ;
: :
: : PanTest =(TFFPanel *)FindControl(WindowFromPoint(pPos));
: : // Edit1->Text = PanTest->Tag ;
: : }
: :
: : 이렇게 했는데..자꾸.. PanTest =(TFFPanel *)FindControl(WindowFromPoint(pPos));
: : 이 부분에서 에러가 나네요...
: : 함수를 어떻게 바꾸면 좋을지 몰라서 조언 부탁 드립니다. 아니면 처음부터 잘못 작성한건지..
: : 어떻게 해야 할지..조언 부탁 드립니다.
:
: 우선 소스가 좀 정리가 안된것 같습니다.
: pPOS 에 X,Y값을 대입하고, 다시 GetCursorPos로 또 대입하는 것은 중복투자인것 같구요
: MouseMove는 현재 윈도우 안에서만 발생되므로
: GetCursorPos는 필요 없을것 같습니다.( 정확한 의도를 모르기에 확신하지는 않습니다 ^^)
: FindControl 도 두번 호출하셨는데요. 그것보다는
:
: TFFPanel *ppn = dynamic_cast<TFFPanel*>(FindControl(WindowFromPoint(pPos)));
: if (ppn)
: {
: // Code
: }
:
: 이런식으로 하시는게 낳을듯 싶습니다.
: dynamic_cast는 하향 캐스팅이 실패할 시에 NULL을 리턴해 줌으로써
: 에러처리가 가능합니다.
: 아마 에러가 나는 이유는 다른 윈도우의 객체 포인터를 TFFPanel로
: 강제로 형변환 하면서 생긴것이 아닌가 조심스럽게 추측해 봅니다. ^^;
저부분이..마우스 클릭해서 드래그시에 나타내는 부분이여서..
GetCursorPos(&pPos);
부분을 제거하면 제대로 작동이 안되는거 같네요..이유는 잘모르겠지만...
그리고... dynamic_cast 이거 사용 해봤는데..
ppn->tag 로 접근하니.에러가..^^; 이유는 잘모르겠네요..
새로운 함수 갈켜 주셔서 감사 합니다. dynamic_cast 에 대해서 좀더 알아 봐야 겠네요..
|