diff --git a/ui/CMakeLists.txt b/ui/CMakeLists.txt index b4db60cf..7384bb8e 100644 --- a/ui/CMakeLists.txt +++ b/ui/CMakeLists.txt @@ -74,6 +74,8 @@ add_executable(msimeui-demo WIN32 demos/msimeui-demo/DemoScene.cpp demos/msimeui-demo/DemoScene.h demos/msimeui-demo/main.cpp + demos/msimeui-demo/msimeui-demo.rc + demos/msimeui-demo/resource.h ) target_link_libraries(msimeui-demo PRIVATE msimeui) diff --git a/ui/assets/msimeui.ico b/ui/assets/msimeui.ico new file mode 100644 index 00000000..c199547d Binary files /dev/null and b/ui/assets/msimeui.ico differ diff --git a/ui/demos/msimeui-demo/msimeui-demo.rc b/ui/demos/msimeui-demo/msimeui-demo.rc new file mode 100644 index 00000000..41ae81e8 --- /dev/null +++ b/ui/demos/msimeui-demo/msimeui-demo.rc @@ -0,0 +1,3 @@ +#include "resource.h" + +IDI_MSIMEUI_ICON ICON "../../assets/msimeui.ico" diff --git a/ui/demos/msimeui-demo/resource.h b/ui/demos/msimeui-demo/resource.h new file mode 100644 index 00000000..b132b872 --- /dev/null +++ b/ui/demos/msimeui-demo/resource.h @@ -0,0 +1,3 @@ +#pragma once + +#define IDI_MSIMEUI_ICON 101 diff --git a/ui/src/Window.cpp b/ui/src/Window.cpp index 33cc9393..8792104b 100644 --- a/ui/src/Window.cpp +++ b/ui/src/Window.cpp @@ -19,19 +19,34 @@ Window::~Window() = default; bool Window::Create() { + HICON largeIcon = static_cast( + LoadImageW(instance_, MAKEINTRESOURCEW(101), IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), 0)); + HICON smallIcon = static_cast(LoadImageW(instance_, MAKEINTRESOURCEW(101), IMAGE_ICON, + GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0)); + WNDCLASSEXW windowClass = {}; windowClass.cbSize = sizeof(windowClass); windowClass.lpfnWndProc = WindowProc; windowClass.hInstance = instance_; + windowClass.hIcon = largeIcon; windowClass.hCursor = LoadCursor(nullptr, IDC_ARROW); windowClass.hbrBackground = nullptr; windowClass.lpszClassName = className_.c_str(); + windowClass.hIconSm = smallIcon; RegisterClassExW(&windowClass); hwnd_ = CreateWindowExW(0, className_.c_str(), title_.c_str(), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, width_, height_, nullptr, nullptr, instance_, this); if (hwnd_) { + if (largeIcon) + { + SendMessageW(hwnd_, WM_SETICON, ICON_BIG, reinterpret_cast(largeIcon)); + } + if (smallIcon) + { + SendMessageW(hwnd_, WM_SETICON, ICON_SMALL, reinterpret_cast(smallIcon)); + } SetTimer(hwnd_, 1, GetCaretBlinkTime(), nullptr); } return hwnd_ != nullptr;