1

奇妙なスコープエラーが発生しています:'TVM_SETBKCOLOR' was not declared in this scopeおよび同様の'TreeView_SetBkColor' was not declared in this scope. なぜこれが起こっているのかわかりません:

  • 含めましたcommctrl.h
  • 他のツリービュー マクロは正常に動作します (のようにTreeView_DeleteItem)
  • オートコンプリートは認識して終了TreeView_SetBkColorするので、スペルの問題ではありません
  • ドキュメントをよく読んでいる

該当するウィンドウのスニペットを次に示します。tvw_filelist_変数の背景を変更しようとするまで、すべてが正常に機能しています。

void PnlTree::Init(HWND hwnd0, const char * superclassname0) {
    tvw_filelist_ = CreateWindowEx (0,
            superclassname0, NULL,
            TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | WS_CHILD | WS_VISIBLE,
            0, 0, 0, 0,
            hwnd0, (HMENU) IDC_TVWFILELIST, NULL, NULL
            );

    txt_blurb0_ = CreateWindowEx (0,
            TEXT("STATIC"), "Drag files and folders into this pane.",
            SS_CENTER | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE,
            0, 0, 0, 0,
            hwnd0, NULL, NULL, NULL
            );

    txt_blurb1_ = CreateWindowEx (0,
            TEXT("STATIC"), "Press DELETE to remove an entry.",
            SS_CENTER | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE,
            0, 0, 0, 0,
            hwnd0, NULL, NULL, NULL
            );

    HFONT hFont = CreateFont(15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "Segoe UI");

    ::SendMessage(txt_blurb0_, WM_SETFONT, (WPARAM) hFont, 0);
    ::SendMessage(txt_blurb1_, WM_SETFONT, (WPARAM) hFont, 0);

    // Everything works perfectly, if this line is commented out.
    TreeView_SetBkColor(tvw_filelist_, RGB(235, 235, 235));
}

//
//
//
void PnlTree::RemoveItem(WPARAM wParam) {
    if (wParam == VK_DELETE) {
        TreeView_DeleteItem(tvw_filelist_, TreeView_GetSelection(tvw_filelist_));
    }
}

私も試してみました

::SendMessage(tvw_filelist_, TVM_SETBKCOLOR, 0, RGB(235, 235, 235));

しかし、同じエラーが発生します。どうしたの?

(環境: Code::Blocks、MinGW、Win7 x64)

4

1 に答える 1

2

TVM_SETBKCOLORメッセージとそれに関連するTreeView_SetBkColor ()マクロは、ターゲット システムに Internet Explorer 4 以降をインストールする必要があることをアプリケーションが指定している場合にのみ定義されます。

つまり、_WIN32_IEプリプロセッサ シンボルは0x0400以上に設定する必要があります。

ヘッダー ファイルの関連部分 ( CommCtrl.hWindows SDK のバージョン 7.0A の行 5752 ~ 5792) は次のとおりです。

#if (_WIN32_IE >= 0x0400)

/* [get/set item height...] */

#define TVM_SETBKCOLOR              (TV_FIRST + 29)
#define TreeView_SetBkColor(hwnd, clr) \
    (COLORREF)SNDMSG((hwnd), TVM_SETBKCOLOR, 0, (LPARAM)(clr))

#define TVM_SETTEXTCOLOR              (TV_FIRST + 30)
#define TreeView_SetTextColor(hwnd, clr) \
    (COLORREF)SNDMSG((hwnd), TVM_SETTEXTCOLOR, 0, (LPARAM)(clr))

#define TVM_GETBKCOLOR              (TV_FIRST + 31)
#define TreeView_GetBkColor(hwnd) \
    (COLORREF)SNDMSG((hwnd), TVM_GETBKCOLOR, 0, 0)

#define TVM_GETTEXTCOLOR              (TV_FIRST + 32)
#define TreeView_GetTextColor(hwnd) \
    (COLORREF)SNDMSG((hwnd), TVM_GETTEXTCOLOR, 0, 0)

/* [get/set scroll time...] */

/* [get/set insert mark color...] */

#endif  /* (_WIN32_IE >= 0x0400) */
于 2012-11-07T07:30:36.643 に答える