|
질문과 예제 코드가 이해가 잘안됩니다만
질문만 봐서 답변드린다면 Form이 2개 있는데 각각의 Form에 있는 그래프 컴포넌트에
그리프를 그리는 함수를 만드고 싶다는 얘기로 들립니다.
1. 그러면 함수에 인자로 폼을 넘기지 말고 그래프 컴포넌트를 바로 넘기십시요
예를들어 그래프 컴포넌트가 TChart *라고 한다면...
void __fastcall DrawAscan(TChart * chart , int X , int Y)
{
//
}
위와같이 하면 어떤 폼인지 cast도 if도 필요없습니다.
바도 chart에 그리면 됩니다.
2. Form을 꼭 넘겨야 하는 이유가 있다면 TForm *형태로 넘기십시요
void __fastcall DrawAscan(TForm * form , int X , int Y)
{
//
}
3. 또한 Form을 비교할때 String으로 비교할 필요가 있을까요?
포인터를 바로 비교하면 더 직관적이고 빠르지 않을가요?
void __fastcall DrawAscan(TForm * form , int X , int Y)
{
if(form == frmAscan )
{
//
}
else if( form == frmFFTAForm)
{
//
}
}
그럼....
이용태 님이 쓰신 글 :
: 2개의 폼이 있습니다. 각각의 폼에는 그래프를 그리는 컴포넌트가 올려져 있습니다.
:
: 한개의 함수가 있습니다. 이 함수는 그래프를 그려주는 기능을 합니다.
:
: 여기서, 한개의 함수를 이용하여 함수의 전달인자로 넘어오는 폼에다가 그래프를 그려줄려고 합니다.
:
: 밑의 소스를 보게 되면 전달인자로 폼의 주소와 폼 이름을 받습니다. 그리고 함수 내부에서 void형 포인터를 선언한 후,
: 넘어온 폼 주소를 실제 폼으로 캐스팅하여 vForm에다가 저장했습니다.
:
: 이렇게 하면 vForm에는 "frmAscan"또는 "frmFFTAForm"가 들어가 있을거라 생각되고요, 그거에 따라 해당 폼에 그래프를 출력할 거라 생각했습니다.
:
: 그런데 프로그램 돌려보면 안됩니다. -_-;;;;;
:
: 이런 경우 어떻게 해야 합니까?
:
: void __fastcall TfrmCForm::DrawAscan(DWORD *dwFrm, AnsiString fmName, int X, int Y)
: {
: void *vForm = NULL;
: if(fmName == "frmAscan")
: vForm = (TfrmAscan*)dwFrm;
: else if(fmName == "frmFFTAForm")
: vForm = (TfrmFFTAForm*)dwFrm;
:
: //그래프 출력!
:
:
: }
|