Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Chudakulli
1 / 1 / 1
Регистрация: 16.02.2013
Сообщений: 57
1

CUSTOMDRAW (ListView) не работает в диалоговом окне

20.08.2015, 22:52. Просмотров 964. Ответов 2
Метки нет (Все метки)

В основном моем окне есть контрол ListView, и с помощью CUSTOMDRAW я рисую в нем, что хочу. Но вот когда открываю диалоговое окно, которое содержит другой ListView, в нем уже так не получается. Почему-то в обработчик WM_NOTIFY диалогового окна не приходят сообщения с параметром NM_CUSTOMDRAW. Почему так и что можно придумать, чтобы по-своему изменить этот ListView?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2015, 22:52
Ответы с готовыми решениями:

Картинка в диалоговом окне
Как загрузить изображение в диалоговое окно

Изображение в диалоговом окне
Добрый день. Не как не могу разобраться как выводить изображение в диалоговом...

Баги с картинкой в диалоговом окне
Картинку из формата png конвертировал в ico. На картинке есть прозрачность и...

Прозрачная картинка в диалоговом окне
Visual studio 2008, в новых версиях ничего не работает, поэтому сижу тут, может...

Обновление информации на диалоговом окне
Здравствуйте. У меня программа все работает, только я хочу немного ее...

2
dmitry94
562 / 192 / 69
Регистрация: 25.05.2012
Сообщений: 800
21.08.2015, 06:58 2
Цитата Сообщение от Chudakulli Посмотреть сообщение
Но вот когда открываю диалоговое окно, которое содержит другой ListView, в нем уже так не получается. Почему-то в обработчик WM_NOTIFY диалогового окна не приходят сообщения с параметром NM_CUSTOMDRAW
А остальные сообщения от данного контрола приходят?
Нужен код хотябы обработки сообщение диалога.
1
Chudakulli
1 / 1 / 1
Регистрация: 16.02.2013
Сообщений: 57
03.09.2015, 14:33  [ТС] 3
Лучший ответ Сообщение было отмечено Chudakulli как решение

Решение

Ура, парни! Разобрался. Если кому надо: проблема была в том, что процедура диалогового окна возвращает или TRUE, или FALSE. А чтобы вернуть, к примеру, CDRF_NOTIFYITEMDRAW, нужно использовать конструкцию SetWindowLong (hDlg, DWL_MSGRESULT, CDRF_NOTIFYITEMDRAW). Пример ниже:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
case WM_NOTIFY:
    //LPNMLISTVIEW  pnm = (LPNMLISTVIEW)lParam; - определено выше
 
    switch (pnm->hdr.code)
    {           
    case NM_CUSTOMDRAW:
        LPNMLVCUSTOMDRAW  lplvcd = (LPNMLVCUSTOMDRAW)lParam;
        RECT myrect;
 
        switch (lplvcd->nmcd.dwDrawStage)
        {
        case CDDS_PREPAINT:
            //return CDRF_NOTIFYITEMDRAW; - это в процедуре главного окна
            SetWindowLong (hDlg, DWL_MSGRESULT, CDRF_NOTIFYITEMDRAW); // - так надо, если в процедуре диалогового окна
            return TRUE;
 
        case CDDS_ITEMPREPAINT:
            //return CDRF_NOTIFYSUBITEMDRAW; - это в процедуре главного окна
            SetWindowLong (hDlg, DWL_MSGRESULT, CDRF_NOTIFYSUBITEMDRAW); // - так надо, если в процедуре диалогового окна
            return TRUE;
 
        case CDDS_SUBITEM | CDDS_ITEMPREPAINT:              
            //..тут рисуем
 
                ...
 
            //return CDRF_SKIPDEFAULT; - это в процедуре главного окна
            SetWindowLong (hDlg, DWL_MSGRESULT, CDRF_SKIPDEFAULT); // - так надо, если в процедуре диалогового окна
            return TRUE;
                 
        }           
    }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2015, 14:33

WM_SIZE и кнопки в диалоговом окне
Всем привет! Создаю диалоговое окно из rc-файла, начальные размеры окна и...

Нажатие кнопки в диалоговом окне
Добрый день! У меня проблема с нажатием кнопки в диалоговом окне загрузки файла...

Как послать сообщение в диалоговом окне?
Здравствуйте! Вот часть кода диалогово окна: INT_PTR CALLBACK...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru