2010-10-29 40 views
18

Tôi có cả phiên bản tối và sáng của biểu tượng ứng dụng; phiên bản tối hoạt động tốt nhất trên các bề mặt màu xám như thanh tác vụ Windows XP, nơi phiên bản ánh sáng hoạt động tốt nhất như một biểu tượng trên thanh tiêu đề.Đặt biểu tượng thanh tác vụ khác thành biểu tượng được hiển thị trên thanh tiêu đề (C#)?

Có cách nào tôi có thể đặt biểu tượng trong thanh tác vụ thành biểu tượng khác với biểu tượng được sử dụng trong biểu mẫu của tôi trong C# (P/Gọi là tốt) không?

+1

Họ có cả hai dự án riêng biệt hoặc là nó trở thành một dự án và làm bạn muốn thiết lập chương trình khác? –

+1

Đó là cùng một dự án (cùng một mẫu) và tôi muốn đặt nó theo chương trình. –

+0

Tôi đọc một cái gì đó trong .Net 4.0 về "Window.TaskbarItemInfo". Có thể thực hiện điều đó thông qua thuộc tính lớp phủ. – Sauleil

Trả lời

6

Tôi biết đây là một câu hỏi cũ nhưng tôi đã gặp nó khi cố gắng đạt được điều tương tự, và cũng có bạn có thể làm điều này, trên Windows 7/8 ít nhất.

Hóa ra một tập tin ICO không chỉ chứa một hình ảnh, nó có chứa 9 hình ảnh khác nhau vào lúc 9 độ phân giải khác nhau:

  • 16x16
  • 24x24
  • 32x32
  • 48x48
  • 64x64
  • 72x72
  • 80x80
  • 96x96
  • 128x128

Trên Windows 7 và 8, ảnh 64x64 được sử dụng trên thanh tác vụ, và hình ảnh 16x16 được sử dụng vào biểu tượng đó được đặt ở góc trên bên trái của hình thức của bạn.

Bạn có thể sử dụng công cụ như Greenfish Icon Editor Pro (Tôi không làm việc cho họ hoặc bất kỳ thứ gì, đây không phải là plugin!) Để có hai hình ảnh riêng biệt, sau đó thêm tệp này *.ico như bình thường vào Biểu mẫu Windows của bạn/WPF hình thức trong Visual Studio.

Kết quả cuối cùng được hiển thị dưới đây:

WPF

Như bạn có thể thấy ứng dụng WPF của tôi có hai biểu tượng riêng biệt, một trong thanh tác vụ và khác về hình thức.

+1

Vâng, có thể có bất kỳ số lượng biểu tượng nào trong tệp .ico. Ngoài ra, giải pháp này có thể hoạt động nhưng không thực sự thực tế. Ngoài ra: Windows không nhất thiết phải sử dụng biểu tượng 64x64 để hiển thị biểu tượng thanh tác vụ. Trên một hệ thống điển hình với thiết lập dpi mặc định, một biểu tượng 32x32 sẽ hoạt động. Đối với quy mô dpi cao hơn Windows sẽ sử dụng các kích thước biểu tượng khác nhau cho thanh tiêu đề và thanh tác vụ. –

+0

Ngoài ra, nếu bạn sửa đổi biểu tượng của mình trước khi đặt biểu tượng thành biểu tượng của biểu mẫu (chẳng hạn như định kích thước biểu tượng 32x32 thành 16x16 với chất lượng tốt hơn sizer mặc định), thì bạn có thể mất tất cả các kích thước khác trong tệp biểu tượng gốc của mì[email protected] câu trả lời chắc chắn là tốt nhất cho câu hỏi đã được hỏi. – MaxOvrdrv

15

Gửi thông điệp WM_SETICON mẫu của bạn với biểu tượng khác nhau xử lý cho ICON_SMALL và tham số ICON_BIG:

[DllImport("user32.dll", CharSet = CharSet.Auto)] 
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, IntPtr lParam); 

private const uint WM_SETICON = 0x80u; 
private const int ICON_SMALL = 0; 
private const int ICON_BIG = 1; 

public MyForm() 
{ 
    InitializeComponent(); 

    SendMessage(this.Handle, WM_SETICON, ICON_SMALL, Properties.Resources.IconSmall.Handle); 
    SendMessage(this.Handle, WM_SETICON, ICON_BIG, Properties.Resources.IconBig.Handle); 
} 
+1

Câu trả lời hay, +1 – JMK

+0

câu trả lời tuyệt vời! +1 chắc chắn! – MaxOvrdrv

+0

Bạn có thể cho tôi biết thêm thông tin không? Tôi không biết cách áp dụng giải pháp này – user1705996

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