(Tôi đang sử dụng Visual Studio 2008, mặc dù tôi nhớ có vấn đề tương tự với các phiên bản cũ là tốt.)Vấn đề với thiết lập biểu tượng ứng dụng
Tôi đã thử phương pháp khác nhau (nhiều trong số họ đề cập trong this other question), nhưng tôi vẫn đang gặp một số vấn đề lạ:
Khi đó có một biểu tượng như một nguồn lực, nó hiển thị như biểu tượng tập tin thực thi ngay lập tức, nhưng đối với biểu tượng để hiển thị trên thanh tác vụ, tôi phải khởi động lại máy tính. Cho đến lúc đó, nó vẫn tiếp tục hiển thị như bất cứ biểu tượng nào trước đó. Làm sạch dung dịch, khởi động lại VS, không có tác dụng. Không phải là một vấn đề thực sự lớn, vì nó sẽ không ảnh hưởng đến một exe phát hành, nhưng nó sẽ được tốt đẹp để biết nơi nó giữ biểu tượng cũ lưu trữ và làm thế nào để thoát khỏi nó.
Bất kể tôi làm gì, biểu tượng được hiển thị khi alt-tabbing là biểu tượng ứng dụng mặc định (hình vuông và màu trắng và chung). Điều này bao gồm nhúng biểu tượng trong tệp thực thi, cũng như đặt
ICON_BIG
vớiWM_SETICON
.
Đối với vấn đề thứ hai, mã của tôi trông giống như sau:
hIcon = (HICON)(
LoadImage(NULL, szFilename, IMAGE_ICON, 32, 32, LR_LOADFROMFILE));
if(hIcon)
SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
Tuy nhiên, sau khi gửi WM_SETICON
, GetLastError()
lợi nhuận 6, "Việc xử lý không hợp lệ.". hWnd
là tay cầm cửa sổ hợp lệ và hIcon
dường như là một biểu tượng xử lý hợp lệ. Tôi đã cố gắng tìm kiếm lý do tại sao WM_SETICON
có thể gây ra lỗi đó, và ít nhất, để tìm ra WHICH xử lý nó nghĩ là không hợp lệ, nhưng không có may mắn được nêu ra. Tôi đã xóa mã lỗi ngay lập tức trước khi gọi số SendMessage()
, vì vậy nó phải được đặt ở đâu đó trong quá trình xử lý thư.
Tôi đã thử một phương pháp thay thế, tải các biểu tượng từ exe chính nó, nơi mà các ID của tài nguyên là 101
(đó là nguồn lực đầu tiên và duy bao gồm):
hIcon = (HICON)(
LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(101),
IMAGE_ICON, 48, 48, 0));
if(hIcon)
SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
... nhưng điều tương tự xảy ra; sau khi gọi số SendMessage()
, GetLastError()
cho cùng trạng thái lỗi.
Tôi đã thử các thứ nguyên khác nhau (chẳng hạn như 48x48, tất cả đều có trong tệp biểu tượng), nhưng không có hiệu ứng khác. Tôi biết nó chắc chắn tìm và tải hình ảnh, bởi vì nếu tôi chỉ định kích thước không tồn tại hoặc ID tài nguyên không hợp lệ hoặc tên tệp sai (tùy thuộc vào cách tôi tải nó), nó không hoạt động lâu trước SendMessage()
.
Kỳ lạ thay, nếu tôi chỉ định ICON_SMALL
thay vì ICON_BIG
, cuộc gọi thành công không có trạng thái lỗi, nhưng từ the docs, tôi cần phải sử dụng ICON_BIG
để thiết lập các biểu tượng sử dụng trong khi alt-tabbing. Ngoài ra, nếu tôi sử dụng ICON_BIG
nhưng tải biểu tượng 16x16, tôi sẽ không nhận được trạng thái lỗi, nhưng không có gì thay đổi.
Bất kỳ ý tưởng nào về nguyên nhân có thể gây ra WM_SETICON
không thành công? Bất cứ điều gì khủng khiếp sai với bất kỳ mã nào tôi đã đăng (ngoài các vấn đề định dạng/phong cách/đúc, vì nó đơn giản hóa chỉ là những điều cơ bản)?
Tôi cũng gặp phải vấn đề tương tự hôm nay. Thật không may điều này không làm việc cho tôi. Tôi phải tìm kiếm các giải pháp khác trên internet. – Lothar
Phương thức 'LoadImage' hoạt động tốt cho tôi để hiển thị biểu tượng trong menu' alt' + 'Tab' Tôi gặp sự cố khi tôi không đặt' LoadImage' '' '' thành 32x32, một khi tôi đã làm điều đó làm việc như người ở. Xem: http://stackoverflow.com/a/24029664/1828637 – Noitidart