0

WS_BORDER スタイルで CreateWindowEx を使用して作成されたカスタム コントロールがあります。ダイアログボックスの他のコントロールとは異なる色で表示される境界線を除いて、すべてが正常に機能します。私のコントロールの境界線は黒で、他のコントロールの境界線は青です。コントロールを作成した後、EnableThemeDialogTexture(_dialogHandle, ETDT_ENABLE) とhttp://www.patchou.com/projects/richedit/のロジックを呼び出してみましたが、役に立ちませんでした。私は C++ と Winapi を使用しています。すなわち。MFC も .Net もありません。どんなガイダンスでも大歓迎です。

編集:これが私のために働いたロジックです:

HDC hdc = GetWindowDC(hwnd);
HTHEME themeHandle = OpenThemeData(hwnd, L"Edit");
if(themeHandle)
{
    int cxBorder = GetSystemMetrics(SM_CXBORDER);
    int cyBorder = GetSystemMetrics(SM_CYBORDER);
    RECT rc;
    GetClientRect(hwnd, &rc);                   
    OffsetRect(&rc, cxBorder, cyBorder);
    ExcludeClipRect(hdc, rc.left, rc.top, rc.right, rc.bottom);
    InflateRect(&rc, cxBorder, cyBorder);
    DrawThemeBackground(themeHandle, hdc, 0, 0, &rc, NULL);
    CloseThemeData(themeHandle);
 }

ReleaseDC(hwnd, hdc);
4

1 に答える 1

1

別のコントロール (たとえば、リストビューまたはツリービュー コントロール) のテーマを使用して、境界線を自分で描画する必要があります。カスタムの子コントロールの場合、枠線の描画は非常に簡単です。WM_NCPAINT メッセージを処理するだけです。境界線を描画するときのパーツ ID と状態 ID は両方とも 0 である必要があります。

于 2013-01-06T04:44:43.437 に答える