มีการพูดคุยกันบนอินเทอร์เน็ตเกี่ยวกับการนำสไตล์ XP ไปใช้ผ่านการเขียนโปรแกรมมาเป็นเวลานาน แต่ไม่มีวิธีแก้ปัญหาที่สมบูรณ์แบบสำหรับการนำสไตล์ XP ไปใช้ผ่านการเขียนโปรแกรม VB ในที่สุดผู้เขียนก็ได้เปิดเผยความลับผ่านการศึกษาอย่างหนักทั้งกลางวันและกลางคืน ต่อไปนี้จะแบ่งออกเป็นสามด้านที่จะแบ่งปันกับคุณ
คลิกเพื่อดาวน์โหลดไฟล์ซอร์สโค้ด
หนึ่ง. การใช้ไฟล์ Manifest เพื่อให้ได้สไตล์ XP
ภายใต้สถานการณ์ปกติ ในระบบ Windows XP เฉพาะแถบหัวเรื่องหน้าต่างของแอปพลิเคชันที่พัฒนาด้วย VB6 เท่านั้นที่มีสไตล์ XP และปุ่ม กล่องข้อความ และตัวควบคุมอื่นๆ บนแบบฟอร์มยังคงแสดงสไตล์ Windows แบบดั้งเดิม ดังแสดงในรูปที่ 1:
เมื่อศึกษาบท Visual Style ใน MSDN เราทราบว่า Windows XP ใช้ Comctl32.dll (เวอร์ชัน 6) เพื่อโหลดส่วนประกอบที่มีลักษณะ XP และแอปพลิเคชันจะแจ้งให้ระบบดำเนินการนี้ผ่านไฟล์ทรัพยากร XML เนื้อหาของไฟล์ XML มีดังนี้:
<?xml version=1.0 encoding=UTF-8 แบบสแตนด์อโลน=ใช่?>
<แอสเซมบลี xmlns=urn:schemas-microsoft-com:asm.v1 manifestVersion=1.0>
<เอกลักษณ์การประกอบ
name=รายการสไตล์ XP
สถาปัตยกรรมตัวประมวลผล = x86
เวอร์ชัน=1.0.0.0
ประเภท=win32/>
<การพึ่งพาอาศัยกัน>
<สภาประกอบอิสระ>
<เอกลักษณ์การประกอบ
ประเภท=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 เป็น tagInitCommonControlsEx) เป็นบูลีน
tagInitCommonControlsEx ประเภทส่วนตัว
lngSize นานที่สุด
lngICC ตราบเท่าที่
ประเภทสิ้นสุด
Const ส่วนตัว ICC_USEREX_CLASSES = &H200
ที่นี่เราเขียนฟังก์ชันเพื่อสรุปการดำเนินการเริ่มต้น:
ฟังก์ชั่นสาธารณะ InitCommonControlsVB() เป็นบูลีน
เมื่อเกิดข้อผิดพลาด ดำเนินการต่อต่อไป
หรี่ iccex เป็น tagInitCommonControlsEx
ด้วยไอซีเอ็กซ์
.lngSize = LenB(iccex)
.lngICC = ICC_USEREX_CLASSES
จบด้วย
InitCommonControlsEx iccex
InitCommonControlsVB = (ข้อผิดพลาดหมายเลข = 0)
เมื่อเกิดข้อผิดพลาดไปที่ 0
ฟังก์ชันสิ้นสุด
โปรดทราบว่าการดำเนินการเริ่มต้นจะต้องเสร็จสิ้นก่อนที่จะโหลดแบบฟอร์มทั้งหมด ดังนั้นคำสั่งที่เกี่ยวข้องจะต้องอยู่ใน Sub Main() และโครงการจะต้องเริ่มต้นจาก Sub Main() รหัสมีดังนี้:
หลักย่อย()
InitCommonControlsVB
แบบฟอร์ม1.แสดง
จบหมวดย่อย
ณ จุดนี้ abc.exe ที่คอมไพล์แล้วของคุณจะมีลักษณะ XP ดังแสดงในรูปที่ 2: