1. WndProc 를 작성하시면 됩니다.
2. uMsg=ResisterWindowMessage("WM_MYMESSAGE"); 에서 반환된 uMsg 값을
PostMessage(gForm[rp]->Handle, uMsg, rp, gId[rp]); 이렇게 보내면 됩니다.
ResisterWindowMessage("메세지 스트링"); 으로 등록된 값은 어느 Process 에서 실행하던지
같은 값을 리턴하게 되어있습니다. 보내는 프로그램이나 받는 프로그램이나 "메세지 스트링" 값을
일치 시킨다는 것이 중요!
공윤경 님이 쓰신 글 :
: BEGIN_MESSAGE_MAP( CMyWnd, CMyParentWndClass )
: ON_REGISTERED_MESSAGE( wm_Find, OnFind )
: // ... Possibly more entries to handle additional messages
: END_MESSAGE_MAP( )
: --> ON_REGISTERED_MESSAGE( wm_Find, OnFind )
: 1. MESSAGE_MAP을 사용하지 않고 폼에 받는부분을 수정한다면 뭘...써줘야 하나요???
:
: 2. RegisterWindowMessage 에서 반환된 메세지만 바꿔서 보내주면 되겠네요..
: ^^; 저..이말의 의미가 뭐죠?
:
:
:
:
:
:
: 강준구 님이 쓰신 글 :
: :
http://kr.ks.yahoo.com/service/ques_reply/ques_view.html?dnum=JAIAB&qnum=127167
: : 위 링크는 VC 에서 사용하는 방법인데 참고 하세요.
: :
: : 1. 이전 메세지를 사용하기 위해 BEGIN_MASSAGE_MAP 으로 선언된 Form 이 있다면
: : 그 Form 들은 수정 해줘야 메세지를 받을 수 있겠죠..
:
: :
: : 2. RegisterWindowMessage 에서 반환된 메세지만 바꿔서 보내주면 되겠네요..
: :
: : 3. 이미 if(Message.Msg==uMsg) 메세지를 처리해서 받고 있죠. 더 이상 switch 문이 필요 없을듯..
: : <참고> case 문 다음에는 상수만이 올 수 있죠. case WM_USR_MSG 는 문법 오류...
: :
: :
: :
: :
: :
: :
: : 공윤경 님이 쓰신 글 :
: : : 감이 잡혔다고 말씀드리고 싶지만 아직도 헷갈리고 잘 모르겠는...제 심정 이해해주셔으면~~ ㅠㅠ 합니다.
: : :
: : : ResigterWindowMessage로 처음에 등록하는건 제가 define한 예를 들어
: : : #define WM_MYMESSAGE WM_APP+1
: : : 이라면
: : : uMsg=ResisterWindowMessage("WM_MYMESSAGE"); <--FormCreate안에
: : :
: : : WndProc은 메인에 있거든요.
: : : void __fastcall TFormMain::WndProc(Messages::TMessage &Message)
: : : {
: : : if(Message.Msg==uMsg)
: : : switch (Message.Msg) {
: : : case WM_APP+1:
: : : ShowMessage("WM_APP+1");
: : : break;
: : : case WM_USR_MSG:
: : : ShowMessage("USR MSG");
: : : break;
: : : }
: : : TForm::WndProc(Message);
: : : }
: : :
: : : 걍 지금 이 메세지를 받아 오는지 안오는지라도 알려구 이렇게 했는데...
: : : 역시나 아무런 반응도 보이지 않네요.
: : :
: : : 질문 1) WndProc이라는게 저렇게 메인에 하나만 넣는것이 맞나요? 아니면 그 메세지를 발생시키는 모든 폼에 넣어줘야 하나요?
: : :
: : : 질문 2) 메세지를 발생시킨다고 해야하나? 그건 WndProc을 쓸때도 PostMessage를 사용해야 하나요?
: : : if(ret == ST_COMPLETE){
: : : PostMessage(gForm[rp]->Handle, WM_MYMESSAGE, rp, gId[rp]);
: : : } else {
: : : PostMessage(gForm[rp]->Handle, WM_MYMESSAGE, rp, (-1) * gId[rp]);
: : : rp = tp; //エラーが発生した場合、以降のメッセージを破棄(継続中エラーの場合が心配)
: : : }
: : :
: : : 현재 포스트메세지를 써준 부분이 이곳인데요... 이건 변화없이 사용해줘야 하나요?
: : : 아니라면 저부분은 어떻게 해야하나요? 일단 WM_MYMESSAGE라는 놈이 발생은 되어야 잡오던 어쩌든 할것 같은데 도~~~~~통 몰겠네요
: : :
: : : 질문 3) RegisterWindowMessage가 중복되는 선언을 막기위해 사용되는건가요?
: : : --------------------------------------------------------------------------------------
: : : #define WM_USR_MSG "Test"
: : :
: : : int MSG1 = RegisterWindowMessage(WM_USR_MSG);
: : : int MSG2 = RegisterWindowMessage(WM_USR_MSG);
: : :
: : : 위와 같이 사용하였을경우 성공했으면 xC000 through 0xFFFF 값을 리턴하고 실패했을경우 0을 리턴합니다.
: : : --------------------------------------------------------------------------------------
: : : 밑에 검색해서 본 설명에 보면
: : : 이렇게 나와있는데요 이렇게 쓴 메세지를 위에 제가 쓴 WndProc에서처럼 case문에 WM_USR_MSG를 쓰면
: : : 에러가 나네요. 무엇이 잘못된건가요?