|
답변 고맙습니다.
그런데 제가 만들려고 하는 컴포넌트는 Non-Visual로 메세지에 반응하여 동작하는 컴포넌트입니다. 아래 소스는 예제로 만든것이고 실제로는 WM_SIZE가 아닌 사용자정의 메세지를 받아 동작하도록 하려고 합니다. 이런 컴포넌트는 어떻게 해야 할까요?
임문환.실업자 님이 쓰신 글 :
: Starlet 님이 쓰신 글 :
: : 안녕하세요. 메세지를 잡아 처리하는 컴포넌트를 만들었는데 메세지에 반응을 하지 않습니다.
: : 헤더파일은...
: :
: : #ifndef Component1H
: : #define Component1H
: : //---------------------------------------------------------------------------
: : #include <SysUtils.hpp>
: : #include <Classes.hpp>
: : #include <Forms.hpp>
: : //---------------------------------------------------------------------------
: : typedef void __fastcall (__closure *TFormResize)(TObject *Sender, int Width, int Height);
: : class PACKAGE TComponent1 : public TComponent
: : {
: : private:
: : void __fastcall OnFormResize(TMessage &Message);
: : TFormResize FOnResize;
: : protected:
: : public:
: : __fastcall TComponent1(TComponent* Owner);
: : BEGIN_MESSAGE_MAP
: : VCL_MESSAGE_HANDLER(WM_SIZE, TMessage, OnFormResize)
: : END_MESSAGE_MAP(TComponent)
: : __published:
: : __property TFormResize OnResize = {read=FOnResize, write=FOnResize};
: : };
: : //---------------------------------------------------------------------------
: :
: : 위와 같이 하여 WM_SIZE 메세지에 OnResize 이벤트가 발생하도록 OnFormResize함수내에 코딩하였습니다. 그런데 OnFormResize 자체가 실행이 되지 않는군요. WM_SIZE 메세지가 들어오지 않는다는 것인데 어디를 고쳐줘야 할지 난감합니다.
: : 도움 부탁드립니다. 추가로 컴포넌트 소스도 첨부파일로 올립니다..
:
: TComponent 도움말을 보면 TComponent는 "non-visual"입니다.
: non-visual 이므로 Windows OS가 관련 이벤트를 발생하지 않는 것입니다.
:
: visual 컴포넌트를 제작하시려면 TControl 또는 그 파생클래스를 사용하라는군요.
|