Aero が有効になっている Windows 7 でビジュアル スタイルを使用して、カスタム Windows フォーム コントロールで選択/フォーカス フレームを描画しようとしています。私はこれを試しました:
VisualStyleRenderer selectionRenderer = new VisualStyleRenderer(VisualStyleElement.ListView.Item.Selected);
selectionRenderer.DrawBackground(g, visual.ItemArea);
そしてこれ:
VisualStyleRenderer selectionRenderer = new VisualStyleRenderer(VisualStyleElement.TreeView.Item.Selected);
selectionRenderer.DrawBackground(g, visual.ItemArea);
ただし、どちらも現在のスタイルでは TreeView.Item.Selected も ListView.Item.Selected もサポートされていないという情報で失敗します。しかし、Windows は UI のツリービューで選択を描画します。
そしてリストビュー:
では、システム選択の四角形を描画するには、どのクラスとパーツを使用すればよいでしょうか?
編集:純粋な WinAPI でコードを記述しようとしました。コードの一部を次に示します。
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
HTHEME theme = OpenThemeData(hwnd, L"TREEVIEW");
RECT rect;
rect.left = 10;
rect.top = 10;
rect.right = 80;
rect.bottom = 80;
DrawThemeBackground(theme, hdc, TVP_TREEITEM, TREIS_SELECTED, &rect, &rect);
CloseThemeData(theme);
EndPaint(hwnd, &ps);
return 0L;
}
結果は次のようになります。