Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++ и WinAPI

Войти
Регистрация
Восстановить пароль
 
Chudakulli
1 / 1 / 0
Регистрация: 16.02.2013
Сообщений: 57
#1

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

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

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

Изображение в диалоговом окне - C++ WinAPI
Добрый день. Не как не могу разобраться как выводить изображение в диалоговом окне. В родительском получается а тут нет. Я так понял надо...

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

Нажатие кнопки в диалоговом окне - C++ WinAPI
Добрый день! У меня проблема с нажатием кнопки в диалоговом окне загрузки файла а IE8. Вылазит стандартная форма с тремя кнопками Открыть,...

Баги с картинкой в диалоговом окне - C++ WinAPI
Картинку из формата png конвертировал в ico. На картинке есть прозрачность и полупрозрачность. Храню ее в ресурсах как иконку IDI_ICON2....

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

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

2
dmitry94
562 / 192 / 36
Регистрация: 25.05.2012
Сообщений: 800
21.08.2015, 06:58 #2
Цитата Сообщение от Chudakulli Посмотреть сообщение
Но вот когда открываю диалоговое окно, которое содержит другой ListView, в нем уже так не получается. Почему-то в обработчик WM_NOTIFY диалогового окна не приходят сообщения с параметром NM_CUSTOMDRAW
А остальные сообщения от данного контрола приходят?
Нужен код хотябы обработки сообщение диалога.
1
Chudakulli
1 / 1 / 0
Регистрация: 16.02.2013
Сообщений: 57
03.09.2015, 14:33  [ТС] #3
Ура, парни! Разобрался. Если кому надо: проблема была в том, что процедура диалогового окна возвращает или 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
Привет! Вот еще темы с ответами:

Как послать сообщение в диалоговом окне? - C++ WinAPI
Здравствуйте! Вот часть кода диалогово окна: INT_PTR CALLBACK Dialog_vvod_danix_klient (HWND hDlg, UINT message, WPARAM wParam, LPARAM...

Как описать TreeView в диалоговом окне - C++ WinAPI
ButtonsExample DIALOGEX 50, 50, 300, 200 STYLE DS_CENTER | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION...

Несколько полос прокрутки в диалоговом окне - C++ WinAPI
Добрый день ! Подскажите пожалуйста как различать от какого горизонтального скролинга пришло сообщение, если у меня их 5 штук и...

Как отметить CheckBox в диалоговом окне? - C++ WinAPI
Возникла необходимость отметить чекбокс при откритие диалогового окна. Как это можно реализовать? Я думаю нужно послать сообщение ...


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

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

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