Конференция "Компоненты" » VCL сообщения CM_.... и CN_... [D7, WinXP]
 
  • olegz77 (24.02.07 09:25) [0]
    Где можно почитать описания внутренних VCL сообщений с названиями CM_... и CN_... ? В Help'е, насколько я знаю, этого нет.
  • Юрий Зотов © (24.02.07 11:11) [1]
    Насколько я знаю, такого описания вообще нигде нет. Видимо, считается, что это внутренний механизм VCL, для юзера не предназначенный. Если так, то нам остаются только исходники VCL.
  • capkoh © (24.02.07 15:14) [2]
    В свое время меня тоже интересовал этот вопрос, но поизучав исходники, выяснилось, что большинство из этих сообщений так или иначе связаны с 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, а введены, как было сказано выше, для "внутреннего использования". :)

    Надеюсь, что в этом ^ есть доля истины. :)
  • capkoh © (24.02.07 15:31) [3]
    Я немного вольно обошелся выше с некоторыми словами, ну да ладно, должно быть понятно. Если будут вопросы по написанному -- задавайте. :)
  • Fredy314 © (25.02.07 10:51) [4]
    файл Controls.pas строки с 33 по 135
  • GrayFace © (25.02.07 21:00) [5]
    Вроде, все CN_* созданы для [2]. Из CM_* мне пока пригодились только CM_MOUSEEnter и CM_MOUSELEAVE. По ним могу дать один совет - несмотря на то, что в параметрах передается доп информация, не пытайся, используя ее, избавиться от лишних перерисовок - ничего не выйдет. Для некоторых CM_* сообщений есть обертки, для других я делал обертки в своем пакете в модуле RSMessages.
    Пакет: http://www.grayface.nm.ru/RSPak.rar
    Описание: http://www.grayface.chat.ru/RSPakComment.htm
    (в любой момент могу выложить новую версию, если надо)
 
Конференция "Компоненты" » VCL сообщения CM_.... и CN_... [D7, WinXP]
Есть новые Нет новых   [119024   +40][b:0][p:0]