|
ㅠㅠ 정말... 바보같았네요
다음처럼 만든다음에...
protected:
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_OPENMSGFORM, TMessage, ShowMsg)
END_MESSAGE_MAP(TForm);
ShowMsg(TMessage& Msg);
OnGetMsg(PPDSMSG pMsg)
{
...
SendMessage(MainForm->Handle, 0, 0, (LPARAM)pMsg);
}
저렇게 해주면 되는군요... ㅠㅠ 으흑
왜 윈도 프로시저가 동작하지 않는지는 아직도 원인 불명이지만요...
좀더 내공이 쌓이기를... 내공....내공
cloudia 님이 쓰신 글 :
: 안녕하세요... 매번 도움만 받고 가네요...
:
: 이틀동안 정말 미스테리어스한 문제 때문에 골치를 썪고 있습니다.
:
: 폼 클래스 내의 멤버함수가 아닌 일반 함수에서 동적으로 폼을 생성했을때
:
: 윈도 프로시저가 생성된 폼에 제대로 물리지 않는 문제거든요...
:
: 예를 들어 이런 코드입니다.
:
: 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);
: }
:
: 이렇게 간접 호출을 해도... 처음 결과와 마찬가지로 폼의 윈도 프로시저가 제대로 동작하지 않습니다.
:
: 정말 어떻게 해결해야 되나요... 복잡한 문제라 어떻게 검색해야 할 지도 모르겠고...
:
: 정말 쓸데없는 문제 때문에 시간만 축내고 있으니 답답할 따름입니다...
:
: 제발 답변을 부탁드립니다.
:
:
:
|