OnPaint (не OnDraw) - не класс, а метод (MFC-"оболочка" обработчика сообщения WM_PAINT).
Для класса Cназвание_прогиDlg он должен уже быть в созданном визардом исходнике. Тут же уже имеется графический контекст оператором:
CPaintDC dc(this); // device context for painting
Если рисуешь прямо на диалоговое окно - рисуй в этом методе.
Если на диалоговое окно добавлены другие элементы (дочерние окна), и рисовать требуется в них, то удобно создать свой класс - наследник от стандартного Win-элемента, и там указать (удобно через Wizard) обработчик WM_PAINT, и отрисовку проводить уже там (в OnPaint этого класса)
Помогите ньюбу
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Хм,сегодня попробую.Спасибо.Что то сам не допер до этого
Такой вопрос еще...
Смотри...
допустим я хочу нарисовать прямоугольник пропорциональный введенному числу:
ну скажем:
x=300+k*20
pdc->rectangle(x,400,300,300)
Такая конструкция получится?Или с C++ в качестве координат выяисляемое число впихнуть нельзя:?
Кстати,о переменных!Не совсем понял в где их все-таки прописывать лучше?В том классе в котором они используются или в файле с текстом проги,ну скажем название_Проги.cpp?с условием что это будет public переменная.
Такой вопрос еще...
Смотри...
допустим я хочу нарисовать прямоугольник пропорциональный введенному числу:
ну скажем:
x=300+k*20
pdc->rectangle(x,400,300,300)
Такая конструкция получится?Или с C++ в качестве координат выяисляемое число впихнуть нельзя:?
Кстати,о переменных!Не совсем понял в где их все-таки прописывать лучше?В том классе в котором они используются или в файле с текстом проги,ну скажем название_Проги.cpp?с условием что это будет public переменная.
Не очень понятны вопросы.
А почему нельзя? (опять же: если правильно понял суть вопроса)СВой писал(а):x=300+k*20
pdc->rectangle(x,400,300,300)
Такая конструкция получится? Или с C++ в качестве координат выяисляемое число впихнуть нельзя:?
Ну дело в том,что опять же ошибка компиляции вылезает...либо я не там переменные описываю.
Посоветуй где лучше переменную описывать(например x или k)Из примера.В основном тексте программы(прога.cpp)
Или в конкретном классе?
Или вообще в тексте программы,сразу перед использованием:
(например
int x;
x=300+k*20)
Кстати,у меня при создании программы автоматически создаются классы,как я писал:
CAboutDialog
Сназвание_прогиApp
Cназвание_прогиDlg
За что эти классы отвечают?
Посоветуй где лучше переменную описывать(например x или k)Из примера.В основном тексте программы(прога.cpp)
Или в конкретном классе?
Или вообще в тексте программы,сразу перед использованием:
(например
int x;
x=300+k*20)
Кстати,у меня при создании программы автоматически создаются классы,как я писал:
CAboutDialog
Сназвание_прогиApp
Cназвание_прогиDlg
За что эти классы отвечают?
ну значит можно.
Я просто не пойму где лучше переменную описать! В основном тексте проги(прога.cpp),в каком то из ресурсов,или в каком-либо из классов?
Где обычно это делается?
Кроме этого,не подскажешь
VC++ генерит сам следующие классы:
CAboutDlg
Сназвание_прогиApp
Cназвание_прогиDlg
За что они отвечают?
Ну первый класс,вроде бы за отображение информации о программе....
Я просто не пойму где лучше переменную описать! В основном тексте проги(прога.cpp),в каком то из ресурсов,или в каком-либо из классов?
Где обычно это делается?
Кроме этого,не подскажешь
VC++ генерит сам следующие классы:
CAboutDlg
Сназвание_прогиApp
Cназвание_прогиDlg
За что они отвечают?
Ну первый класс,вроде бы за отображение информации о программе....
Значит можно.
Просто я не допру,где лучше описать переменную,в основной проге(прога.cpp) в каком-нибуть дургом ресурсе(в каком тогда?))или вообще в конкретном классе...
Где это нагляднее делать.
Или вообще прямо в тексте,перед использование
(ну скажем int x;
x=300+k*20)
Как все сложно-жесть
Просто я не допру,где лучше описать переменную,в основной проге(прога.cpp) в каком-нибуть дургом ресурсе(в каком тогда?))или вообще в конкретном классе...
Где это нагляднее делать.
Или вообще прямо в тексте,перед использование
(ну скажем int x;
x=300+k*20)
Как все сложно-жесть
В зависимости от смысла и от того, где будет использоваться переменная. Если в пределах лишь одной процедуры, то описывать локально в этой процедуре.СВой писал(а):Ну дело в том,что опять же ошибка компиляции вылезает...либо я не там переменные описываю.
Посоветуй где лучше переменную описывать(например x или k)Из примера.В основном тексте программы(прога.cpp)
Или в конкретном классе?
Если переменная опиывает какую-то сущность/свойство класса и должна использоваться во многих методах этого класса, то описывать как член этого класса.
Использовать глобальные переменные, вообще-то, считается дурным тоном. Так как в этом случае они становятся доступны отовсюду и, если программа большая, сам потом запутаешься, где и когда эта переменная была изменена. Но "правда жизни, товарищи" (c) такова, что иногда, все-таки, приходится использовать глобально описанные переменные.
Такое описание x корректно.Или вообще в тексте программы,сразу перед использованием:
(например
int x;
x=300+k*20)
В принципе, можно догадаться, взглянув на получившийся текст.CAboutDialog
Сназвание_прогиApp
Cназвание_прогиDlg
За что эти классы отвечают?
Сназвание_прогиApp - класс и экземпляр MFC-приложения (где, в частности, присутствует экземпляр класса:
Сназвание_прогиApp theApp).
Cназвание_прогиDlg - класс диалогового окна приложения.
CAboutDialog - класс диалогового окна "About" приложения. Этот класс создается, если при создании приложения в визарде поставить (точнее: не снять) галочку "About box" (см. присоединенную картинку)
Вообще, если хочешь посоветоваться, почему "ошибка компиляции вылезает", то, чтобы читающие могли дать более качаетвенный совет, приводи текст ошибки.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо за ответы,по поводу классов я так и думал,на всякий случай уточнил.
Сейчас попоробую дальше что-нибудь изваять...Чтото времени все меньше
По поводу ошики...где можно посмотреть расшифровку ошибки?Мне при компиляции только пишется ,мол,0-warning,1-error....при этом что именно за ошибка не пишется
EDIT.Вот я олух Скором вверх не прокрутил Пока мучаю программу...большинство на угад,спасибо за подсказки-очень выручили! Завтра еще вопросы появяться.
Столкнулся с проблемой.Не пойму в чем дело.
Сделал текстовые поля,связал их с переменной,ну скажем m_y1,m_y2,m_y3.(3 значения для пробы,пытаюсь заставить программу рисовать прямоугольники пропорционально введенным значениям.будет у меня такая гистограмма)
ну вот присвоил текстовым полям переменные, попробывал в обратотчике нажатия кнопки(по нажатию я рисую прямоугольники) вставить текств вроде
CBrush bre;
bre.CreateSolidBrush(RGB(215, 250, 0));
cdc->SelectObject(&bre);
cdc->Rectangle(390, 500, 410, 500-m_y1);
Ну т.е. по идее у меня меняется только координата y у прямоугольника.Компиляция проходит нормально,но прямоугольник не вырисовывается.В чем может быть проблема?
А значение из текстового поля в переменную можно записать только с помощью member variebels?
Как посоветуешь подписи к осям сделать?Их значения я буду скорее всего в отдельном окне задавать,после этого мне их нужно вывести рядом с осью
Сейчас попоробую дальше что-нибудь изваять...Чтото времени все меньше
По поводу ошики...где можно посмотреть расшифровку ошибки?Мне при компиляции только пишется ,мол,0-warning,1-error....при этом что именно за ошибка не пишется
EDIT.Вот я олух Скором вверх не прокрутил Пока мучаю программу...большинство на угад,спасибо за подсказки-очень выручили! Завтра еще вопросы появяться.
Столкнулся с проблемой.Не пойму в чем дело.
Сделал текстовые поля,связал их с переменной,ну скажем m_y1,m_y2,m_y3.(3 значения для пробы,пытаюсь заставить программу рисовать прямоугольники пропорционально введенным значениям.будет у меня такая гистограмма)
ну вот присвоил текстовым полям переменные, попробывал в обратотчике нажатия кнопки(по нажатию я рисую прямоугольники) вставить текств вроде
CBrush bre;
bre.CreateSolidBrush(RGB(215, 250, 0));
cdc->SelectObject(&bre);
cdc->Rectangle(390, 500, 410, 500-m_y1);
Ну т.е. по идее у меня меняется только координата y у прямоугольника.Компиляция проходит нормально,но прямоугольник не вырисовывается.В чем может быть проблема?
А значение из текстового поля в переменную можно записать только с помощью member variebels?
Как посоветуешь подписи к осям сделать?Их значения я буду скорее всего в отдельном окне задавать,после этого мне их нужно вывести рядом с осью
cdc->Rectangle(390, 500, 410, 500-m_y1);
Если m_y1 - число положительное, то получается, что у прямоугольника у-координата левого верхнего угла (500) больше у-координаты правого нижнего угла (500 - m_y1). Может, в этом дело?
Содеждимое контрола Edit можно получить при помощи GetWindowText. Только результат будет - строка (char [] или CString). Затем надо будет перевести в целое (напр., atoi)
Если m_y1 - число положительное, то получается, что у прямоугольника у-координата левого верхнего угла (500) больше у-координаты правого нижнего угла (500 - m_y1). Может, в этом дело?
Содеждимое контрола Edit можно получить при помощи GetWindowText. Только результат будет - строка (char [] или CString). Затем надо будет перевести в целое (напр., atoi)
А я думал наобарот,первые координаты-это координаты левого нижнего и правого верхнего угла...хм...надо бы уточнить...темнеменее я думаю что кривой,но прямоугольник бы нарисовался.Завтра попробую по-другому.
Т.е GetWindowText.IDC_EDIT1?Сейчас посмотрю как правильно задается...
Идея с переводом в целое интересная,странно что с UpdateData(false) не пашет По идее должен был данные из поля в переменную заносить
Кстати,попробывал вместо координаты 500-m_y1 ввести просто число...скажем 300!Все вырисовывается нормально,так что тут дело не в координате
Т.е GetWindowText.IDC_EDIT1?Сейчас посмотрю как правильно задается...
Идея с переводом в целое интересная,странно что с UpdateData(false) не пашет По идее должен был данные из поля в переменную заносить
Кстати,попробывал вместо координаты 500-m_y1 ввести просто число...скажем 300!Все вырисовывается нормально,так что тут дело не в координате