2009-02-20 39 views
9

Tôi nhận thấy rằng ứng dụng của tôi gửi biểu tượng tới khay Windows có kích thước 16x16 pixel - và PC Vista của tôi có thanh tác vụ trên toàn màn hình xuất hiện để hiển thị biểu tượng ở 18x18. Các hiện vật thay đổi kích thước trên biểu tượng ứng dụng của tôi trông khủng khiếp. Làm thế nào tôi có thể hỏi Windows kích thước các biểu tượng nên là gì?Làm cách nào để yêu cầu Windows kích thước biểu tượng khay hệ thống?

chỉnh sửa:

Tôi đang tạo biểu tượng động, với lớp phủ văn bản phông chữ pixel. Có vẻ như lãng phí để tạo ra một loạt các kích thước biểu tượng động, vì vậy nó sẽ là tốt đẹp để tránh xây dựng một biểu tượng với tất cả các kích cỡ "có thể" (không phải là tôi thậm chí chắc chắn những gì đang có).

GetSystemMetrics (SM_CXSMICON) trả về 16 - giá trị không chính xác.

GetThemeBackgroundContentRect cũng không giúp ích gì.

Trả lời

0

Tạo biểu tượng của bạn ở nhiều định dạng và để Windows chọn biểu tượng mà bạn muốn.

Here's the Wikipedia article on the .ico format.

Nếu bạn thực sự cần phải biết, GetSystemMetrics với một tham số của SM_CXICON hoặc SM_CYICON sẽ cho bạn biết chiều rộng và chiều cao rằng Windows muốn tải.

+3

Nửa đầu của câu trả lời này là sai. API cho biểu tượng thông báo là 'Shell_NotifyIcon'. Nó nhận được 'NOTIFYICONDATA' chứa' HICON'. Bây giờ, một 'HICON' chỉ một biểu tượng duy nhất, vì vậy bạn phải quyết định kích thước trước khi bạn gọi' Shell_NotifyIcon'. Đoạn cuối cùng là chính xác mặc dù. –

1

Câu trả lời cốt lõi của Mark là câu trả lời đúng: Tạo biểu tượng của bạn ở nhiều định dạng và để Windows chọn đúng biểu tượng. Đừng quên làm các biểu tượng 32x32 và 64x64 cho các kịch bản HighDPI.

Nhưng SM_CXICON/SM_CYICON sẽ không nhất thiết trả về kích thước sẽ được sử dụng trên thanh tác vụ. Thanh tác vụ chọn kích thước biểu tượng phù hợp với kích thước của nó (đây là nhiều quan trọng hơn trong Cửa sổ 7).

Chỉ cần cung cấp các biểu tượng có kích thước phù hợp và bạn nên ổn.

+2

Tôi đoán tôi nên đề cập: Tôi đang tạo biểu tượng động, với lớp phủ văn bản phông chữ pixel. Có vẻ như lãng phí để tạo ra một loạt các kích thước biểu tượng động. GetSystemMetrics (SM_CXSMICON) trả về 16 - giá trị không chính xác một lần nữa. – keelo

+1

Thật không may là thông tin không thay đổi câu trả lời của tôi - bạn vẫn cần phải tạo nhiều kích thước biểu tượng. Hoặc chỉ cần tạo một biểu tượng 256x256 và để hệ thống giảm kích thước cho bạn. –

+1

Tạo phông chữ 256x256 với pixel sẽ dẫn đến văn bản không đọc được khi biểu tượng được lấy lại thành 16x16, thật không may. – keelo

0

Đặt cược tốt nhất của bạn có thể là GetThemeBackgroundContentRect chuyển TBN_BACKGROUND làm iPartId cho khay thông báo nền.

GetThemeBackgroundContentRect phải trả lại kích thước được xác định bởi chủ đề hiện tại có thể được sử dụng để vẽ mà không chồng chéo đường viền của phần tử gốc. Nếu tôi đọc chính xác, đó sẽ là biểu tượng thông báo có kích thước lớn nhất được phép và có lẽ là kích thước đang được sử dụng.

Thử nghiệm với nhiều cài đặt DPI có lẽ là cách dễ nhất để biết liệu điều này có trả lại giá trị chính xác hay không.

+3

GetThemeBackgroundContentRect với TBN_BACKGROUND cũng không thay đổi với kích thước biểu tượng khay thay đổi. – keelo

Các vấn đề liên quan