|
안녕하십니까?
몇 일 전에 문의드렸던 아래아 한글 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)
{
윈도우 및 컨트롤들의 위치와 크기를 조절하는 코드들
}
끝.
|