|
음.. 질문하신분 윈도우 메세지 이벤트 핸들러에 대한 이해가 조금 부족하신듯합니다.
간단하게 이부분에서 사용하는 OnMessages 이벤트 핸들러 사용법을 알려드리겟습니다.
상세한 정보는 관련정보를 더 찻아보세요.
메세지 이벤트 핸들러 등록은 Head파일에서 해 줘야 합니다.
protected: // 일반적으로 사용하는 것이구요.
BEGIN_MESSAGE_MAP // 메세지 맵 시작 매크로입니다.
VCL_MESSAGE_HANDLER(WM_DEVICECHANGE, TMessage, OnMessages) // 메세지 핸들러 등록 OnMessages 라는 메세지 핸들러이름 보이시죠? 이것은 WM_DEVICECHANGE 메세지에 대하여서는 TMessage라는 인자를 가지고 OnMessages 라는 함수에서 처리 하겟다는 뜻입니다.
END_MESSAGE_MAP(TForm) // 메세지맵 매크로 종료. 이렇게 하면 TForm으로 들어오는 WM_DEVICECHANGE 메세지에 대하여 핸들러 등록완료입니다.
만약 다른 메세지에 대해서도 OnMessages에서 처리하겟다 하시면 BEGIN_MESSAGE_MAP과 END_MESSAGE_MAP 사이에 아래와 같이 추가 해주시면 됩니다. BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_DEVICECHANGE, TMessage, OnMessages)
VCL_MESSAGE_HANDLER(다른메세지이름, TMessage, OnMessages) // 추가할 메세지 핸들러.
END_MESSAGE_MAP(TForm)
물론 다른 메세지 이벤트 핸들러를 쓰시겟다면 OnMessages 이름만 변경해주고 cpp 에 함수 추가해 주면 되겟지요. 우선 이것은 생각하지 마시고 아래부분 적용해 보시기 바랍니다.
이것을 적용하는 방법은요. 헤드파일의 클래스 안에서 적어 주심 됩니다.
제가 쓴 해드파일 요약해서 올려드릴께요.
//---------------------------------------------------------------------------
class TComPortForm : public TForm
{
private:
.
.
.
__published: // IDE-managed Components
.
.
.
public: // User declarations
__fastcall TComPortForm(TComponent* Owner);
__fastcall ~TComPortForm();
void __fastcall OnMessages(Messages::TMessage &Message); // 핸들러 선언부. 필수입니다.
.
.
.
__published:
__property int EndPortNo = { read=GetEndPortNo, write=SetEndPortNo, default=100 };
__property int StartPortNo = { read=GetStartPortNo, write=SetStartPortNo, default=1 };
// 위에 class 선언부 빼고는 제 소스 해더 파일 너무길어서 대충 짤라 낸것입니다.
protected: // 이부분입니다. class TComPortForm 안에 아래구문 적어주시면 됩니다.
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_DEVICECHANGE, TMessage, OnMessages)
END_MESSAGE_MAP(TForm)
}; // end of class TComPortForm 입니다.
헤더 파일은 이렇게 정의하시구요. 실제로 OnMessages 소스(이전에 올려드린거)는 cpp 화일안에 두시면 됩니다. 물론 클래스 명은 님의것으로 해야겟지요.
즐겁게~ 님이 쓰신 글 :
: 답변주신대로 OnMessages() 사용을 시도하고 있습니다.
: 그런데 OnMessages() 적용이 제대로 안되지 않나 생각이 들어서요...
:
: 제가 만든 폼에서 이벤트를 확인하면, OnMessages()란 이벤트가 없습니다.
: (비슷한 것도 없구.. ㅠ.ㅠ)
: 그래서 통신하는 폼이 있는 곳에서 그 이벤트를 추가를 해보았습니다.
: 그렇게 적용하는 것이 맞는지...
:
: 그리고, 도움말에서 OnMessages는 검색이 안되고, OnMessage로 검색되어
: void __fastcall TStartMain::FormCreate(TObject *Sender)
: {
: Application->OnMessage = AppMessage;
: }
: void __fastcall TStartMain::AppMessage(tagMSG &Msg, bool &Handled)
: {
: }
: 같은 방법으로도 적용을 해보았습니다.
:
: 그런데, 위의 두 가지 방법 모두 이벤트가 발생되지 않는걸보면
: 적용이 잘못된거 같은 생각이 들기도 합니다.
: 죄송스럽지만, OnMessages 적용 방법에 대한 설명도 부탁드릴게요~ ^^;;
|