[문제원인]
메세지 수신하는쪽에서요...
void __fastcall TForm1::WndProc(Messages::TMessage *Message)
그냥 위와같이 함수 선언해 둔다고 해서 WindowMessage가 저쪽으로 들어오지 않습니다.
디버그 모드로 run한후에 Editer를 보세요
아마 한번이라도 함수를 타게되면 에디터 왼쪽에 쩜이 찍히는데...
WndProc 함수는 찍혀있지 않을꺼예요
[해결방법]
방안1. Dispatch를 쓰던지 ...
virtual void __fastcall Dispatch(void *Message);
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=542
방안2. 아니면 SubClassing 하는방법도 있구요
TWndMethod OrgWinProc;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
OrgWinProc=this->WindowProc;
this->WindowProc=WndProc2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WndProc2(Messages::TMessage &Message)
{
OrgWinProc(Message);
if( Message.WParam == 100 )
ShowMessage("!");
}
//---------------------------------------------------------------------------
방안3. 메세지 맵을 쓰셔도 됩니다.
*.h
void __fastcall TForm1::ShowMessageProc(TMessage& Msg);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_USER + 1234, TMessage, ShowMessageProc)
END_MESSAGE_MAP(TForm);
*.cpp
void __fastcall TForm1::ShowMessageProc(TMessage& Msg)
{
if( Msg.WParam == 100 )
ShowMessage("!");
}
.....
그럼....
볼랜드 어렵네요 ㅠㅠ 님이 쓰신 글 :
: 한개의 폼(exe)에다 이렇게 정의 해놓쿠..
: void __fastcall TForm1::WndProc(Messages::TMessage *Message)
: {
: //
: if( Message->WParam == 100 )
: ShowMessage("!");
: }
:
:
: 다른 폼(exe)에다가 이렇게 정의 했습니다.
: #define WM_USER_SHOWMSG WM_USER + 1234
:
: HWND hWND = NULL;
: hWND = FindWindow( 0, "Show");
:
: if( hWND != NULL )
: {
: PostMessage( hWND, WM_USER_SHOWMSG, 100, 0 );
: }
:
: 왜 않되는지 좀 알려주세요...
: 인터넷 뒤지다가 나름 이해한 다음에 한건데..