2016-06-02 11 views
0

대화 상자를 동적으로 생성하는 응용 프로그램이 있습니다. Visual Studio 6.0을 사용하여 빌드했습니다. VS2013로 다시 전환하고 빌드하기 위해 필요한 조정을했습니다. 최근까지 앱을 출시하지 않았습니다. 그런 다음 사용자가 대화 상자가 요청한 것보다 작아지는 Windows 7 Aero 테두리 패딩 문제 (여기에있는 다른 게시물에서 언급)를 보았습니다. 즉, Aero 테두리 패딩이 요청 된 창 크기에서 가져온 것이므로 내 컨트롤이 요청 된대로 창 중앙에 제대로 표시되지 않습니다. 내 바탕 화면의 테두리 채우기를 1로 설정 했으므로이 문제를 결코 알지 못했습니다.Visual Studio 2013의 대화 상자 경계선 패딩 문제가 릴리스 모드에서만 발생합니다.

정말 이상한 일은 이 아니고 디버그 용으로 앱을 빌드 할 때이 아닌 것입니다. 디버그 및 릴리스 버전을 나란히 실행하면 대화 상자의 크기가 테두리 패딩의 두께와 다른 것을 볼 수 있습니다. 시스템 라이브러리의 디버그 대 릴리스 버전이 링크 된이 동작의 다른 구현을 가지고 있다고 생각합니다.

이 대화 상자를 구성하는 내 논리에서 클라이언트 영역의 크기를 계산 한 다음 창을 만들기 전에 프레임 메트릭을 추가합니다. 잘못 되었습니까? 즉, 모든 버전의 Windows 및 모든 컴파일러에서 작동하는 '더 정확한'방법입니다.

+0

방금 ​​GetSystemMetrics (SM_CXPADDEDBORDER)를 찾았으며 요청한 창 크기에 2 *를 추가하려고했습니다. 대부분 문제를 해결하지만 완전히는 아닙니다. 릴리스 버전은 여전히 ​​디버그 버전보다 약간 작은 창을 가져옵니다. 이상하게도, 나는 디버그 버전의 윈도우가 단순히 같은 양만큼 증가 할 것으로 예상했지만, 그렇게 보이지는 않았다. GetSystemMetrics (SM_CXPADDEDBORDER)는 앱의 릴리스 버전에서는 8 (Aero에서 테스트 한 패딩 값)을 반환하지만 디버그 버전에서는 0을 반환합니다. 이거 너 뭐야? – littlenoodles

+0

또 다른 이상한 점이 있습니다. 내 응용 프로그램은 MDI를 사용하며 MDI 창이 최대화되는 경우에만 실제 팝업 대화 상자를 만듭니다. 최대화되지 않은 경우 MDI 하위 항목으로 팝업을 만듭니다. 디버그 버전에서 MDI 자식 'popups'크기를 조정할 수없는 경우 테두리 채우기 전혀 가져 오지 않습니다. 그러나 릴리스 버전에서는 크기를 조정할 수없는 MDI 자식에 테두리 채우기를 적용합니다. 방금 VS2013이라는 버그가 있습니까? 2015 년에 해결하겠습니까? – littlenoodles

답변

0

좋아요, 대답이 있습니다. 릴리스 및 디버그 버전은 다양한 국경 관련 시스템 메트릭에 대해 완전히 다른 값을보고합니다.

디버그 : SM_CXPADDEDBORDER = 0 SM_CXBORDER = 1 SM_CXSIZEFRAME = 12 SM_CXFIXEDFRAME = 3

발매 SM_CXPADDEDBORDER = 8 SM_CXBORDER = 1 SM_CXSIZEFRAME = 4 SM_CXFIXEDFRAME = 3

그래서 요청한 창 크기에이 모든 내용을 추가하면 두 버전 모두 작동하는 것처럼 보이지만 결과는 다릅니다. 디버그 버전의 크기를 조정할 수없는 창은 패딩 된 테두리를 가져 오지 않고 크기를 조정할 수있는 테두리가 커지지 만 '크기 프레임'은 '패딩'이 아닙니다.

흥미롭게도 프로젝트 속성을 보면 디버그 구성의 링커 명령 줄에는 /SUBSYSTEM:WINDOWS",5.01 "이 있고 릴리스 구성에는/SUBSYSTEM : WINDOWS 만 있습니다. 실제 myapp.vcxproj 파일에는 5.01이 표시되지 않으므로 VS 2013에서 동적으로 디버그 구성에 ", 5.01"을 삽입하여 특정 호환 모드를 강제로 적용한다고 생각합니다. 링커 "시스템"섹션에서 지정하려고 시도했지만 명령 줄에 내 변경 사항이 표시되지 않았습니다. 수동으로 설정하는 것이 가능한지 (또는 권장) 아는 사람이 있습니까?