0

WM_PAINTハンドラーの一部として、テーマのスクロール バーの矢印を描画するカスタム コントロールを実装しようとしています。また、ボタンの視覚的な状態 (ノーマル、ホット、ホバー、押された状態など) の間の遷移に、 でBeginBufferedAnimation()定義された一連の関数を使用してフェード アニメーションを持たせたいと考えていuxtheme.dllます。

GetThemeTransitionDuration()私の問題は、関数が失敗しているため、スクロールバーの正しいフェード時間を取得できないことです。成功する代わりにE_INVALIDARG、遷移期間を照会しようとすると (-2147024809)が返されます。

HTHEME hTheme = OpenThemeData(hwnd, L"SCROLLBAR"); // returns a valid non-NULL theme handle
...
DWORD dwDuration = 0;
HRESULT hr = GetThemeTransitionDuration(
    hTheme,                /*hTheme*/
    SBP_ARROWBTN           /*iPartId*/,
    ABP_LEFTNORMAL         /*iStateIdFrom*/,
    ABP_LEFTHOT            /*iStateIdTo*/,
    TMT_TRANSITIONDURATION /*iPropId*/, 
    &dwDuration            /*pdwDuration*/
); // PROBLEM: returns E_INVALIDARG

これは、次の 2 つの理由から奇妙です。

(1) Windows 7 の私のバージョンでは、テーマ スクロールバーは明らかに状態間で素早くフェード アニメーションを表示します (例: Windows エクスプローラー)。

(2) テーマを BUTTON に変更し、通常のボタンとホット ボタンの状態だけを使用すると、関数が戻りS_OK、適切な遷移期間 (私のマシンでは 1000 ミリ秒) が得られます。

HTHEME hTheme = OpenThemeData(hwnd, L"BUTTON");
...
DWORD dwDuration = 0;
HRESULT hr = GetThemeTransitionDuration(
    hTheme,                /*hTheme*/
    BP_PUSHBUTTON          /*iPartId*/,
    PBS_NORMAL             /*iStateIdFrom*/,
    PBS_HOT                /*iStateIdTo*/,
    TMT_TRANSITIONDURATION /*iPropId*/, 
    &dwDuration            /*pdwDuration*/
); // returns S_OK, and dwDuration = 1000

探している移行期間を照会する方法はありますか?

4

0 に答える 0