컨트롤에 이벤트에 없는 메세지를 처리하려면?
1. MESSAGE_MAP 이용하는 방법
2. Sub-Classing
3. Dispatch
4. 기타...
위와 같은 방법이 있을수 있겟네요
1. MESSAGE_MAP은
void __fastcall TForm1::WindowPosChangeProc(TMessage &message );
void __fastcall TForm1::SetTingChangeProc(TMessage &message );
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_WINDOWPOSCHANGING,TMessage ,WindowPosChangeProc)
MESSAGE_HANDLER(WM_SETTINGCHANGE,TMessage ,SetTingChangeProc)
END_MESSAGE_MAP(TForm)
위와같은 식으로 사용합니다.
2. Sub-Classing은?
TWndMethod OrignalWinProc;
//--------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
OrignalWinProc= this->WindowProc;
this->WindowProc = NewWindowProc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NewWindowProc(TMessage& Msg)
{
OrignalWinProc(Msg);
switch(Msg.Msg)
{
case WM_WINDOWPOSCHANGING:
//.....
break;
case WM_WM_SETTINGCHANGE:
//.....
break;
};
}
//---------------------------------------------------------------------------
3. Dispatch
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=542
요걸 참조하세요
; 얼른 봐서 문제없을것 같은데.. 에러 난다니 좀
4.기타
****
그럼
조상진 님이 쓰신 글 :
: 안녕하세요.. __);
:
: 답변 정말 감사드립니다.. ㅠ.ㅠ~
:
: 그런데 Form 속성의 이벤트에 있는 메시지를 여쭈어 본거였습니다.
: (OnClose나 OnDestroy 등등요)
:
: 제가 빌더에서 WndProc 사용하는 법을 알지 못하는지라... Form 속성의 이벤트중 하나가 발생하지 않을까 싶어서
:
: 질문 드렸습니다.
:
: WndProc 사용하는법을 1시간 넘게 이곳 게시판에서 뒤지고 있으나 자꾸 오류가 발생해서 그러는데요..
:
: 사용법좀 알려주실수는 없는지요.
:
: 방법은 이걸 사용했습니다.
: --헤더--
: virtual void __fastcall Dispatch(void *Message);
: --소스--
: void __fastcall TFormBottom::Dispatch(void *Message)
: {
: TMessage *msg = (PMessage)Message;
:
: 이렇게 했는데 자꾸 TMessage *msg = (PMessage)Message 부분에서 읽기위반이 발생했다고 합니다.
:
: 빌더는 6 입니다.. __);
:
:
: 장성호 님이 쓰신 글 :
: : Form의 Align을 alBottom으로 설정하지않고
: : 그런기능을 구현하려 하는건가요?
: :
: : spy로 보니 아래와 같은 메세지가 발생하네요
: :
: : WM_WINDOWPOSCHANGING
: : WM_GETMINMAXINFO
: : WM_SETTINGCHANGE
: :
: : 위 메세지때 taskbar의 정보를 읽어와서 구현하면 되겠네요
: :
: : 그럼...
: :
: :
: : 조상진 님이 쓰신 글 :
: : : 안녕하세요.. __);
: : :
: : : 빌더를 이용하여 프로그램 작성중 궁금한 점이 생겨서 문의 드립니다.
: : :
: : : 폼을 하나 생성하고 Align 속성을 alBottom으로 해서 데스크탑 화면 바닥에 탁 붙도록 했습니다.
: : :
: : : 그리고 FormShow()에서 데스크탑 화면 사이즈를 얻고, 태스크바(윈도우 시작버튼이 붙어있는것을 지칭하는건데요. 맞는 용어지요?)의 크기를 빼서 해당폼의 Heigh를 변경해 주게 만들었습니다.
: : :
: : : 이렇게 하면 처음 화면에 뜰때는 태스크바를 감추건 크기를 화면 절반만하게 바꾸어놓건 상관이 없는데요.
: : :
: : : 문제는 폼이 뜬 후에 사용자가 태스크바의 상태를 바꿀경우 크기가 애매해집니다.
: : :
: : : Align 속성을 alBottom으로 했을때 사용자가 태스크바의 상태를 변경하면 발생하는 이벤트가 무엇인가요?
: : :
: : : alBottom으로 하면 자동으로 태스크바의 높이에 따라 폼의 위치가 변하는 것을 보면 분명 무슨 이벤트가 있을 것 같은데요?
: : :
: : :
: : : 태스크바를 감추는 방법으로 해결해서는 안됩니다.
: : :
: : : 아시는 분은 초보에게 조언좀 부탁드립니다.. __);
: : :
: : : 그럼 만들고자 하시는 대로 즐프되시기 바랍니다.. ^^