답변 감사합니다
전 콤포넌트의 메세지는 일반적인 메세지하고 다른가싶었거든요
콤포넌트도 만들고 연습도 할겸 배울겸 만드는거에요 뭐든지
해봐야 늘지않겠어요?
답변 감사합니다
장성호 님이 쓰신 글 :
: 컴포넌트를 만들고 계시는것 같으데요
: 몇가지 참고글을 적으면..
:
: 1. WM_KEYDOWN 메세지를 써야하는것이 맞는것 같구요
:
: 2. CM_xxx , CN_xxx 는
: VCL에서 만들어낸 메세지거나, 필요에 의해 변경한 메세지 입니다.
:
: 3. 그리고..
: MESSAGE_MAP을 이용하여 메세지를 sub-classing 하는것 보다
: 이미 TControl 클래스에서 WM_KEYDOWN관련 메세지는 처리되어있습니다.
:
: 그것을 오버라이딩 해서 쓰는것이 더 좋을것 같습니다.
:
: 그래야 OnKeyDown이벤트 등 기타 동작코딩을 따로 해주지 않아도 간단히 처리할수 있기 때문이죠
:
: DYNAMIC void __fastcall KeyDown(System::Word &Key, Classes::TShiftState Shift);
:
: 위와 같이 TWinControl에 Dynamic( Virtual로 비슷한 놈임) 으로 선언되어있으니
: 이놈을 똑같이 DYNAMIC 키워드를 써어 오버라이딩 해서 컴포넌트를 만들면 좋을것 같습니다.
:
:
: 그럼..
:
:
: 박목월 님이 쓰신 글 :
: : 우선 헤더파일엔 아래처럼 되어있습니다
: :
: : typedef void (__closure *KeyInput)(System::TObject *Sender, Word &Key);
: : class PACKAGE TPangyas : public TCustomControl
: : {
: : private:
: : KeyInput FKeyDown;
: : protected:
: :
: :
: : public:
: : __fastcall TPangyas(TComponent* Owner);
: : MESSAGE void __fastcall VNKey_Downs(TMessage &Message);
: : BEGIN_MESSAGE_MAP
: : MESSAGE_HANDLER(CM_APPKEYDOWN,TMessage,VNKey_Downs);
: : END_MESSAGE_MAP(TCustomControl)
: :
: : __published:
: : __property KeyInput OnKeyDowns = {read=FKeyDown,write=FKeyDown};
: : };
: :
: : 그리거 cpp파일엔 이렇게 되어있습니다
: :
: : static inline void ValidCtrCheck(TPangyas *)
: : {
: : new TPangyas(NULL);
: : }
: : //---------------------------------------------------------------------------
: : __fastcall TPangyas::TPangyas(TComponent* Owner)
: : : TCustomControl(Owner)
: : {
: : }
: : //---------------------------------------------------------------------------
: : namespace Pangyas
: : {
: : void __fastcall PACKAGE Register()
: : {
: : TComponentClass classes[1] = {__classid(TPangyas)};
: : RegisterComponents("Standard", classes, 0);
: : }
: : }
: : //---------------------------------------------------------------------------
: : MESSAGE void __fastcall TPangyas::VNKey_Downs(TMessage &Message)
: : {
: : if(FKeyDown)
: : FKeyDown(this,Message.WParamLo);
: :
: : 이렇게 해뒀습니다
: : 그런대해보니 동작이 되지 않습니다
: : CN_KEYDOWN 메시지로해봐도그렇고요
: : CM_MOUSEENTER 로 해보니 잘되더군요
: : 근데 키입력이 CN_KEYDOWN이 맞는건가요? 키입력 이벤트는 어떤걸써야되는지요
: : 위소스에서 잘못된 부분은 어떤것인지 잘못된거면
: : 어떻게 수정해야되는지 알려주세요
: : 자꾸 이것만 건드리고있는데 당췌 안되네요