Вообщем угораздило меня,пошел я в Магистратуру...в этом семестре проходим VC++ самостоятельно.В итоге должны сделать по простенькой программе к экзамену.
До этого имел знакомство с VB и VB.NET,соответственно имел дело с Visual Studio.Там все наглядно+самоучители по VB.net есть,вообще разобраться можно!А вот с VC++ чет не клеится нефига.
Вообщем смысл задачи-сделать программу,чтобы пользователь мог построить гистограмму по своим данным.
При этом он вводит количество гистограмм на графике,название осей графика и подпись к гистограмам(ну стандарт короче,аля EXCEL)(гистограмм 2-10)
Ну и соотвественно значения этих гистограм(1-100)
Подскажите как можно это сделать?Хотя бы в нужную степь толкните,а самоучителях ничего полезного пока не нашел.Буду благодарен за подсказку.
ЗЫ.Как лучше сделать переход из одной формы в другую в режиме диалока,ну мол "Введите число гистограмм,нажмите далее","Введите название осей координат,нажмите далее" и тд.
Вообще не могу найти команду переходна(открытия) новой формы...
Помогите ньюбу
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Вообщем с горем пополам нарисовал прямоугольников несколько
void CRec1View::OnDraw(CDC* pDC)
{
CRec1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CBrush br;
br.CreateSolidBrush(RGB(255, 255, 0));
CDC* cdc=GetDC();
CBrush *oldBrush=cdc->SelectObject(&br);
cdc->Rectangle(0, 0, 20, 20);
cdc->SelectObject(oldBrush);
cdc->Rectangle(0, 20, 20, 40);
CBrush bre;
bre.CreateSolidBrush(RGB(215, 250, 0));
cdc->SelectObject(&bre);
cdc->Rectangle(50, 50, 20, 20);
CBrush bred;
bred.CreateSolidBrush(RGB(128, 0, 0));
cdc->SelectObject(&bred);
cdc->Rectangle(100, 100, 20, 20);
}
Никак не допру,что делает выделенная строчка!Кто объяснит что делается в этой строке.
void CRec1View::OnDraw(CDC* pDC)
{
CRec1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CBrush br;
br.CreateSolidBrush(RGB(255, 255, 0));
CDC* cdc=GetDC();
CBrush *oldBrush=cdc->SelectObject(&br);
cdc->Rectangle(0, 0, 20, 20);
cdc->SelectObject(oldBrush);
cdc->Rectangle(0, 20, 20, 40);
CBrush bre;
bre.CreateSolidBrush(RGB(215, 250, 0));
cdc->SelectObject(&bre);
cdc->Rectangle(50, 50, 20, 20);
CBrush bred;
bred.CreateSolidBrush(RGB(128, 0, 0));
cdc->SelectObject(&bred);
cdc->Rectangle(100, 100, 20, 20);
}
Никак не допру,что делает выделенная строчка!Кто объяснит что делается в этой строке.
СВой,
Этот оператор выбирает (делает текущей) в графический контекст cdc созданную ранее кисть (brush) желтого (RGB(255, 255, 0)) цвета. При этом предыдущая кисть запоминается в переменной oldBrush.
Текущая кисть используется затем для заполнения внутренности прямоугольника, рисуемого чуть ниже:
cdc->Rectangle(0, 0, 20, 20);
MSDN об CDC::Rectangle:
Draws a rectangle using the current pen. The interior of the rectangle is filled using the current brush.
Подробнее см. описание в MSDN соответсвующих функции.
Код: Выделить всё
CBrush *oldBrush=cdc->SelectObject(&br);
Текущая кисть используется затем для заполнения внутренности прямоугольника, рисуемого чуть ниже:
cdc->Rectangle(0, 0, 20, 20);
MSDN об CDC::Rectangle:
Draws a rectangle using the current pen. The interior of the rectangle is filled using the current brush.
Подробнее см. описание в MSDN соответсвующих функции.
Хм...ну идея ясна!Только одного не пойму!Зачем старую кисть сохранять в переменную OldBrush!Почти везде где я видел способы рисования,это делается,а зачем остается загадкой.
И вот эту строчку хочу уточнить
CDC* cdc=GetDC();
Просто создает графический контекст чтобы можно было выводить графику на экран:?
Где MSDN скачать можно?на битые ссылки постоянно нарываюсь.
PS.Спасибо за ответы!Очень помогло
И вот эту строчку хочу уточнить
CDC* cdc=GetDC();
Просто создает графический контекст чтобы можно было выводить графику на экран:?
Где MSDN скачать можно?на битые ссылки постоянно нарываюсь.
PS.Спасибо за ответы!Очень помогло
СВой,
Старую кисть сохраняют, чтобы затем можно было удалить созданную, когда она перестанет быть нужной и, тем самым осовободить ресурсы.
CDC* cdc=GetDC(); не создаеь, а получает существующий графический контекст.
Вообще, CDC - это MFC-шный класс, уже некоторая надстройка над Виндовым контекстов HDC. Вроде как для удобства. Хотя порой кажется, что как раз это только усложняет понимание, "как там чего внутри крутится".
MSDN в интернете можно онлайн читать msdn.microsoft.com. Можно ли скачать - не представляю.
Старую кисть сохраняют, чтобы затем можно было удалить созданную, когда она перестанет быть нужной и, тем самым осовободить ресурсы.
CDC* cdc=GetDC(); не создаеь, а получает существующий графический контекст.
Вообще, CDC - это MFC-шный класс, уже некоторая надстройка над Виндовым контекстов HDC. Вроде как для удобства. Хотя порой кажется, что как раз это только усложняет понимание, "как там чего внутри крутится".
MSDN в интернете можно онлайн читать msdn.microsoft.com. Можно ли скачать - не представляю.
Можно У знакомого забрать забываю.
Слушай с этим CDC запутался в конец ну да ладно.
Такой вопрос...я хочу сделать прогу в диалоговом окне,т.к там удобно будет управляющие элементы расставлять и тд.
В какой класс мне писать код для рисования?Чтобы в окне отображалось все.Вчера удалось повесить рисование на нажатие клавижи...вроде бы работало,а я хочу чтобы у меня при открытии окна выводилось уже все нарисованое(Оси гистограммы),а потом при нажатии кнопки все рисовалось.Ну так вот....куда код рисования линий помещать нужно?Где не попробую ошибку дает
Слушай с этим CDC запутался в конец ну да ладно.
Такой вопрос...я хочу сделать прогу в диалоговом окне,т.к там удобно будет управляющие элементы расставлять и тд.
В какой класс мне писать код для рисования?Чтобы в окне отображалось все.Вчера удалось повесить рисование на нажатие клавижи...вроде бы работало,а я хочу чтобы у меня при открытии окна выводилось уже все нарисованое(Оси гистограммы),а потом при нажатии кнопки все рисовалось.Ну так вот....куда код рисования линий помещать нужно?Где не попробую ошибку дает
А что за ошибки?СВой писал(а):Где не попробую ошибку дает
Ну в компиляторе отписывает мол 1-Error,0-warning.
Дело вот в чем,сейчас писал код для отображения всего это по нажатию на кнопку!Все отлично работает и тд.А как сделать,чтоб при загрузке формы,сразу мне оси рисовались?
И еще вопрос в дохонку...
Рисую оси через метод LineTo с координатами и тд.Решил чтобы не париться со штриховкой своих осей,сделать через цикл все
Ну вроде
for (int index=0;index=9;Index++)
{
x=340+20*Index;
Moveto(x,340);
LineTo(x,300);
}
Рисую вертикальную штриховку соотвественно.
Так должно быть?Опять же не получается...VC++ вообще виснет
Дело вот в чем,сейчас писал код для отображения всего это по нажатию на кнопку!Все отлично работает и тд.А как сделать,чтоб при загрузке формы,сразу мне оси рисовались?
И еще вопрос в дохонку...
Рисую оси через метод LineTo с координатами и тд.Решил чтобы не париться со штриховкой своих осей,сделать через цикл все
Ну вроде
for (int index=0;index=9;Index++)
{
x=340+20*Index;
Moveto(x,340);
LineTo(x,300);
}
Рисую вертикальную штриховку соотвественно.
Так должно быть?Опять же не получается...VC++ вообще виснет
И какой текст ошибки?СВой писал(а):Ну в компиляторе отписывает мол 1-Error,0-warning.
Вообще-то, все отрисовки делаются (если речь об MFC) в методе OnPaint. А если надо инициировать перерисовку "по нажатию на кнопку", то в обработчике нажатия вызывают Invalidate (). После чего Windows сама уже вызовет нужным образом OnPaint.СВой писал(а):Дело вот в чем,сейчас писал код для отображения всего это по нажатию на кнопку! Все отлично работает и тд.А как сделать,чтоб при загрузке формы,сразу мне оси рисовались?
ну в обработчике нажатия у меня получается отрисовать все,а мне нужно чтобы это при открытии окна делалось.
Если я создаю диалоговое окно у меня появляются Source файлы StdAfx,название_проги.cpp,название проги.rc,название_прогиDlg.cpp.
И классы:
CAboutDlg
Сназвание_прогиApp
Cназвание_прогиDlg
(класса OnDraw нету,как вариант создать...?)
Я никак не пойму,куда мне нужно код вставить для того,чтобы при загрузке все отрисовалось!
Не то в ресурсы,нето в Классы...и куда конкретно!Вообщем я вообще запутался.
Не разъяснишь?
Если я создаю диалоговое окно у меня появляются Source файлы StdAfx,название_проги.cpp,название проги.rc,название_прогиDlg.cpp.
И классы:
CAboutDlg
Сназвание_прогиApp
Cназвание_прогиDlg
(класса OnDraw нету,как вариант создать...?)
Я никак не пойму,куда мне нужно код вставить для того,чтобы при загрузке все отрисовалось!
Не то в ресурсы,нето в Классы...и куда конкретно!Вообщем я вообще запутался.
Не разъяснишь?