C ++ WM_NCCALCSIZE не отправляется - PullRequest
       11

C ++ WM_NCCALCSIZE не отправляется

2 голосов
/ 24 сентября 2011

Я пытаюсь центрировать текст в элементе управления по вертикали, после некоторых исследований я обнаружил, что должен обработать сообщение WM_NCCALCSIZE.Итак, я переклассифицировал свой элемент управления, но сообщение WM_NCCALCSIZE никогда не отправляется.

Я что-то не так делаю?

РЕДАКТИРОВАТЬ:

Итак, я отлично обрабатываю сообщение WM_NCCALCSIZE, и у меня есть 3D-граница, созданная передачей WS_EX_CLIENTEDGE в CreateWindowEx.Но если я отключу темы Windows, убив службу тем, граница исчезнет с элемента управления, обрабатывающего сообщение WM_NCCALCSIZE.Другой элемент управления, который не обрабатывает сообщение WM_NCCALCSIZE, все еще имеет границу, как обычно.

Итак, я предполагаю, что я должен сделать что-то в WM_NCCALCSIZE, что позволит мне сохранить границу?Если да, то?если нет никакого способа вернуть границу?

Ответы [ 2 ]

3 голосов
/ 24 сентября 2011

Разобрался, WM_NCCALCSIZE отправляется до подкласса элемента редактирования.
Так что мне пришлось суперклассировать класс EDIT.

EDIT:
Другое решение, о котором я только что подумал, - это создать его подкласс, а затем вызвать SetWindowPos с SWP_FRAMECHANGED, что заставит его отправить сообщение WM_NCCALCSIZE.

Если у кого-то есть мнение, почему один метод лучше, чем другой, прокомментируйте:)

3 голосов
/ 24 сентября 2011

Вместо того, чтобы возиться с WM_NCCALCSIZE (очень сложным сообщением для управления), почему бы просто не переместить элемент управления редактирования вертикально, чтобы текст находился в вертикальном положении, которое вы предпочитаете?Вы можете поместить это в белую коробку, чтобы обеспечить свободное пространство вокруг него.Кроме того, вы можете использовать EM_SETRECT, чтобы разместить текст именно там, где вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...