2010-04-21 1 views
2

Мы столкнулись с некоторым поведением, связанным с иконками панели задач, которые Windows 7 отображает для разных приложений. Мне интересно, может ли кто-нибудь пролить свет на это:Значки панели задач приложений Windows 7, размер шрифта и ярлыки

  • Windows 7 установлен с размером шрифта = 110%.
  • Два диалоговых приложения MFC A.exe и B.exe имеют точно такой же .ico-ресурс, встроенный в них.
  • У A.exe есть связанная с ним комбинация; B.exe нет.
  • Запуск A.exe показывает приятный интерполированный значок на панели задач.
  • Запуск B.exe показывает другой значок на панели задач (не интерполированный).

Мы хотели бы, чтобы тот же значок появился на панели задач для A.exe и B.exe - этого легко достичь, создав ярлык для B.exe, чтобы дать такое же поведение. Тем не менее, я действительно пытаюсь понять, что происходит дальше.

При попытке понять, что происходит, я обработал сообщение WM_GETICON внутри B.exe, возвращая значок в соответствии с размерами, заданными размером GetSystemMetrics SM_CXICON/SM_CYICON или SM_CXSMALLICON/SM_CYSMALLICON. Однако это не повлияло на значок, показанный на панели задач.

Я также знаю, что мы могли бы создать файл .ico, который будет встроен в B.exe с большим количеством значков разных размеров - возможно, это улучшит ситуацию, но это утомительное решение!

Любые идеи?

+0

Что вы подразумеваете под "A.exe имеет связанный с ним ярлык, B.exe does not." Что означает связанное с этим сокращение? – TheCodeArtist

+0

После того, как я создал исполняемый файл A.exe, я просмотрел папку, содержащую A.exe, используя проводник Windows, нажал на A.exe, чтобы выбрать его, щелкнув правой кнопкой мыши и выбрал опцию «Создать ярлык». –

+0

Вы уверены, что A.exe и B.exe идентичны? В частности, имеет ли A.exe манифест, который указывает dpiAware = true? –

ответ

0

Просто встретил этот вопрос со следующим простым сценарием (все на win7):

  1. создать A.exe со значком B
  2. создать B.lnk, связанный с A.exe с различными значками C (по WinAPI CreateLink)
  3. запустить с щелчком B.lnk. На некоторых машинах Win7, значок на панели задач является C. Но, на другой машине (также win7), это Б.

Если значок C, он даже не может быть изменен следующим кодом:

const HANDLE bigicon = ::LoadImage(::GetModuleHandle(0), MAKEINTRESOURCE(IDI_TO_ICON), IMAGE_ICON, 256, 256, 0); 
if (bigicon) { 
    ::SendMessage(theMainWnd, WM_SETICON, ICON_BIG, (LPARAM)bigicon); 
    ::SendMessage(GetWindow(theMainWnd, GW_OWNER), WM_SETICON, ICON_BIG, (LPARAM)bigicon); 
} 
const HANDLE smallicon = ::LoadImage(::GetModuleHandle(0), MAKEINTRESOURCE(IDI_TO_ICON_SMALL), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0); 
if (smallicon) { 
    ::SendMessage(theMainWnd, WM_SETICON, ICON_SMALL, (LPARAM)smallicon); 
    ::SendMessage(GetWindow(theMainWnd, GW_OWNER), WM_SETICON, ICON_SMALL, (LPARAM)smallicon); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^