アプリモードの切り替えを検出する

アプリモード(ホワイトモード、ダークモードなど)への切り替えを検出するには、ウィンドウプロシージャでWM_SETTINGCHANGEを処理する必要がある。

WM_SETTINGCHANGEは各種システム設定が変更された場合に送られてくるメッセージで、lParamには変更された項目を示す文字列のポインタアドレスがセットされている。アプリモードが切り替わる時は、"ImmersiveColorSet"がセットされている。

case WM_SETTINGCHANGE:
	if( !lstrcmp( LPCTSTR( lParam ), L"ImmersiveColorSet" ) ){
		//アプリモードが切り替わった。
	}
	break;

トップレベルウィンドウの他、子ウィンドウにも送られてくるので、コントロールごとにダークモードへ対応するかどうか決定できる。

検出できるのは 切り替わった という事だけなので、白・黒どちらのモードに切り替わったのかについては別途レジストリを参照する必要がある。