บันทึกการพัฒนา C Win32 API By MySelf[ตอนที่ 5]

บันทึกการพัฒนา C Win32 API By MySelf[ตอนที่ 5]

ตอนที่ 5

สรุป ขั้นตอนการ Set Visual Style For C Win32 API

ขั้นตอนต่อไปนี้ สรุปและเรียบเรียงมาจาก MSDN หัวข้อ Using Windows XP Visual Styles โดยมีเนื้อหาดังนี้

วิธีการที่จะทำให้โปรแกรม ที่เขียนด้วย C บน platform Windows สามารถใช้งาน Visual Styles ได้ต้องทำการเรียกชุดคำสั่งที่อยู่ในไฟล์ ComCtl32.dll Version 6

สำหรับวิธีการนั้น ในหัวข้อนี้ได้ให้เอาไว้ 5-6 วิธี

สำหรับใช้กับ โปรแกรม 3-4 วิธี สำหรับเวบอีก 1 วิธี

และมีวิธีการสัพเพเหระอื่นๆอีกด้วย

แต่จากประสบการณ์ที่ได้ทดลองทำ จะใช้ได้อยู่ 2 วิธีเพราะว่า อีก 2 วิธีที่เหลือเกี่ยวข้องกับระบบ ไม่กล้าใช้(กลัวเจ๊ง – -‘)

สำหรับ 3-4 วิธีการนั้น หัวใจสำคัญอยู่ Script XML ต่อไปนี้ สำหรับรายละเอียด Script เป็นดังนี้
นี่คือหน้าตาของสคริปที่ว่า สำหรับนามสกุลของสคริปนั้นจะเป็น xxx.exe.manifest

<?xml version="1.0" encoding="UTF-8" of standalone="yes"? >

< assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" >
< dependency >
    < dependentAssembly >
        < assemblyIdentity
            type="win32"
            Name="Microsoft.Windows.Common control"
            version="6.0.0.0"
            processorArchitecture="X86"
            publicKeyToken="6595b64144ccf1df"
            LANGUAGE = "*"
        / >
    </dependentAssembly >
</dependency >
</assembly >

ไฟล์ Script นี้ต้นฉบับเรียกว่า Manifest เป็นไฟล์ที่เอาไว้ใช้งานร่วมกับคำสั่งใน comctl32.dll

วิธีการที่ทดลองใช้ มีดังนี้

  1. วิธีแรก ให้สร้าง manifest file ตาม script ข้างบนนี้ ก่อน จากนั้น แก้ไขไฟล์ ของโปรแกรมตัวเอง ดังนี้

จุดแรก ใน source code ให้ เพิ่มเติมคำสั่ง InitCommonControls ลงไป

จุดที่ 2 ใน Project file ให้ เพิ่ม Library ของ Comctl32.dll ชื่อ ComCtl32.lib ลงไปด้วย

จุดที่ 3 เพิ่ม manifest file ของเราลงไปในรูปแบบ YourApp.exe.manifest โดย YourApp คือ

ชื่อ Source file ของเราเอง เข้าไปใน Project File รวมด้วย

จุดที่ 4 แก้ไข manifest ของเราโดยให้  name=”CompanyName.ProductName.YourApp”

เป็นชื่อ ของ Source file ของเราเอง ,ชื่อบริษัท หน่วยงาน(ตั้งเองก็ได้), ชื่อผลิตภัณฑ์(ตั้งเองเหมือนกัน)

จุดที่ 5 เพิ่มคำสั่งนี้ลงไปใน Resource Script เพื่อให้รู้จักกับ manifest file และ comctl32.dll

CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST “YourApp.exe.manifest”

  1. วิธีที่ 2 จะยุ่งยากกว่าวิธีแรก เพราะว่า มีไฟล์ และ คำสั่งเพิ่มขึ้นมา โดยจะเพิ่มในส่วนของ Header เข้าไปด้วยดังนี้

โดยเริ่มจาก การสร้าง manifest file ตาม script ข้างบนนี้ ก่อน เหมือนวิธีแรก แต่จะต่างกันดังต่อไปนี้

ใน Source code ให้เพิ่มไฟล์ commctrl.h เข้าไปด้วย ด้วยคำสั่ง #include “commctrl.h”

จากนั้น ให้เพิ่มคำสั่งนี้ลงไป

#define SIDEBYSIDE_COMMONCONTROLS 1

ที่ manifest file เปลี่ยนนามสกุลจาก XXXX.exe.manifest ให้เป็น XXXX.manifest แล้วใส่เข้าไปใน Project File

โดยรายละเอียดใน manifest file ก็ทำแบบเดียวกับวิธีแรก

ที่ Resource Script ให้เพิ่มคำสั่งนี้ลงไป

CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST “YourApp.manifest”

ที่ Header File ของ Resource Script ให้เพิ่มคำสั่งนี้ลงไป

#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1

#define CONTROL_PANEL_RESOURCE_ID 123

#define RT_MANIFEST 24

แต่ว่า วิธีการที่ 2 เป็นวิธีการที่ทำให้สามารถใช้ Visual Styleได้เป็นครั้งแรกในการทดลอง ก่อนจะมาลองใช้วิธีที่ 1 ซึ่งพบว่า ยุ่งยากน้อยกว่า

นอกเหนือจากการ setup ตาม 2 วิธีการที่กล่าวมาแล้ว ต้องทำการ set VCEXP ไม่ให้สร้าง embeded manifest (built-in Manifest File) ด้วย เพื่อเป็นการบอก VCEXP ให้ทราบว่า เราจะทำการ link manifest file จากภายนอก เข้ามาให้ ไม่เช่นนั้นเดี๋ยวมันจะตีกันเอง

โดยไปที่ solutions properties แล้ว เลือกที่ configuration properties–>manifest tools

จากนั้นให้ set ในหัวข้อ Input and Output เลือก Embeded manifest ให้เป็น No

เพียงเท่านี้ก็จะได้โปรแกรมที่เรียกใช้ Visual Styles แล้วล่ะ

*—————————————————-*

หมายเหตุผู้เขียน
ณ ปัจจุบันนี้ เรื่องของการมี visual style หรือไม่มีนั้น ดูจะกลายเป็นกึ่งๆมาตรฐานไปแล้วว่า ทุกโปรแกรมนั้น จะต้องมี (ยกเว้นพวกที่มาจากฝั่ง opensource อย่าง linux นั้น ซึ่งบางเจ้า หน้าตาก็แลดูประหลาดไปนิด แต่ก็พอจะใช้งานกันได้) อย่างน้อยก็เพื่อความกลมกลืนไปกับระบบปฏิบัติการ เว้นแต่ว่า จะมีปัญหาบางอย่างเกิดขึ้นกับระบบ เมื่อนั้น เราค่อยเปลี่ยนไปใช้ ระบบที่มีหน้าต่างแบบธรรมดา ไร้ซึ่งการตกแต่งทั้งหลาย เพื่อการประหยัดทรัพยากรการใช้งาน(ของพวกนี้ กินทรัพยากรมากโขอยู่)

พักหลังๆนี้ ก็ไม่มีใครสนใจเรื่องพวกนี้กันแล้ว สนใจกันแต่ว่า เมื่ออัพเดตกันเสร็จแล้ว ของที่เรามีอยู่จะใช้การได้ไหม หรือ มันจะอัพเดตยาวนานเกินครึ่งวันหรือไม่  ซึ่งก็เป็นอย่างนี้มานานแล้วล่ะ สำหรับ ยี่ห้อ​ Microsoft เล็ก นิ่ม เนี่ย​ ​เวลาทำ​ของ​ใหม่​ออกมาที​ไร​ ของเก่ามัก จะ เข้า กับ ของ ใหม่ ไม่ ได้ เลยทุกทีสิ เอ้า​ -_- “ (แต่ก็ดีกว่าเมื่อก่อนนะ เดี๋ยวนี้ มันก็พอจะฉลาดขึ้นมาบ้าง นับตั้งแต่ ออก windows 7 เป็นต้นมา แต่ผลิตภัณฑ์อื่นๆ ส่วนมากก็ ตามนั้นแหละ คุณ ต้องไปลุ้นกันเอาเอง -_-‘)

บันทึกการพัฒนา C Win32 API By MySelf[ตอนที่ 5]
Tagged on:             

Leave a Reply