簡體   English   中英

哪個類,部分和州用於繪制選擇?

[英]Which class, part and state is used to draw selection?

我正在嘗試使用啟用了Aero的Windows 7上的視覺樣式在我的自定義窗體控件中繪制選擇/焦點框架。 我試過這個:

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; 
    }

結果如下:

在WinAPI中繪制的選擇

我很親密。 純WinAPI的完整解決方案如下所示:

HWND mainWinHWND = CreateWindowEx(WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE,
    L"MainWindowClass",
    L"WinAPI window",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    640,
    480,
    NULL,
    NULL,
    hInstance,
    NULL);

if (!mainWinHWND)
    return -1;

SetWindowTheme(mainWinHWND, L"explorer", nullptr);

然后可以請求操作系統繪制特定部分:

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; 
}

結果:

在此輸入圖像描述

令人遺憾的是,主流操作系統支持的記錄很少。 例如, L"Explorer"值取自MSDN的SetWindowTheme,但沒有正式的參數列表,可以提供給該例程。

MSDN表示,僅在Windows XP Home Edition,Windows XP Professional x64 Edition和Windows Server 2003上支持Visaul樣式。

請參閱此鏈接備注部分(VisualStyleRenderer類)的末尾,以及此鏈接的 備注部分。 VisualStyleRenderer.IsSupportedVisualStyleInformation.IsSupportedByOS都返回true,似乎除了XP和Server 2003之外的任何操作系統都不支持它!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM