음..
조금전에 QnA 게시판에 질문이 올라와서
답변달아 주고.. 여기에 팁으로 남겨둡니다.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=65946
ClassName을 변경한다는 뜻은?
FindWindow(classname,caption) 로 window-handle을 찾을수 있도록
window(OS)에 등록되는 classname을 변경한다는 뜻입니다.
보통은
제목이 혹시 의아하실지 모르겠는데요
RadStudio에서 Form의 ClassName 변경은
그냥 Object-Inspector에서 Form의 Name을 변경해주면 됩니다.
아주 간단하죠
VCL의 className 제한
그런데 VCL에서 Form의 이름에는 제한이 많습니다.
1. 특수문자를 Classname에 사용할수 없고
2. 첫자리에는 숫자가 들어갈수 없으며
3. 공백문자를 넣을수 없습니다.
classname변경하기
특수문자가 포함되도 되구..
여튼 원하는데로 className을 변경하려면 어떻게 하면 될까요?
뭐 이것도 간단합니다.
링크에 설명해 뒀듯이 Form의 CreateParams를 override하여서
TCreateParams 구조체의 WinClassName을 변경해주시면 됩니다.
다음과 같이...
void __fastcall TForm1::CreateParams(Controls::TCreateParams &Params)
{
TCustomForm::CreateParams(Params);
StrLCopy(Params.WinClassName, _D("Ca. Test"), (sizeof(Params.WinClassName) / sizeof(Char)) - 1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HWND hWnd=FindWindowW(L"Ca. Test",NULL);
if(hWnd==this->Handle)
{
ShowMessage("TForm1의 ClassName은 Ca. Test 입니다.");
}
}
//---------------------------------------------------------------------------
그럼..
|