В C ++ значение LVN_ENDLABELEDEDIT
зависит от TCHAR_Mapping проекта , который можно изменить в настройках проекта с помощью элемента конфигурации "_TCHAR maps to"
.По умолчанию _TCHAR
установлено в wchar_t
в C ++ Builder 2009 и более поздних версиях, если только вы не перенесете проект из более ранней версии, в этом случае вместо него будет char
по умолчанию.
LVN_ENDLABELEDIT
- это макрос, который отображается на LVN_ENDLABELEDITA
(4294967190), когда _TCHAR
равен char
, и на LVN_ENDLABELEDITW
(4294967120), когда _TCHAR
равен wchar_t
.
Проверка обеих константLVN_ENDLABELEDEDITA
и LVN_ENDLABELEDEDITW
, как это сделано в исходном коде Delphi, должны быть в порядке.
void __fastcall TForm1::ListViewWndProc(TMessage &Message)
{
if (Message.Msg == CN_NOTIFY)
{
LPNMHDR pnmh = reinterpret_cast<LPNMHDR>(Message.LParam);
if ((pnmh->code == LVN_ENDLABELEDITA) || (pnmh->code == LVN_ENDLABELEDITW))
{
LV_DISPINFO *pdi = reinterpret_cast<LV_DISPINFO*>(Message.LParam);
if (pdi->item.pszText == NULL)
{
Edit1->Text = "Cancelled";
return;
}
}
}
OldWndProc(Message);
}