TVM_SETBKCOLOR и TreeView_SetBkColor не объявлены в этой области?

Я получаю странную ошибку объема: '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));

но я получаю ту же ошибку. В чем дело?

(Среда: Код :: Блоки, MinGW, Win7 x64)

1

Решение

TVM_SETBKCOLOR сообщение и связанный с ним TreeView_SetBkColor () макрос определяется, только если приложение указывает, что Internet Explorer 4 или более поздней версии должен быть установлен в целевой системе.

Другими словами, _WIN32_IE Символ препроцессора должен быть установлен в 0x0400 или больше

Соответствующие части файла заголовка (строки с 5752 по 5792 из CommCtrl.h в версии 7.0А Windows SDK) есть:

#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) */
2

Другие решения

Других решений пока нет …