—»†•_Welcome to Forum I.T_•†«—
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.



 
Đăng kýTrang ChínhLatest imagesTìm kiếmBảng tin CTIMĐăng Nhập

 

 Hỗ trợ XP Themes trên Visual C++ 2005: Tưởng khó mà dễ!

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giả Thông điệp
YoungLeeMedia.com
Admin
»Young Lee Group«
YoungLeeMedia.com

Tổng số bài gửi : 113
Points : 287199
Reputation : 10009
Join date : 30/09/2009
Age : 35
Đến từ : Viet Nam

Hỗ trợ XP Themes trên Visual C++ 2005: Tưởng khó mà dễ! Vide
Bài gửiTiêu đề: Hỗ trợ XP Themes trên Visual C++ 2005: Tưởng khó mà dễ!   Hỗ trợ XP Themes trên Visual C++ 2005: Tưởng khó mà dễ! EmptyWed Oct 07, 2009 10:12 am

Hỗ trợ XP Themes trên Visual C++ 2005: Tưởng khó mà dễ!
Bài viết này muốn đề cập đến các dự án dạng Win32 Application (dùng thuần Win32 API). Không như các ứng dụng MFC tự động hỗ trợ XP Theme ngay khi tạo dự án, các ứng dụng Win32 này vẫn mang dáng dấp các thành phần giao diện từ thời "xa xưa". Chắc chắn là các bạn muốn "thổi hồn thời đại" vào ứng dụng của mình, bắt nó hỗ trợ giao diện XP. Tôi cũng vậy và tôi đã có một buổi toát mồ hôi đánh vật với Visual C++ 2005!

Đối với các phiên bản trước, cách đơn giản nhất là copy file MyApp.exe.manifest vào thư mục chứa file MyApp.exe. File này chắc các bạn đã biết, nó thông báo cho Windows XP sử dụng file Comctl32.dll phiên bản 6.0 để ứng dụng có thể dùng XP theme, nếu không Windows chỉ gọi phiên bản 5.82, khi đó ứng dụng chỉ có giao diện kiểu cũ.

Hỗ trợ XP Themes trên Visual C++ 2005: Tưởng khó mà dễ! 1
Tôi cũng làm tương tự nhưng những gì tôi nhận được là một thông báo lỗi khó hiểu.

Tôi đành sử dụng cách "chính qui" hơn là đưa thẳng file .manifest vào trong tài nguyên của dự án – cách đã được dùng hiệu quả trên Visual C++ 7.1 trở về trước. Cách này chắc nhiều bạn biết, nhưng tôi vẫn muốn nêu lại:

- Trong thẻ Resource view, dùng Add Resource thêm file *.manifest vào

- Mở file *.rc bằng cách chọn View code, sửa đổi dạng tài nguyên cho file *.manifest là RT_MANIFEST và tên tài nguyên là IDR_MANIFEST

- Mở file Resource.h, thêm 1 dòng #define IDR_MANIFEST 1

- Dịch lại ứng dụng

Cách này cho kết quả rất tốt trên các phiên bản trước, nhưng lần này tôi lại nhận được thông báo lỗi khi dịch: tài nguyên MANIFEST đã bị lặp lại 2 lần.

Đến khi dùng Resource Hacker (hay là dùng chính VS IDE) để mở file *.exe (nguyên gốc, chưa có chỉnh sửa gì) do VC++ tạo ra, tôi mới hiểu được nguyên nhân: trong file *.exe này đã có sẵn tài nguyên manifest, đó là lí do trình dịch báo lỗi trùng.

Nội dung tài nguyên này như sau:
Hỗ trợ XP Themes trên Visual C++ 2005: Tưởng khó mà dễ! Code2
Đến đây, ta hiểu được nguyên nhân của thông báo lỗi khó hiểu ở trên. Nó chỉ cho ứng dụng liên kết đến thư viện CRT của VC++ (file MSVCR80D.DLL - vì đây là phiên bản debug), nhưng khi đó file MyApp.exe.manifest đã "nhảy ra" chiếm quyền, nên ứng dụng không thể liên kết được đến thư viện này. Bản thân nội dung tài nguyên này lại không chứa phần chỉ dẫn để sử dụng file Comctl32.dll ver 6.0 – điều kiện để ứng dụng hỗ trợ XP theme. Một cách đơn giản là bạn bổ sung một đoạn XML có nội dung sau vào phần tài nguyên ở trên (vào trước tag ), rồi ghi lại.

Hỗ trợ XP Themes trên Visual C++ 2005: Tưởng khó mà dễ! Code3

Nhưng như thế thì thủ công quá! Tôi tình cờ phát hiện ra một cách đơn giản đến không ngờ: Bạn chỉ cần thêm file *.manifest (tên file không quan trọng, có nội dung như file MyApp.exe.manifest ở trên) ở thẻ Solution Explorer (không phải là Resource View), nhấn chuột phải vào dự án, chọn Add/ Existing Item. Cho dịch lại, thế là xong. Khi dịch, bạn sẽ thấy có thông báo:

Hỗ trợ XP Themes trên Visual C++ 2005: Tưởng khó mà dễ! Code4

Sau khi biên dịch xong, ứng dụng của bạn sẽ hỗ trợ XP theme.

Nếu bây giờ bạn dùng Resource Hacker để mở lại file *.exe thì bạn sẽ thấy tài nguyên 24/1/1033 phía trên đã bao hàm cả phần chỉ định liên kết với thư viện CRT và Comctl32.dll 6.0.

Nếu thích, bạn có thể sửa lại file MyApp.exe.manifest để nó chứa cả phần chỉ định đến thư viện MSVCR80.DLL và đặt cùng với MyApp.exe chứ không nhất thiết phải đưa nó vào ứng dụng.

Hi vọng bài viết nhỏ này sẽ giúp ích cho các bạn. Rất mong được các bạn trao đổi ý kiến.

Admin KimYoungLee-Star

Sưu tập từ nguồn Quản trị mạng
Về Đầu Trang Go down
http://youngleemedia.com
 

Hỗ trợ XP Themes trên Visual C++ 2005: Tưởng khó mà dễ!

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum: Bạn không có quyền trả lời bài viết
—»†•_Welcome to Forum I.T_•†«— :: —»†• HỌC HÀNH :: TÀI LIỆU -
Free forum | ©phpBB | Free forum support | Báo cáo lạm dụng | Thảo luận mới nhất