WM_CTLCOLOREDIT не отправлено - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь перехватить сообщение WM_CTLCOLOREDIT, когда WndProc, но элемент управления (полученный из TextBox) не отправляет его.

    public class TestTB: TextBox
    {
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case 0x133 // WM_CTLCOLOREDIT
               :
                    {
                        var w = m.WParam;
                        // i need to do somthing here but WM_CTLCOLOREDIT never sent.
                        break;
                    }
            }
            base.WndProc(m);
        }
    }

Согласно WM_CTLCOLOREDIT документации

Элементы управления только для чтения или отключенные средства редактирования не отправляют сообщение WM_CTLCOLOREDIT;вместо этого они отправляют сообщение WM_CTLCOLORSTATIC.

, но я не установил текстовое поле как доступное только для чтения или отключенное.

1 Ответ

0 голосов
/ 31 января 2019

WM_CTLCOLOREDITWM_CTLCOLORSTATIC) будет отправлено в родительское окно TextBox , а не в сам TextBox.Это задокументированное поведение:

WM_CTLCOLOREDIT

Это сообщение уведомляет родительское окно о редактировании элемента управления, когда элемент управления собирается бытьнарисован.Отвечая на это сообщение, родительское окно может использовать заданный дескриптор контекста устройства для установки цвета текста и фона элемента управления для редактирования.

WM_CTLCOLORSTATIC

Это сообщение отправляется в родительское окно статического элемента управления, когда элемент управления собирается быть нарисованным.Отвечая на это сообщение, родительское окно может использовать заданный дескриптор контекста устройства для установки цвета текста и фона статического элемента управления.

Поэтому необходимо переопределить WndProcвместо родительского элемента управления TextBox.

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