|
안녕하세요... 매번 도움만 받고 가네요...
이틀동안 정말 미스테리어스한 문제 때문에 골치를 썪고 있습니다.
폼 클래스 내의 멤버함수가 아닌 일반 함수에서 동적으로 폼을 생성했을때
윈도 프로시저가 생성된 폼에 제대로 물리지 않는 문제거든요...
예를 들어 이런 코드입니다.
void OnGetMsg(PPDSMSG pMsg)
{
TMsgForm* NewMsgForm = new TMsgForm(NULL);
NewMsgForm->Show();
}
OnGetMsg 라는 함수는 통신 모듈에서 쓰이는 이벤트 핸들러 함수로... 함수 포인터를 넘겨줘야 하는 문제로 클래스의 멤버 함수로 선언할 수 없더라구요...
아무튼 위의 코드로 실행하면, 메세지 도착 이벤트 패킷이 전달되었을 때 메세지 폼이 화면 상에 뜨지만 마우스 입력을 받지 못합니다.
spy++로 조사해 보면 '윈도 프로시저: [사용할 수 없음]'이라고 나옵니다.
그런데 위의 기능을 폼 위에 올려놓은 버튼을 클릭했을 때 처리되도록 멤버함수로 만들면 폼이 제대로 동작합니다. 바로 아래 코드입니다.
void __fastcall TMainForm::Button1Click(TObject* Sender)
{
TMsgForm* NewMsgForm = new TMsgForm(NULL);
NewMsgForm->Show();
}
혹시나 해서 폼을 통해 간접 호출을 해보았습니다.
void OnGetMsg(PPDSMSG pMsg)
{
MainForm->Button1Click(NULL);
}
이렇게 간접 호출을 해도... 처음 결과와 마찬가지로 폼의 윈도 프로시저가 제대로 동작하지 않습니다.
정말 어떻게 해결해야 되나요... 복잡한 문제라 어떻게 검색해야 할 지도 모르겠고...
정말 쓸데없는 문제 때문에 시간만 축내고 있으니 답답할 따름입니다...
제발 답변을 부탁드립니다.
|