Sendmessagew с результатами ttm_addtoolw false falseC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Sendmessagew с результатами ttm_addtoolw false false

Сообщение Anonymous »

Следующий код будет создавать рабочую подсказку инструментов: < /p>
void Tooltip::init() {
InitCommonControls();
hwnd = CreateWindowExA(WS_EX_TOPMOST, TOOLTIPS_CLASSA, nullptr, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, 0, 0, 0, 0, Game::windowHWND, nullptr, GetModuleHandleA(nullptr), nullptr); //static inline HWND hwnd; in header
}

TTTOOLINFOA lastTooltip = {};
void Tooltip::showText(const std::wstring &text) {
auto conv = Helpers::utf8EncodeTo1251(text);

if(current == conv) { //static inline std::string current; in header
return;
} else if(text.empty()){
SendMessageA(hwnd, TTM_DELTOOLA, 0, (LPARAM)&lastTooltip);
current.clear();
return;
}

current = conv;

SendMessageA(hwnd, TTM_DELTOOLA, 0, (LPARAM)&lastTooltip);

lastTooltip = {};
lastTooltip.cbSize = sizeof(TTTOOLINFOA);
lastTooltip.uFlags = TTF_SUBCLASS;
lastTooltip.hwnd = Game::windowHWND;
lastTooltip.lpszText = (char*) current.data();

GetClientRect(Game::windowHWND, &lastTooltip.rect);

SendMessageA(hwnd, TTM_ADDTOOLA, 0, (LPARAM)&lastTooltip); //result == 1 (TRUE)
}
< /code>
Но мне действительно нужно использовать версию Unicode Ut Tooltip (потому что я использую кириллический текст, и если пользователь не устанавливает российскую локацию, текст сломается), но следующий код приведет к возвращению FALSE (не имеет представления) < /p>

void Tooltip::init() {
InitCommonControls();
hwnd = CreateWindowExW(WS_EX_TOPMOST, TOOLTIPS_CLASSW, nullptr, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, 0, 0, 0, 0, Game::windowHWND, nullptr, GetModuleHandleA(nullptr), nullptr);
}

TTTOOLINFOW lastTooltip = {};
void Tooltip::showText(const std::wstring &text) {
if(current == text) { //current is now std::wstring
return;
} else if(text.empty()){
SendMessageW(hwnd, TTM_DELTOOLW, 0, (LPARAM)&lastTooltip);
current.clear();
return;
}

current = text;

SendMessageW(hwnd, TTM_DELTOOLW, 0, (LPARAM)&lastTooltip);

lastTooltip = {};
lastTooltip.cbSize = sizeof(TTTOOLINFOW);
lastTooltip.uFlags = TTF_SUBCLASS;
lastTooltip.hwnd = Game::windowHWND;
lastTooltip.lpszText = (wchar_t*) text.data();

GetClientRect(Game::windowHWND, &lastTooltip.rect);

SendMessageW(hwnd, TTM_ADDTOOLW, 0, (LPARAM)&lastTooltip); //result == 0 (FALSE, no tooltip shown)
}
< /code>
Я попытался использовать параметры компилятора /d_unicode /dunicode, все еще нет результата - ttm_addtoola.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... ults-false
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»