-
Где можно почитать описания внутренних VCL сообщений с названиями CM_... и CN_... ? В Help'е, насколько я знаю, этого нет.
-
Насколько я знаю, такого описания вообще нигде нет. Видимо, считается, что это внутренний механизм VCL, для юзера не предназначенный. Если так, то нам остаются только исходники VCL.
-
В свое время меня тоже интересовал этот вопрос, но поизучав исходники, выяснилось, что большинство из этих сообщений так или иначе связаны с WinAPI сообщениями. Для примера, у ListBox есть такие методы:
procedure CNDrawItem(); message CN_DRAWITEM; procedure CNMeasureItem(); message CN_MEASUREITEM;
Если посмотреть SDK, то ListBox'у с определенными стилями действительно могут быть отправлены подобные сообщения (точнее, такие -- WM_DRAWITEM и WM_MEASUREITEM), но проходят они через обработчик (WndProc) владельца (Parent) ListBox'а. Т.е. напрямую эти сообщения ListBox не получает, однако, может их получить от своего владельца.
Кроме того, судя по обработчику procedure TCustomListBox.CNMeasureItem();, он делает именно то, что и должен сделать ListBox при обработке WM_MEASUREITEM. Сообщения WM_DRAWITEM и WM_MEASUREITEM подробно описаны в SDK. Однако, несомненно, что какие-то еще CN_*\CM_* сообщения не имеют прямых аналогов в WinAPI, а введены, как было сказано выше, для "внутреннего использования". :)
Надеюсь, что в этом ^ есть доля истины. :)
-
Я немного вольно обошелся выше с некоторыми словами, ну да ладно, должно быть понятно. Если будут вопросы по написанному -- задавайте. :)
-
файл Controls.pas строки с 33 по 135
-
Вроде, все CN_* созданы для [2]. Из CM_* мне пока пригодились только CM_MOUSEEnter и CM_MOUSELEAVE. По ним могу дать один совет - несмотря на то, что в параметрах передается доп информация, не пытайся, используя ее, избавиться от лишних перерисовок - ничего не выйдет. Для некоторых CM_* сообщений есть обертки, для других я делал обертки в своем пакете в модуле RSMessages. Пакет: http://www.grayface.nm.ru/RSPak.rarОписание: http://www.grayface.chat.ru/RSPakComment.htm(в любой момент могу выложить новую версию, если надо)
|