天天看點

淺談MFC圖示

在這個.Net, java橫行的年代,繼續談MFC是否已經過時了呢?似乎是的,并且我談的都是很具體的實作問題。。。不過,既然自己所找,那還是留些記憶的好。

MFC程式有一個預設圖示,定義在resource檔案裡面,資源号為IDR_MAINFRAME,圖示為和程式同名的.ico檔案,這是MFC架構裡面自動注冊,無需麻煩,覺得不爽,可以簡單将其替換之。

值得注意的是,程式有大小圖示,程式檔案圖示是大圖示,而标題欄和工作列上的小圖示,分别對應32x32和16x16的兩種,假如需要程式分别關聯着兩種尺寸,需要對讀取的圖示進行注冊,

SetIcon(m_hIcon, TRUE); // Set big icon

SetIcon(m_hIcon, FALSE); // Set small icon

當時看見這個很奇怪,對一個圖示同時調用true和false算是個什麼勁?後來簡單搜尋下,原來是将大小尺寸注冊上MFC,通知其可以調用。具體的内涵,還有待進一步查證。

此外,還有系統托盤圖示,需要使用Shell_NotifyIcon。簡單講就是使用NOTIFYICONDATA資料結構,loadIcon讀取圖示資源,NIM_ADD、NIM_DELETE、NIM_MODIFY進行操作。

而使用這個操作遇到的問題是,當我有一組圖示時,發現它隻會調用32x32的圖示,而無視我明明做在ico檔案裡面的16x16的圖示。究其原因在于LoadIcon這個函數隻會讀32x32的圖示,其他的不認,是以有一個定制函數浮出水面,LoadImage+IMAGE_ICON,此函數可以指定圖示大小,對于我的系統托盤好像隻需要16x16的就可以了。

一些簡單的歸納。收筆。

繼續閱讀