Поиск:

Ответ в темуСоздание новой темы Создание опроса
> собственный CProgressCtrl 
:(
    Опции темы
xTr1m
Дата 22.7.2006, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



Вот я смотрел на codeproject примеры. И там приходит сообщение OnPaint и оно обрабатывается. Я создал свой CMyProgressBar , написал OnPaint? Но туда он не доходит. Думал, что есть что-то вроде BS_OWNERDRAW, но ничего такого не нашел. Что делать? 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 22.7.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



А ты обработчик OnPaint правильно подключил? Примеры чего ты смотрел на codeproject? 


--------------------
...
PM   Вверх
xTr1m
Дата 22.7.2006, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



Прошу прощения, была моя ошибка. Но тут другой вопрос:
вот если я буду отрисовывать собственную кнопку и в DrawItem ничего не напишу, то кнопку попросту не будет видно (это очевидно)
А вот если то же самое сделать с CProgressCtrl, то остается его обрамление (прямоугольник), даже если убрать стиль border. мне он не нужен, так я хочу сделать свой (слегка закругленный прямоугольник) Как тут быть? 
PM MAIL WWW ICQ   Вверх
AndreySol
Дата 22.7.2006, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: 1
Всего: 1



Объяви в хедере
Код

CRgn rgn;  // регион для отрисовки скругленного окна


Затем в обработчике OnSize(.....)
Код

CRect rectWnd;
GetWindowRect(rectWnd);
rectWnd -= rectWnd.TopLeft();
rgn.DeleteObject(); // удаление ранее созданного региона

// создание региона в виде прямоугольника с закругленными краями
    rgn.CreateRoundRectRgn(rectWnd.left, rectWnd.top, rectWnd.right,
        rectWnd.bottom, 20, 20);
// установка созданного региона для окна и немедленная перерисовка окна
SetWindowRgn(rgn, TRUE);
 
PM MAIL   Вверх
xTr1m
Дата 22.7.2006, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



Сообщение не приходит. Пишу в карте ON_WM_SIZE() и ее прототип    afx_msg void OnSize(UINT nType, int xz, int cy);
что-то опять напутал? 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 23.7.2006, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Рамка обычно рисуется на WM_NCPAINT. Попробуй перехватить это сообщение и оставить пустым. 


--------------------
...
PM   Вверх
xTr1m
Дата 23.7.2006, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



BOOL CWindPgrsBar::PreTranslateMessage(MSG* pMsg) 
{
    if(pMsg->message == WM_NCPAINT)
    {
        return FALSE;
        
    }
    
    return CProgressCtrl::PreTranslateMessage(pMsg);
}

но  до return FALSE; никогда не доходит.
добавил wizzzard'ом обработчик OnCommand(), но при щелчке мыши на элементе в этото OnCommand не заходит. Что у меня не так?
Что-то забыл? Просто у меня есть еще собственная кнопка т там все сообщения приходят. 
PM MAIL WWW ICQ   Вверх
xTr1m
Дата 23.7.2006, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



И еще , после совета AndreySol  рамка пропала, но не вся. Сверху буквально выглядывает ее маленький кусрчек (точнее линия от нее) 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 24.7.2006, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



WM_NCPAINT бесполезно ловить через PreTranslateMessage: это сообщение посылается непосредственно окну, а не помещается в очередь. 
Нужно написать свой обработчик: afx_msg void OnNcPaint() 
и добавить в карту сообщений: ON_NCPAINT().

Добавлено @ 07:22 
Т.е. ON_WM_NCPAINT(), конечно. 


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0479 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.