4

システムのトレイエリアクロックのビジュアルテーマはMSDNに文書化されているため、Microsoftはそれを使用できることを期待していると思います。トレイ領域との調和を良くするために、タスクバーバンドの背景を描画するために使用したいと思います。私がしようとすると

OpenThemeData(NULL、L "CLOCK");

常に失敗します。そのテーマを取得するために私が見つけた唯一の方法は、実際の時計ウィンドウを見つけて、そのテーマを要求することです。

  • を使用FindWindowExして、クラスのあるウィンドウを検索しShell_TrayWnd、次にその子をクラスで検索しTrayNotifyWnd、次にこのウィンドウの子をTrayClockWClassクラスで検索します。

  • OpenThemeDataを呼び出し、実際の時計のウィンドウハンドルを渡します。

明らかに、内部のWindowsウィンドウクラス名は文書化されていません。上記の方法はうまくいくように見えますが、私はむしろ壊れにくいものを使用したいと思います。

質問:トレイエリアの時計のビジュアルテーマを取得するための正しい方法はありますか?

4

1 に答える 1

3

どうやら、常にNULLでOpenThemeDataを使用できるとは限りません
http://microsoft.public.platformsdk.shell.narkive.com/gkVTBGA2/cannot-open-theme-data-for-tray-notification-area

ジムバリー6年前

SetWindowThemeを呼び出すことができるHWNDが必要です。pszSubAppNameを「TrayNotifyHoriz」または「TrayNotifyVert」に設定し、pszSubIdListをNULLのままにします。次に、pszClassListを「TrayNotify」に設定してOpenThemeDataを呼び出すことができます。

誰もがこのことを理解することになっている方法は完全に私を超えています。ビジュアルスタイルのドキュメントは率直に言ってひどいものであり、絶対的な恥です。
--Jim Barry、MVP(Windows SDK)

于 2013-09-13T12:44:10.760 に答える