【WinAPI】C++ Windows11 環境でウィンドウの角丸を制御する
ウィンドウの角丸を制御する
Windows11 から、デフォルトでウィンドウの四つ角が丸められます。
これを、Windows10 のような丸められていない状態などに変更するには、DwmSetWindowAttribute
を使用します。
※ Windows11 以降で利用可能 な方法です。それ以前の古い環境で、APIは動作しません。
実装
ウィンドウハンドルを指定してAPIを呼び出すだけで変更できます。
インクルード周り
#define WIN32_LEAN_AND_MEAN #include <windows.h> #include <dwmapi.h> #pragma comment(lib, "dwmapi.lib")
角丸の種類と呼び出し方
// 例:ウィンドウの角を丸めない static const auto attr = DWMWA_WINDOW_CORNER_PREFERENCE; static const auto pref = DWMWCP_DONOTROUND; ::DwmSetWindowAttribute(hWnd, attr, &pref, sizeof(pref));
pref
の値は、下記を参照。
列挙値 | 説明 |
---|---|
DWMWCP_DEFAULT | ウィンドウの角を丸めるかどうかをシステムに決めさせます。 |
DWMWCP_DONOTROUND | ウィンドウの角は丸められません。 |
DWMWCP_ROUND | 必要に応じて、角を丸めます。 |
DWMWCP_ROUNDSMALL | 必要に応じて角を丸め、半径を小さくします。 |
その他
DWM をサポートしている環境かどうかのチェック処理は下記の通り。
(現行環境では、呼び出す必要はないはず。)
BOOL isDwmEnable = FALSE; auto hResult = ::DwmIsCompositionEnabled(&isDwmEnable); if (hResult != S_OK || isDwmEnable == FALSE) { return; // 非サポート }
参考
DwmSetWindowAttribute 関数 (dwmapi.h) - Win32 apps Microsoft Learn
https://learn.microsoft.com/ja-jp/windows/win32/api/dwmapi/nf-dwmapi-dwmsetwindowattributeデスクトップ アプリケーションで角の丸めを適用する - Windows apps Microsoft Learn
https://learn.microsoft.com/ja-jp/windows/apps/desktop/modernize/apply-rounded-cornersWindows 11でのウィンドウの形状とコントロールの形状 #2 – nishy software (ja)
https://nishy-software.com/ja/dev-sw/windows-11-ui-design-2/