Reputation: 813
I am working with the express version of Visual Studio. Therefore, using functions calls to MAKEINTRESOURCE are out of the question. I am tryting to set the application icon by overriding the getAdditionalClassInfo function.
WNDCLASSW *Robot::getAdditionalClassInfo(void) const {
WNDCLASSW *wc = Window::getAdditionalClassInfo();
HANDLE hIcon = LoadImage(NULL, L"imagepath/image.png", 32, 32, LR_LOADFROMFILE);
wc->hIcon = .....;
return wc;
}
Does anyone know how I can set this icon WITHOUT using a resource?
Upvotes: 5
Views: 11191
Reputation: 3189
My suggestion, if you'd like to use PNGs, and be able to change the icon, is to use FreeImage to load it. Then you can use FreeImage to convert it to a standard HBITMAP fairly easily.
If you're fine with using an actual icon file, you can do the following once the window has been created:
HANDLE hIcon = LoadImage(0, _T("imagepath/image.ico"), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
if (hIcon) {
//Change both icons to the same icon handle.
SendMessage(hwnd, WM_SETICON, ICON_SMALL, hIcon);
SendMessage(hwnd, WM_SETICON, ICON_BIG, hIcon);
//This will ensure that the application icon gets changed too.
SendMessage(GetWindow(hwnd, GW_OWNER), WM_SETICON, ICON_SMALL, hIcon);
SendMessage(GetWindow(hwnd, GW_OWNER), WM_SETICON, ICON_BIG, hIcon);
}
You can likely call the similar function from within your getAdditionalClassInfo
and setting it to the hIcon
.
Upvotes: 3