Trong Windows Volume Mixer, khi ứng dụng của bạn phát âm thanh, nó sẽ thêm biểu tượng ứng dụng và thanh trượt âm lượng tùy chỉnh để điều chỉnh âm lượng cụ thể cho ứng dụng đó ... Tuy nhiên, khi bạn sử dụng một biểu tượng có kích thước lớn cho ứng dụng của bạn (đặc biệt quan trọng trong DPI cao khi Windows điều chỉnh biểu tượng của bạn cho Thanh tác vụ, v.v.), biểu tượng trong Bộ trộn âm lượng không chia tỷ lệ chính xác. Cụ thể, mã sau đây là những gì tôi sử dụng để đặt biểu tượng của ứng dụng:Kích cỡ biểu tượng Windows Volume Mixer quá lớn
// set icons the normal way
cWnd.SetIcon(theApp.LoadIcon(res_id), FALSE);
cWnd.SetIcon(theApp.LoadIcon(res_id), TRUE);
// set hi-res if available
OSVERSIONINFO osv;
osv.dwOSVersionInfoSize = sizeof(osv);
if (GetVersionEx(&osv)) {
// if we're Vista or more recent, use hi-def icons
if (osv.dwMajorVersion >= 6) {
HICON hIcon = (HICON)::LoadImage(theApp.m_hInstance, MAKEINTRESOURCE(res_id), IMAGE_ICON, 256, 256, LR_SHARED);
if (hIcon) {
cWnd.SetIcon(hIcon, TRUE);
}
}
}
Thủ phạm là phần "hi-res nếu có". Nếu tôi bao gồm điều đó, biểu tượng Taskbar trông rất tuyệt nhưng Volume Mixer không bị thu nhỏ và trông khủng khiếp. Nếu tôi loại trừ rằng, biểu tượng Taskbar trông xấu (rộng khủng khiếp) nhưng Mixer Khối lượng ít nhất là kích thước phù hợp:
Có ai tìm thấy một giải pháp mà làm cho nó để cả hai biểu tượng tìm kiếm tốt ?
EDIT: Trong tệp biểu tượng của tôi, tôi có các độ phân giải sau: 256x256, 48x48, 32x32, 24x24 và 16x16, tất cả 32 bit. Các 256x256 một là PNG nén, những người khác là nguyên. Tất cả các kích thước nhìn tuyệt vời ở độ phân giải mà họ có trong tập tin (tôi đã cố gắng để đặt ICO ở đây hoặc trong imgur nhưng dường như không cho phép các biểu tượng). Ngoài ra tôi đã thử bao gồm một số hình ảnh 8-bit nhưng điều đó dường như không thay đổi mọi thứ.
EDIT: Tôi đang sử dụng GetDeviceCaps(hdc, LOGPIXELSX)
(và Y) để xác định Tỷ lệ màn hình. Thông thường tỷ lệ máy tính để bàn là 100% và tôi nhận được kết quả 96 bình thường. Nhưng ngày càng nhiều, tôi thấy máy tính mặc định là 125%. Điều này có thể được thay đổi bằng cách kích chuột phải vào Desktop, Personalize, khác: Display ... có một thanh trượt ở đó (yêu cầu đăng xuất/in để thay đổi).
EDIT: Tôi cũng muốn chỉ ra rằng ICON khay chịu số phận phát hành tương tự khi ở chế độ DPI cao (tức là khi sử dụng Shell_NotifyIcon
). Trong trường hợp này, tuy nhiên, tôi có thể sử dụng GetDeviceCaps(hdc, LOGPIXELSX)
để xác định những gì Windows muốn .. nếu tôi có kích thước, cung cấp nó trực tiếp, nếu không cung cấp 256x256 một và Windows không quy mô nó một cách chính xác.
EDIT: Nỗi buồn xảy ra sau đó. Sự cố này có thể là sự cố Windows. Trong khi chụp ảnh cho mục đích trình diễn, tôi nhận thấy biểu tượng Volume Mixer chính nó trông kém. Để so sánh:
EDIT cuối cùng: Như được mô tả bên dưới, giải pháp cho vấn đề là chia tỷ lệ biểu tượng. Vì vậy, các mã cuối cùng mà làm việc là để tải một con trỏ đến LoadIconWithScaleDown
chức năng từ Comctl32.dll
(không hiển thị) và sử dụng rằng nếu nó đã có sẵn, hoặc rơi trở lại "bình thường/cũ" cách:
HICON hIcon = 0;
if (FAILED(comctl32Loader.LoadIconWithScaleDown(theApp.m_hInstance, MAKEINTRESOURCE(res_id), GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), &hIcon))) {
hIcon = theApp.LoadIcon(res_id);
}
cWnd.SetIcon(hIcon, FALSE);
if (FAILED(comctl32Loader.LoadIconWithScaleDown(theApp.m_hInstance, MAKEINTRESOURCE(res_id), GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), &hIcon))) {
hIcon = theApp.LoadIcon(res_id);
}
cWnd.SetIcon(hIcon, TRUE);
Ồ, cảm ơn tất cả các chi tiết và phân tích của bạn. Trong tập tin ICO của tôi, tất cả các độ phân giải đều tốt ở các độ phân giải mà tôi cung cấp (xem EDIT ở trên).Ví dụ dưới của tôi "jaggy" hình ảnh thực sự được thu nhỏ bởi Windows (Tôi không có một ICO trông giống như trong tập tin ICO của tôi). Windows thực hiện điều này khi ở chế độ DPI cao hơn. Theo quan điểm của bạn, khi tôi thực hiện GetDeviceCaps trong quy mô desktop thông thường (100%), tôi nhận được 96 ... nhưng nếu tôi đặt máy tính để bàn của mình thành tỷ lệ 125% hoặc tỷ lệ 200% (nhấp chuột phải vào Desktop, Personalize, other: Display), Tôi nhận được một DPI và Windows khác nhau yêu cầu hình ảnh lớn hơn bắt đầu mở rộng ICON theo cách "xấu" này. – mark
Net-net ở trên: nếu tôi "để Windows quyết định" ICO nào sẽ sử dụng ở chế độ DPI cao (tức là không có 'LoadImage' hoặc thông qua' GetSystemMetrics (SM_CXSMICON) ') thì nó chọn biểu tượng có độ phân giải thấp và tăng tỷ lệ (và tệ). – mark
Chỉ để chắc chắn rằng tôi đã không mất trí, tôi đã sử dụng mã của bạn thay cho vị trí của tôi ... nó có vẻ 'tốt' ở mức 100% Desktop scaling. Tôi đặt máy tính để bàn của tôi để tỷ lệ 125%, và * cả hai * Khối lượng Mixer và các biểu tượng Taskbar trông nghèo (jaggy scaling hiện vật). – mark