Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Один CMyEdit для нескольких едитов чем это грозит? В релизе работает в Дебаге вылетает. 
V
    Опции темы
Прохожий
Дата 27.4.2007, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну в общем сабж. Определил класс CMyEdit тама сделал заполнение поля эдита своим цветом. Не заметил что проект стоял в Релизе определил через ДДХ контроль что несколько эдитов относятся к этому классу. Всё работает Эдиты раскрашиваются разными цветами. Потом переключил в Дебаг и приложение стало вылетать с предложением послать сообщение к такойто матери.. 
в MyEdit такой код больше ничего нет.
Код

HBRUSH MyEdit::CtlColor(CDC* pDC, UINT nCtlColor) 
{
    // TODO: Change any attributes of the DC here
    CRect rect;
    pDC->SetBkColor(m_Bcolor);
    m_brBkgnd.CreateSolidBrush(m_Bcolor);
    // TODO: Return a non-NULL brush if the parent's handler should not be called
    return m_brBkgnd;
}



В чём может быть дело. При компиляции без проблем. smile 
PM MAIL   Вверх
Earnest
Дата 27.4.2007, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Прохожий @  27.4.2007,  08:56 Найти цитируемый пост)
определил через ДДХ контроль что несколько эдитов относятся к этому классу

Что это значит? Поточнее...

Цитата(Прохожий @  27.4.2007,  08:56 Найти цитируемый пост)
Потом переключил в Дебаг и приложение стало вылетать с предложением послать сообщение к такойто матери

А конкретно? Дебаг обычно показывает ASSERT, войдя внутрь которого можно увидеть, что ему не нравится.

Пока у меня есть предположение, что либо несколько переменных связываются с одним окном (сабклассят его), что запрещено. Либо наоборот, есть переменные, не связанные с окнами, а к ним происходит обращение как к окнам.
Короче, должно быть так: одно поле в ресурсе диалога <-> одна переменная типа CMyEdit <-> одно предложение DDX_Control.



--------------------
...
PM   Вверх
Прохожий
Дата 27.4.2007, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В диалоге есть несколько Эдитов (3) определены таким образом 
Код

// Dialog Data
    //{{AFX_DATA(CDialogSetup)
    enum { IDD = IDD_SETUP_DIALOG };
    MyEdit    m_ceBeginColor;
    MyEdit    m_ceEndColor;
    MyEdit    m_ceSelColor;



Естественно 
#include "MyEdit.h"
подключен
в реализации 
Код

    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CDialogSetup)
    DDX_Control(pDX, IDC_EDIT_BEGIN_COLOR, m_ceBeginColor);
    DDX_Control(pDX, IDC_EDIT_END_COLOR, m_ceEndColor);
    DDX_Control(pDX, IDC_EDIT_SEL_COLOR, m_ceSelColor);


Это всё он  smile  сам сделал 
Далее я сделал так
Код

BOOL CDialogSetup::OnInitDialog() 
{
    CDialog::OnInitDialog();
    
    // TODO: Add extra initialization here
    m_ceSelColor.m_Bcolor = AfxGetApp()->GetProfileInt("DATA"    ,"SelColor", 15018000);
    m_ceBeginColor.m_Bcolor = AfxGetApp()->GetProfileInt("DATA","BeginColor", 65023);
    m_ceEndColor.m_Bcolor = AfxGetApp()->GetProfileInt("DATA","EndColor", 65399);



Тама ищо код есть мной сделан но до него не доходит
PM MAIL   Вверх
Прохожий
Дата 27.4.2007, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну дак 
Цитата

одно поле в ресурсе диалога <-> одна переменная типа CMyEdit <-> одно предложение DDX_Control.

У меня вроде и есть. Или я чего не понимаю? может там ещё кака тонкость есть?

Цитата

что либо несколько переменных связываются с одним окном (сабклассят его), 

Ну у меня 3и переменные и вроде MyEdit окном не является. 

Цитата

Либо наоборот, есть переменные, не связанные с окнами, а к ним происходит обращение как к окнам

Ну дак они у меня все связанны с окнами в ресурсах с помощью редактора стоят 3и эдита как и положенно.

И потом в Релизе почемуто всё работает  smile  А вот когда в Дебаг переключаешся вылетат совсем (эт винда выдаёт сообщение и закрывает прогу) но дебагер молчит.
PM MAIL   Вверх
Greeen
Дата 27.4.2007, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Где именно вылетает?


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
Прохожий
Дата 27.4.2007, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот щас через F5 запустил но в этом  smile  ни фига не рулю
Тут картинка что это значит smile

Добавлено через 6 минут и 7 секунд
Цитата

Где именно вылетает? 


Звиняйте не сказал.
Когда диалог выводит на экран и похоже дожен закрасить эдиты.
Потому как он их уже нарисовал. Только цвет фона как недоступный, а не хотябы белый, не говорю уже о своём цвете.

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  Debug.JPG 105,02 Kb
PM MAIL   Вверх
Greeen
Дата 27.4.2007, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Попробуй
Код

HBRUSH MyEdit::CtlColor(CDC* pDC, UINT nCtlColor) 
{
    return ::CreateSolidBrush(m_Bcolor);
}



--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
Прохожий
Дата 27.4.2007, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 smile  Greeen СПАСИБО!!! Помогло всё  smile 
PM MAIL   Вверх
Greeen
Дата 27.4.2007, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пожалста  smile 


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
Прохожий
Дата 27.4.2007, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Попутно ещё вопрос. Есть-ли такая Функция? которая выдаёт контрастный цвет для шрифта на основе цвета который ей подсунешь (контрастный для этого цвета)???


Это сообщение отредактировал(а) Прохожий - 27.4.2007, 10:38
PM MAIL   Вверх
Greeen
Дата 27.4.2007, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Прохожий, насколько я знаю такой функции нет. Но можно так:
Код

COLORREF Color1 = RGB(0, 0, 0); // например цвет фона церный
COLORREF Color2 = 0xFFFFFF - Color1; // получаем контрастный цвет белый



--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
Прохожий
Дата 27.4.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Мне кажется что так просто не получится. Тама наверно может лажа пойдёт кода будут другии цвета. Вааще - то щас попробую попробую

Добавлено через 6 минут и 27 секунд
Вобщем терпимо. Но лучше былобы чтоб или черный становился или белый, есть мысль может как-то сравнивать результат и потом принудительно задавать черный/белый. 
 smile надо подумать.
PM MAIL   Вверх
Greeen
Дата 27.4.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Прохожий, ну конечно это самый простейший вариант. Если нужно что то получше поищи в нете, инфы предостаточно. Удачи!!!  smile 


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
Earnest
Дата 27.4.2007, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Прохожий @  27.4.2007,  12:36 Найти цитируемый пост)
Мне кажется что так просто не получится. 

Точно не получится. Представь, что исходный цвет серый...

Цитата(Прохожий @  27.4.2007,  12:36 Найти цитируемый пост)
Но лучше былобы чтоб или черный становился или белый

Это просто. Вычисляешь яркость исходного цвета. Если она > 127, то берем черный, если <, то белый.
Яркость считаем, например, так: (30*R + 59*G + 11*B)/100;


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


 




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


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

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