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
探している移行期間を照会する方法はありますか?