Сообщения, касающиеся MFC-CTreeCtrl ⇐ C++
-
Гость
Сообщения, касающиеся MFC-CTreeCtrl
На данный момент мы создали несколько классов, производных от CTreeCtrl. Возникли проблемы с TVN_ITEMEXPANDING, который вообще не отправляется.
Методом проб и ошибок мы выяснили, что нам нужно использовать версию TVN_ITEMEXPANDING для Юникода. В противном случае функция обратного вызова не вызывается.
BEGIN_MESSAGE_MAP ... ON_NOTIFY_REFLECT(TVN_ITEMEXPANDINGW, OnExpand) END_MESSAGE_MAP() Это как-то любопытно, потому что мы вообще не в приложении Unicode, а в других позициях программы мы использовали TVN_ITEMEXPANDING, что приводит к ANSI-версии TVN_ITEMEXPANDINGA. Это определено в CommCtrl.h
#ifdef ЮНИКОД #define TVN_SELCHANGING TVN_SELCHANGINGW #define TVN_SELCHANGED TVN_SELCHANGEDW #define TVN_GETDISPINFO TVN_GETDISPINFOW #define TVN_SETDISPINFO TVN_SETDISPINFOW #define TVN_ITEMEXPANDING TVN_ITEMEXPANDINGW #define TVN_ITEMEXPANDED TVN_ITEMEXPANDEDW #define TVN_BEGINDRAG TVN_BEGINDRAGW #define TVN_BEGINRDRAG TVN_BEGINRDRAGW #define TVN_DELETEITEM TVN_DELETEITEMW #define TVN_BEGINLABELEDIT TVN_BEGINLABELEDITW #define TVN_ENDLABELEDIT TVN_ENDLABELEDITW #еще #define TVN_SELCHANGING TVN_SELCHANGINGA #define TVN_SELCHANGED TVN_SELCHANGEDA #define TVN_GETDISPINFO TVN_GETDISPINFOA #define TVN_SETDISPINFO TVN_SETDISPINFOA #define TVN_ITEMEXPANDING TVN_ITEMEXPANDINGA #define TVN_ITEMEXPANDED TVN_ITEMEXPANDEDA #define TVN_BEGINDRAG TVN_BEGINDRAGA #define TVN_BEGINRDRAG TVN_BEGINRDRAGA #define TVN_DELETEITEM TVN_DELETEITEMA #define TVN_BEGINLABELEDIT TVN_BEGINLABELEDITA #define TVN_ENDLABELEDIT TVN_ENDLABELEDITA #endif Кто-нибудь знает, почему TVN_ITEMEXPANDED необходим как в версии Unicode, так и в версии ANSI в одной и той же программе? Заранее спасибо.
На данный момент мы создали несколько классов, производных от CTreeCtrl. Возникли проблемы с TVN_ITEMEXPANDING, который вообще не отправляется.
Методом проб и ошибок мы выяснили, что нам нужно использовать версию TVN_ITEMEXPANDING для Юникода. В противном случае функция обратного вызова не вызывается.
BEGIN_MESSAGE_MAP ... ON_NOTIFY_REFLECT(TVN_ITEMEXPANDINGW, OnExpand) END_MESSAGE_MAP() Это как-то любопытно, потому что мы вообще не в приложении Unicode, а в других позициях программы мы использовали TVN_ITEMEXPANDING, что приводит к ANSI-версии TVN_ITEMEXPANDINGA. Это определено в CommCtrl.h
#ifdef ЮНИКОД #define TVN_SELCHANGING TVN_SELCHANGINGW #define TVN_SELCHANGED TVN_SELCHANGEDW #define TVN_GETDISPINFO TVN_GETDISPINFOW #define TVN_SETDISPINFO TVN_SETDISPINFOW #define TVN_ITEMEXPANDING TVN_ITEMEXPANDINGW #define TVN_ITEMEXPANDED TVN_ITEMEXPANDEDW #define TVN_BEGINDRAG TVN_BEGINDRAGW #define TVN_BEGINRDRAG TVN_BEGINRDRAGW #define TVN_DELETEITEM TVN_DELETEITEMW #define TVN_BEGINLABELEDIT TVN_BEGINLABELEDITW #define TVN_ENDLABELEDIT TVN_ENDLABELEDITW #еще #define TVN_SELCHANGING TVN_SELCHANGINGA #define TVN_SELCHANGED TVN_SELCHANGEDA #define TVN_GETDISPINFO TVN_GETDISPINFOA #define TVN_SETDISPINFO TVN_SETDISPINFOA #define TVN_ITEMEXPANDING TVN_ITEMEXPANDINGA #define TVN_ITEMEXPANDED TVN_ITEMEXPANDEDA #define TVN_BEGINDRAG TVN_BEGINDRAGA #define TVN_BEGINRDRAG TVN_BEGINRDRAGA #define TVN_DELETEITEM TVN_DELETEITEMA #define TVN_BEGINLABELEDIT TVN_BEGINLABELEDITA #define TVN_ENDLABELEDIT TVN_ENDLABELEDITA #endif Кто-нибудь знает, почему TVN_ITEMEXPANDED необходим как в версии Unicode, так и в версии ANSI в одной и той же программе? Заранее спасибо.
Мобильная версия