スキップしてメイン コンテンツへ

 none
Windows XP ビジュアル スタイルの使用について RRS feed

  • 質問

  • VS2017 C++を使用してWindowsアプリケーションを作成しています。

    以下の記事を参考にし、コードを書いたのですが ヘッダーファイル「<TmSchema.h>」が見つからないとのエラーが発生します。

    https://msdn.microsoft.com/ja-jp/library/cc422017.aspx

     → ビジュアル スタイルをカスタム コントロールと共に使用する 

    記事内に「クラスは、Tmschema.h で定義されます。」とありますので、#include <Tmschema.h> と記述したのですが文頭のエラーが出てビルドに失敗します。

    ちなみに、同コードをVS2005 でビルドしたところ、特別な設定(インクルードパスの追加等)を行わずともエラーは発生しませんでした。

    記事自体は2001年と古いものなのですが、VS2017で利用するには何か追加の設定が必要なのでしょうか?

    ご存知の方おりましたらご教示願います。



    • 編集済み Dorakiti 2018年9月19日 14:14
    2018年9月19日 14:13

回答

  • GetThemeBackgroundContentRectの第2引数はHDC hdcです。コピペミスでしょうか? 第3引数int iPartIdと仮定してコメントします。

    iPartIdの説明からリンクされているParts and StatesにはiPartIdに指定すべき値が列挙されていますが、BP_BUTTONは存在しません。正しくはBP_PUSHBUTTONでしょうか? これらはVsstyle.hかVssym32.hに定義されていると書かれています。

    参照されていたWindows XP ビジュアル スタイルの使用のページには

    この文書は暫定版であり、将来変更される可能性があります。

    ともあり、この辺りが変更されたのかもしれません。

    2018年9月19日 22:52
  • VS2017 の環境で、インクルードに指定していた「Tmschema.h」をやめ「Vsstyle.h」をインクルードすることで
    他のコードには手を加えずビルドに成功しました。動作も問題ありませんでした。
    大変助かりました。ありがとうございました。
    • 回答としてマーク Dorakiti 2018年9月20日 13:23
    • 回答としてマークされていない Dorakiti 2018年9月20日 13:24
    • 回答としてマーク Dorakiti 2018年9月20日 13:49
    2018年9月20日 13:23

すべての返信

  • 目的は何でしょう? Tmschema.h をインクルードすることではないはずです。

    OpenThemeData を呼び出し、ビジュアル スタイルを適用するコントロールの hwnd とコントロールのタイプを記述するクラス リストを渡します。クラスは、Tmschema.h で定義されます。

    と書かれていますが、その後のコードを見ると

    hTheme = OpenThemeData(hwndButton, "Button");

    等の記述で、クラス名は文字列を直接指定しているため、Tmschema.hを使用していません。#include <Tmschema.h>の行を単に消せばいいのでは?

    2018年9月19日 21:14
  • hr = GetThemeBackgroundContentRect(hTheme, BP_BUTTON, iState, &rc, &rcContent)

    で使用されている、BP_BUTTON が、問題のヘッダ内で定義されているようです。(vs2005でテストした際にはヘッダを消すと、この部分が未定義のエラーとなります)

    • 編集済み Dorakiti 2018年9月19日 21:51
    2018年9月19日 21:48
  • GetThemeBackgroundContentRectの第2引数はHDC hdcです。コピペミスでしょうか? 第3引数int iPartIdと仮定してコメントします。

    iPartIdの説明からリンクされているParts and StatesにはiPartIdに指定すべき値が列挙されていますが、BP_BUTTONは存在しません。正しくはBP_PUSHBUTTONでしょうか? これらはVsstyle.hかVssym32.hに定義されていると書かれています。

    参照されていたWindows XP ビジュアル スタイルの使用のページには

    この文書は暫定版であり、将来変更される可能性があります。

    ともあり、この辺りが変更されたのかもしれません。

    2018年9月19日 22:52
  • ご返信ありがとうございます。

    >GetThemeBackgroundContentRectの第2引数はHDC hdcです。コピペミスでしょうか? 第3引数int iPartIdと仮定してコメントします。

    失礼しました。

    DrawThemeBackground(hTheme, hDC, BP_BUTTON, iState, &rc, 0);

    の引数と混ざっておりました。 仮定の通りで誤りありません。

    >BP_BUTTONは存在しません。正しくはBP_PUSHBUTTONでしょうか?

    サンプルコードの誤り(なのか変更されたのか)のようです。

    ご推測いただいたとおり、BP_PUSHBUTTON が正しいようです。 私がVS2005で使用していたコードは別のサイトを参照したりして書いたので BP_PUSHBUTTONを指定していました。

    これらはVsstyle.hかVssym32.hに定義されていると書かれています。

    VS2005で確認するとこれらのヘッダが存在しませんでした。 このへんが変更された部分なのかもしれません。

    現在VS2017を利用できる環境が無いため、帰宅後に確認したいと思います。

    2018年9月19日 23:46
  • VS2017 の環境で、インクルードに指定していた「Tmschema.h」をやめ「Vsstyle.h」をインクルードすることで
    他のコードには手を加えずビルドに成功しました。動作も問題ありませんでした。
    大変助かりました。ありがとうございました。
    • 回答としてマーク Dorakiti 2018年9月20日 13:23
    • 回答としてマークされていない Dorakiti 2018年9月20日 13:24
    • 回答としてマーク Dorakiti 2018年9月20日 13:49
    2018年9月20日 13:23