|
둥이네 님이 쓰신 글 :
: 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로
강제로 형변환 하면서 생긴것이 아닌가 조심스럽게 추측해 봅니다. ^^;
|