프로그래밍을 통해 XP 스타일을 구현하는 것에 대해 오랫동안 인터넷에서 논의가 있었지만 VB 프로그래밍을 통해 XP 스타일을 구현하기 위한 완벽한 솔루션은 없습니다. 저자는 N일 밤낮의 고된 공부를 통해 마침내 그 비밀을 밝혀냈다. 다음은 세 가지 측면으로 나누어 여러분과 공유합니다.
소스코드 파일을 다운로드하려면 클릭하세요.
하나. 매니페스트 파일을 사용하여 XP 스타일 구현
일반적인 상황에서 Windows XP 시스템에서는 VB6으로 개발된 응용 프로그램의 창 제목 표시줄만 XP 스타일을 가지며 양식의 단추, 텍스트 상자 및 기타 컨트롤은 여전히 전통적인 Windows 스타일을 표시합니다. 그림 1에 표시된 대로:
MSDN의 시각적 스타일 장을 참조하면 Windows XP가 Comctl32.dll(버전 6)을 사용하여 XP 스타일로 구성 요소를 로드하고 응용 프로그램이 XML 리소스 파일을 통해 이를 수행하도록 시스템에 알린다는 것을 알 수 있습니다. XML 파일의 내용은 다음과 같습니다.
<?xml 버전=1.0 인코딩=UTF-8 독립형=예?>
<어셈블리 xmlns=urn:schemas-microsoft-com:asm.v1 매니페스트 버전=1.0>
<어셈블리ID
name=XP 스타일 매니페스트
프로세서아키텍처=x86
버전=1.0.0.0
유형=win32/>
<의존성>
<종속 어셈블리>
<어셈블리ID
유형=win32
이름=Microsoft.Windows.Common-Controls
버전=6.0.0.0
프로세서아키텍처=x86
publicKeyToken=6595b64144ccf1df
언어=*
/>
<//의존어셈블리>
<//의존>
</조립>
최종 컴파일된 프로그램의 이름이 abc.exe이고 작업 디렉터리가 d:/vbxp라고 가정합니다. 위의 XML 내용을 복사하여 텍스트 파일로 저장합니다. 그런 다음 파일 이름을 abc.exe.manifest로 바꿉니다(.txt 확장자는 제거되어야 합니다). VB 프로그램에서는 모든 양식이 로드되기 전에 InitCommonControlsEx 함수를 호출하여 comctl32.dll(버전 6)에서 구성 요소 클래스를 초기화해야 합니다. API 함수 InitCommonControlsEx와 관련 상수 및 데이터 유형은 다음과 같이 선언됩니다.
개인 선언 함수 InitCommonControlsEx Lib comctl32.dll _
(iccex As tagInitCommonControlsEx) As 부울
개인 유형 tagInitCommonControlsEx
lng크기를 길게
lngICC는 오랫동안
끝 유형
개인 Const ICC_USEREX_CLASSES = &H200
여기서는 초기화 작업을 캡슐화하는 함수를 작성합니다.
공용 함수 InitCommonControlsVB() As Boolean
오류 발생 시 다음 재개
Dim iccex는 tagInitCommonControlsEx로 사용됩니다.
Iccex와 함께
.lngSize = LenB(iccex)
.lngICC = ICC_USEREX_CLASSES
끝
InitCommonControlsEx iccex
InitCommonControlsVB = (Err.Number = 0)
오류 발생 시 0으로 이동
기능 종료
주의할 점은 모든 폼이 로드되기 전에 초기화 작업이 완료되어야 하므로 관련 문은 Sub Main()에 배치하고, 프로젝트는 Sub Main()에서 시작해야 한다는 점입니다. 코드는 다음과 같습니다:
서브메인()
InitCommonControlsVB
Form1.Show
서브 끝
이 시점에서 컴파일된 abc.exe는 그림 2와 같이 XP 스타일을 갖게 됩니다.