Vista 도구 모음은 테두리 패딩 설정을 어떻게 무시하거나 파악할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1101653

문제

이전 버전의 Windows에서 개발된 도구 모음이 있는데, 이는 창의 새 테두리 패딩으로 인해 Vista에서는 대부분 잘립니다.기본 테두리 패딩 4를 사용하면 도구 모음의 모든 항목이 아래쪽과 오른쪽으로 4픽셀 이동되고 아래쪽과 오른쪽에서 모든 항목이 4픽셀 잘립니다.저는 수평 크기에 크게 신경 쓰지 않지만 수직 방향으로 이는 응용 프로그램이 표시되는 콘텐츠의 8픽셀을 잃는다는 것을 의미합니다.

"도구 모음"이란 다음과 유사하게 생성된 창을 의미합니다.

APPBARDATA  AppBarData;
AppBarData.hWnd = CreateWindowEx(WS_EX_TOOLWINDOW | WS_EX_TOPMOST, MAIN_WNDCLASS,
                                 "", WS_POPUP | WS_THICKFRAME | WS_CLIPCHILDREN,
                                 0, 0, 400, TOOLBAR_HEIGHT, NULL, NULL,
                                 AppInstance, NULL);
// more initialization  ....
SHAppBarMessage(ABM_NEW, &AppBarData);

테두리 패딩은 Vista에 새로운 것처럼 보이는 구성 항목이므로 XP와 Vista에서 모두 실행되는 응용 프로그램이 이를 어떻게 처리할 수 있습니까?내 질문은 다음과 같습니다

  1. 도구 모음에서 Vista에 "'테두리 패딩' 설정을 무시합니다.내 테두리 패딩은 0"인가요?
  2. 그렇지 않은 경우 응용 프로그램은 창을 그 양의 두 배로 늘릴 수 있도록 테두리 패딩이 어떻게 설정되어 있는지 파악합니까?
  3. 두 질문 모두 동일한 실행 파일이 XP, Vista, Win2003 등에서 작동하도록 허용하는 방식으로 이를 어떻게 수행합니까?
도움이 되었습니까?

해결책

한 가지 옵션은 WS_THICKFRAME으로 시작하여 다양한 창 스타일을 사용하는 것입니다.

패딩을 알아내려면 GetClientRect 및 GetWindowRect를 사용하고 다른 것에서 하나를 빼십시오.

다른 팁

별도로 주목해야 할 또 다른 사항은 이미 다음을 사용하여 창 테두리를 고려하려는 경우입니다. GetSystemMetrics 또는 이와 유사하게 컴파일하여 국경이 클라이언트 영역에 미치는 영향에 차이를 만드는 하위 시스템이 있습니다.

objectmix 링크 이것을 설명하려고 합니다.하위 시스템이 의미하는 바는 다음과 같습니다. /subsystem 링크할 때 플래그를 지정하세요. .exe, 또는 Visual Studio의 해당 설정입니다.

~ 보석

글쎄요, 알아냈어요.내 경우에는 문제의 원인은 WS_THICKFRAME 전화할 때 CreateWindowEx(), 필요하지 않았습니다.이 설정은 이전에 도구 모음에서 모든 항목을 세로로 가운데에 배치하는 데 사용되었습니다.WinXP(클래식 보기) 및 이전 버전에서는 WS_THICKFRAME 예상대로 모든 크기에 3픽셀의 패딩이 추가되었습니다.

따라서 해당 옵션을 제거하고 모든 항목을 3픽셀 아래 오른쪽으로 이동하도록 코드를 변경했습니다.이제 도구 모음은 WinXP와 Vista에서 동일하게 보이며 (이 도구 모음의 경우) 짜증나고 불필요한 추가 패딩이 없습니다.

이것은 일반적인 경우를 해결하지 못하지만 내 답변이 이 문제를 겪는 다른 사람들에게 도움이 될 수 있으므로 내 솔루션을 게시해야겠다고 생각했습니다.이것이 다른 사람에게 도움이 되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top