|
TCustomControl을 상속받아 에디터를 만들고 있습니다.
좀 특수한 에디터라 Memo나. RichEdit 등은 상속받아봐야 쓸모가 없고...
암튼.. Caret을 출력하기 위해
Focus를 잡으려 하는데요.. Focus들어오면 Caret이 보이고 나가면 안보이고..
근데.. Message를 Mapping해도 WM_SETFOCUS가 안잡히는군요.
동일한 형식으로 WM_SIZE나 기타 메시지는 잘 잡히는데 유독 WM_SETFOCUS만 안되네요.
게시판 검색해서 모두 살펴봐도 뭐가 잘못된건지......
아래는 골격입니다. 좀 도와주셨으면 합니다..
/////////////////////////////////////////popedit.h
#ifndef PopEditH
#define PopEditH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>
//---------------------------------------------------------------------------
class PACKAGE TPopEdit : public TCustomControl
{
private:
MESSAGE void __fastcall WMSetFocus(TWMSetFocus &Message);
MESSAGE void __fastcall WMKillFocus(TWMKillFocus &Message);
protected:
public:
__fastcall TPopEdit(TComponent* Owner);
__fastcall ~TPopEdit();
__published:
BEGIN_MESSAGE_MAP
//VCL_MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize);
VCL_MESSAGE_HANDLER(WM_SETFOCUS, TWMSetFocus, WMSetFocus);
VCL_MESSAGE_HANDLER(WM_KILLFOCUS, TWMKillFocus, WMKillFocus);
END_MESSAGE_MAP(TCustomControl);
};
//---------------------------------------------------------------------------
#endif
////////////////////////////////////////popedit.cpp
#include <vcl.h>
#pragma hdrstop
#include "PopEdit.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(TPopEdit *)
{
new TPopEdit(NULL);
}
//---------------------------------------------------------------------------
__fastcall TPopEdit::TPopEdit(TComponent* Owner)
: TCustomControl(Owner)
{
}
__fastcall TPopEdit::~TPopEdit()
{
}
//---------------------------------------------------------------------------
namespace Popedit
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TPopEdit)};
RegisterComponents("Samples", classes, 0);
}
}
//---------------------------------------------------------------------------
void __fastcall TPopEdit::WMSetFocus(TWMSetFocus& message)
{
Application->MessageBox("got", "aha", MB_OK);
}
void __fastcall TPopEdit::WMKillFocus(TWMKillFocus& message)
{
Application->MessageBox("lost", "aha", MB_OK);
}
|