2009-03-10 3 views
1

MFC에서 CStatusBarCtrl을 사용할 때 GetItemRect를 사용하여 CStatusBar 내의 각 항목의 경계를 가져옵니다.CStatusBarCtrl GetItemRect XP 매니페스트

그러나 이제는 문제가 발생합니다. exe에서 XP 매니페스트를 사용합니다. 마우스가 컨트롤의 맨 오른쪽에있을 때 더 이상 올바르게 식별 할 수 없도록 올바른 사각형을 반환하지 않습니다.

GetStatusBarCtrl().SetTipText(n - 1, _T("Test")); 

CStatusBarCtrl가 생성되고 창 SetPaneInfo로 만들어지고 팁 텍스트 위와 같이 설정 텍스트가 표시되지 않습니다 마우스를 :

문제는이 같은 방법으로 테스트 할 수 있습니다 맨 오른쪽 측면 창 위에.

이 문제는 elsewhere으로보고되었습니다. 그러나 만족스러운 답을 얻지 못했습니다.

해결책이 필요하거나 주위를 해결하는 것이 좋습니다.

답변

0

내 첫 번째 추측은 Vista와 XP의 '테마'의 차이점입니다. CFrameWnd를 사용하는 경우 상태 막대의 맨 오른쪽에있는 마지막 분할 창에 그리퍼 컨트롤이 있음을 기억하십시오. 따라서, ComCtl32.dll의 변경 사항이이를 설명 할 수있는 것처럼 보이므로 더 작은 rect를 제공합니다. 나는 당신이 이전에했던 것보다 더 작은 rect.Width()를보고 있다고 가정한다. 당신은 작은 X와 Y에 대해서 이야기하지 않고 있습니다. 동시에 당신입니까?

당신이, 당신이 올바른 버전을보고 앱을 배포하거나 매니페스트가 사용하는 버전을 반영하도록 할 수 있습니다해야하는 경우

...

미안 명확한 컷이없는 대답,하지만 주제가 마음에 와서 유일한 이유는 VC6에서 올바르게 그리면 그리퍼가 상태 표시 줄 위에 추가되었거나 상태 표시 줄이 표시되기에 충분했기 때문입니다 ...

사용할 수있는 제안 중 하나는 실행중인 Windows 버전을 감지하고 OS 용 그리퍼를 가정합니다. 그리퍼는 VScroll 막대와 동일한 크기이므로 런타임에 마지막 셀에서 자연스럽게 많은 DLU (또는 픽셀)를 제거하고이를 기반으로 텍스트를 렌더링 할 수 있습니다. 나는 집에 가서 VC6을 작동시켜야하고, 여기에 무슨 말을하는지에 근거하여 어떻게 작동하는지 확인해야 할 것이다. ...

나는 그것이 가지고있는 ComCtl32.dll의 버전을보기 위해 편리하게 Vista VM을 가지고 있지 않다. 기본적으로 설치되어 있지만 그리퍼를 다루기 위해 일부 코드를 넣었을 것으로 추측됩니다.

당신이 완전한 샘플 코드가있는 경우, 그 정말 그렇지 않으면, 나는 나의 오래된 VC6 코드를 생성 한 모든 파고 시작하고 거기에서 갈 필요가 ... 너무 날 일을 더 쉽게 만들 것 ...

흥미로운에게 테스트는 우리가 생각할 수있는 부분에 대해 GetSystemMetrics를 호출하고 시스템마다 시스템이 어떻게 다른지 살펴볼 것입니다. Vista를 "Windows Classic"모드로 전환해도 여전히 동일한 결과가 표시됩니까?

또한 어떤 컴퓨터가 개발자 박스입니까? Vista 또는 XP?

+0

추가 세부 정보가 추가되었습니다. – JProgrammer

관련 문제