2010-04-21 127 views
2

我們遇到了一些涉及Windows 7顯示的不同應用程序的任務欄圖標的行爲。我想知道是否有人可以解釋一下這個:Windows 7應用程序任務欄圖標,字體大小和快捷方式

  • Windows 7設置爲font-size = 110%。
  • 兩個MFC對話框應用程序A.exe和B.exe具有完全相同的.ico資源嵌入其中。
  • A.exe有一個與它相關的捷徑; B.exe沒有。
  • 運行A.exe在任務欄上顯示一個很好的插補圖標。
  • 運行B.exe在任務欄上顯示不同的圖標(未插入)。

我們希望在任務欄上出現與A.exe和B.exe相同的圖標 - 這很容易通過製作B.exe的快捷方式來提供相同的行爲。不過,我真的想了解更多關於發生的事情。

爲了理解發生了什麼,我在B.exe中處理了WM_GETICON消息,根據GetSystemMetrics SM_CXICON/SM_CYICON或SM_CXSMALLICON/SM_CYSMALLICON大小給出的大小返回一個圖標。但是,這似乎沒有影響任務欄中顯示的圖標。

我也知道我們可以創建一個.ico文件,並將其內置到B.exe中,其中包含許多不同大小的圖標 - 也許這會改善事情,但這是一個乏味的解決方案!

任何想法?

+0

你是什麼意思「A.exe有一個與之相關的快捷方式; B.exe不是。」這個快捷方式在這裏意味着什麼...... – TheCodeArtist 2010-04-21 08:31:30

+0

在創建可執行文件A.exe後,我使用Windows資源管理器瀏覽到包含A.exe的文件夾,單擊A.exe選擇它,右鍵單擊並選擇了「創建快捷方式」選項。 – 2010-04-21 16:28:49

+0

您確定A.exe和B.exe是否相同?特別是,A.exe是否具有指定dpiAware = true的清單? – 2010-07-28 19:55:05

回答

0

剛見面這一問題下面簡單的場景(全部在WIN7):

  1. 創建A.exe時使用圖標乙
  2. 創建B.lnk關聯與不同的圖標C(由WINAPI到A.EXE CreateLink)
  3. 單擊B.lnk運行。在某些WIN7機,任務欄上的圖標是C.不過,一些其他的機器(也WIN7)上,這是B.

如果圖標是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); 
} 
相關問題