|
임문환 님이 쓰신 글 :
: 안녕하십니까?
:
: 몇 일 전에 문의드렸던 아래아 한글 DDE 문제는 해결했습니다.
:
: 이 번에는 다른 질문을 드리고자 합니다.
:
: 모니터의 해상도가 변경된 경우 발생하는 WM_DISPLAYCHANGE 메시지에 반응하는 이밴트 처리기를 아래와 같이 구현하였습니다.
:
: 그런데 이상하게도 프로그램을 실행해둔 상태에서 제어판의 디스플레이에서 해상도를 변경하면
: 해당 이밴트 처리기인 WMDisplayChange가 호출되지 않고 Form1 내의 다른 메서드(이름은 완전히 다름)가 호출됩니다.
:
: 호출되는 메서드의 이름은 WMDisplayChange와는 전혀 다른 것으로서 코딩시 잘 못 입력할 수도 없는 그런 것입니다.
: 한편 잘못 호출된 메서드조차도 제대로 기능을 하지 않습니다.
: 무슨 문제가 있는 것일까요?
:
: 참고로 WM_NCHITTEST 메시지에 반응하는 WMNCHitTest는 제대로 작동합니다.
:
: 헤더 파일의 내용:
: class TForm1 : public TForm
: {
: __published:
:
: private:
: void __fastcall WMNCHitTest(TMessage &Msg);
: void __fastcall WMDisplayChange(TMessage &Msg);
:
: public:
: BEGIN_MESSAGE_MAP
: MESSAGE_HANDLER(WM_NCHITTEST,TMessage,WMNCHitTest)
: MESSAGE_HANDLER(WM_DISPLAYCHANGE,TMessage,WMDisplayChange)
: END_MESSAGE_MAP(TForm)
: };
:
:
: 유닛 파일의 내용:
: void __fastcall TForm1::WMNCHitTest(TMessage &Msg)
: {
: if(GetAsyncKeyState(VK_LBUTTON)<0)
: Msg.Result = HTCAPTION;
: else
: Msg.Result=HTCLIENT;
: }
:
: //---------------------------------------------------------------------------
: void __fastcall TForm1::WMDisplayChange(TMessage &Msg)
: {
: 윈도우 및 컨트롤들의 위치와 크기를 조절하는 코드들
: }
:
: 끝.
제가 그대로 코딩해서 실행해 봤는데 저는 문제없이 잘 돌아가던데요..
혹시 원인이 다른 곳에 있지 않을까요?
아니면 BEGIN_MESSAGE_MAP 부분에서
MESSAGE_HANDLER(WM_DISPLAYCHANGE, TMessage, WMDisplayChange)를
MESSAGE_HANDLER(WM_DISPLAYCHANGE, TWMDisplayChange, WMDisplayChange)로 바꾸고
함수의 인자형도 바꿔보시겠어요?
제가 별로 아는 것도 없는데 주절거렸나봅니다.....^^
|