2010-01-21 4 views
1

Win7에서 제목 표시 줄없이 MFC 응용 프로그램을 실행하고 있습니다 (예 : 내 제목 표시 줄은 복원 용, 최대화 및 닫기 용 사용자 지정 단추가 있습니다). Win7에서는 사용자가 윈도우를 화면 상단으로 드래그 할 때 Win 7 API에 의해 생성 된 maximize 이벤트에 응답합니다. 그러나 일단 최대화되면 사용자가 창을 맨 위로 끌 때 발생하는 복원 이벤트를 캡처 할 수 없습니다.최대화 된 창에서 끌기 이벤트를 처리하는 방법

두 번 누르면 복원이 처리되지만 복원 버튼을 클릭하면 복원이 처리되지만 발견 할 수없는 드래그는 처리됩니다.

if (message == WM_WINDOWPOSCHANGING) 
{ 
    // DETECT RESTORE MSG HERE. 
} 

을하지만 그것을 잡으려고하지 않는 것 :

나는 그것이 유사 것이라고 상상한다. 마치 최대화되었을 때 창을 움직일 수 없게 한 것처럼 보입니다.

아마 내가 WM_RESIZE를 막는 방법이 있을까요? 자동 크기 조정을 사용하려면 드래그 이벤트를 어떻게 처리합니까?

답변

0

앱에 제목 표시 줄이 없으므로 win7은 창 끌기를 처리하지 않으므로 WM_SYSCOMMAND를 전혀 보내지 않습니다. 즉, 제목 표시 줄이 있기 때문에 응용 프로그램이 제목 표시 줄 드래그를 차단하고있었습니다.

해결책은 우리의 조롱 된 제목 표시 줄에서 드래그를 부분적으로 감지하는 것입니다. 그 후에 창은 위치가 아닌 SIZE에서만 복원되어야합니다. Win7처럼 커서의 위치가 동적이어야합니다. 생각들, 사람들?

1

마우스가 사용자 정의 제목 표시 줄 위에있을 때 HTCAPTION (제목 표시 줄)을 반환하는 WM_NCHITTEST 메시지를 처리해 보았습니다. 따라서 더 이상의 사용자 정의없이 일반 Windows 처리가 가능합니다.

+0

나는 그것을 시도 할 것이다! 감사! –

+0

false 제목 표시 줄이 실제로는 리본 (CWnd)이므로 작동하지 않습니다. 히트 테스트를 캡처하여 HTCaption으로 반환하면 리본이 메인 프레임 주위로 드래그되고 창 가장자리에서 잘립니다. ( –

+0

) 불행한 점이있다. 나의 유일한 다른 생각은 메인 윈도우에서 "드래그 영역"이 보이도록 UI를 변경하는 것이다. 그러면 WM_NCHITTEST가 작동 할 것이다. 아마도 크롬의 작동 방식과 유사 할 것이다. – Ruddy

관련 문제