Skip to main content
Custom Icon and Cursor         Even Simpler Way (Windows)

Creating a Custom Icon and Mouse Cursor for an Ogre App MS Windows

Note: Both methods listed below work only on Microsoft Windows. However, if you are targeting the windows platform for a release of your application, they are quite useful. Also, both of the below code fragments should be called only after Ogre has created the default window for your application via mRoot->initialise( ... ).

Icon

Here is a much cleaner and simpler way of setting or changing an icon for a window on the fly:

Note: Make sure you have created an icon resource in Visual Studio, and that the ID is IDI_ICON1 (or just change IDI_ICON1 to whatever you'd like in the below code).

Copy to clipboard
#ifdef WIN32 HWND hwnd; mRenderWindow->getCustomAttribute("WINDOW", &hwnd); HINSTANCE hInst = (HINSTANCE)GetModuleHandle(NULL); SetClassLong (hwnd, GCL_HICON, (LONG)LoadIcon (hInst, MAKEINTRESOURCE (IDI_ICON1))); #endif

Cursor

Very similar code can also be used for changing the mouse cursor for a window:

Note: Make sure you have created a cursor resource in Visual Studio, and that the ID is IDC_POINTER (or just change IDC_POINTER to whatever you'd like in the below code).

Copy to clipboard
#ifdef WIN32 HWND hwnd; mRenderWindow->getCustomAttribute("WINDOW", &hwnd); HINSTANCE hInst = (HINSTANCE)GetModuleHandle(NULL); SetClassLong (hwnd, GCL_HCURSOR, (LONG)LoadCursor (hInst, MAKEINTRESOURCE (IDC_POINTER))); #endif


Note: If you're using OIS, by default your mouse is in exclusive mode, so the cursor is hidden. If you want to show your cursor (which will make your cursor dependent upon Windows), use the following parameters when initialising your OIS parameter list:

Copy to clipboard
paramList.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_FOREGROUND" ))); paramList.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_NONEXCLUSIVE")));

Icon & Cursor

Both of the above can also be combined to set both an icon and a cursor with minimal code:

Copy to clipboard
#ifdef WIN32 HWND hwnd; mRenderWindow->getCustomAttribute("WINDOW", &hwnd); HINSTANCE hInst = (HINSTANCE)GetModuleHandle(NULL); SetClassLong (hwnd, GCL_HICON, (LONG)LoadIcon (hInst, MAKEINTRESOURCE (IDI_ICON1))); SetClassLong (hwnd, GCL_HCURSOR, (LONG)LoadCursor (hInst, MAKEINTRESOURCE (IDC_POINTER))); #endif