Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Графика С++  (Прочитано 29190 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Klusha
Гость
« : 26-03-2010 13:04 » 

Помогите пожалуйста! В программировании не шарю, но хотелось бы.
Создаю Win32 Console Application в Visual Studio 2008. В цикле считаю параметр зависящий от времени. Подскажите как этот параметр вывести на экран в виде графика. В древних версиях С++ помнится была библиотека <graphic.h> с функцией putpixel. А здесь что использовать?
Заранее спасибо.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 26-03-2010 13:07 » 

Для вывода графики в винде нужно окно. Т.ч. сразу создавай не консольное, а GUI приложение. Короче, разбираться надо — окружение совсем иное, нежели под DOS.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Klusha
Гость
« Ответ #2 : 26-03-2010 13:15 » 

Можешь скинуть мне ссылочку, где про это доходчиво написано?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 26-03-2010 13:23 » 

Ну самый лучший справочник-то вот здесь:
http://msdn.microsoft.com/en-us/library/default.aspx

А вобще - любой доступный источник инфы по созданию Win приложений в VisualStudio 2008.

зы Кстати у тебя какя версия? Не Expression случайно?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 26-03-2010 13:24 » 

Улыбаюсь Это не пять строчек и и не одна ссылочка.

Первоисточник информации здесь: msdn.microsoft.com
Смотри документацию на Win32 GDI.

Если хочется существенно попроще, то попробуй Borland C++ Builder.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Klusha
Гость
« Ответ #5 : 26-03-2010 13:29 » 

Случайно нет   Жаль
А это бы изменило как-то ситуацию?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 26-03-2010 13:38 » 

Klusha, комсомолка? Партизанка? Находишься в плену у фашистов? Ага

А какая именно у тебя студия? Ща начну иголки под ногти втыкать. Тогда быстро разговоришься. Ага

Назад к стульям. Наоборот это хорошо, ибо в Express нет MFC. Тебе нужно создать проект MFC.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 26-03-2010 13:40 » 

Вот так (только от чтения мануалов тебя это не спасёт, это так сказать для затравки):

1. Создаём новый проект и даём ему имя MyTest



2. Срисовывай все настройки проекта один в один с картинки



3. Все остальные настройки оставляешь как есть, только на страничке Advanced Features убираешь опцию ActiveX contrlos (они тебе не нужны)



Всё, жмёшь Finish.

* ss1.gif (14.7 Кб - загружено 7236 раз.)
* ss2.gif (15.79 Кб - загружено 7248 раз.)
* ss3.gif (14.82 Кб - загружено 7206 раз.)
« Последнее редактирование: 26-03-2010 13:43 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Klusha
Гость
« Ответ #8 : 26-03-2010 13:49 » 

Нет, только не под ногти!!! Не мучайте меня сильно, пожалуйста... Скромно так...
У меня стоит Visual Studio 2008 Profesional Edition

Спасибо, что помогаешь! Люблю!
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 26-03-2010 13:55 » 

Не благодари, это не помощь. А только затравка. Помощью в данном случае будет небольшой месячный курс. Как минимум.

Ну последний взмах кисти:

идёшь в класс CMyTestView (mytestview.cpp) и находишь там уже подготовленную мастером ф-ю OnDraw. Обрати внимание на параметр, получаемый ф-цией. Для эксперимента переписываешь её след. образом:

Код:
// CMyTestView drawing

void CMyTestView::OnDraw(CDC* pDC)
{
CMyTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc) return;

double t = 0.0;
while(t<10)
{
int x = 200 + 10*t * cos(t);
int y = 100 + 10*t * sin(t);
pDC->SetPixel(x, y, RGB(255, 0, 0));
t += 0.1;
}
}

добавляешь #include <math.h> для использования ф-ций sin cos, жмёшь F5 и любуешься спиралью Архимеда.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Klusha
Гость
« Ответ #10 : 26-03-2010 13:59 » 

 Класс!
Спасибо!
По мере поступления вопросов буду еще обращаться...
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #11 : 26-03-2010 13:59 » 

На всякий пожарный:

* Mytest.zip (82.44 Кб - загружено 887 раз.)
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #12 : 26-03-2010 14:05 » 

Класс!
Спасибо!
По мере поступления вопросов буду еще обращаться...

Не за что. А вопросов много быть не должно. Сначала. Те собственно идея ясна. У тебя есть ф-я, в которую передаётся некий объект (указатель на него). В этот объект ты "рисуешь" всё что хочешь. После возвращения из ф-ции все твои "художества" на экране. Или (заинтригую) на принтере, если этот объект будет немного из другого теста. Ага Но больше ничего менять не придётся. Всё "отрисовка" останется как есть.

Вот когда их ("художеств") будет много и они начнут "моргать", вот тогда мы снова поговорим, хотя именно этой теме моргания посвящено несколько тем на формуе, тут тебе в первую очередь поможет товарищ Поиск. Но это в далёком будущем, а пока выясняй (читай) о Device Context и GDI. Сложного ничего нет, это надо просто знать. Ага Успехов.
« Последнее редактирование: 26-03-2010 14:10 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #13 : 31-05-2010 08:36 » new

В чем отличия следующих двух вариантов получения контекста устройства для рисования:
через GetSomeDC(hWnd,..)
и через BeginPaint(hWnd,..)
Всюду по разному, но как по мне - работает и так и так хорошо. Только после GetDC нужно realease делать, а после BeginPaint - EndPaint...
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 31-05-2010 09:38 » 

BeginPaint - создаёт новый контекст, EndPaint - вызывается, когда усё отрисовано (в обработчике WM_PAINT CWnd по умолчанию)

А GetDC - возвразщает ссылку на существующий контекст, поэтому надо не забывать вызывать ReleaseDC

Разница, по моему, большая )
Записан

yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #15 : 01-06-2010 05:57 » 

Все равно не понятно. Захотел отрисовать:
1. создал контекст, порисовал, вызвал EndPaint;
 или же так
2. получил ссылку на созданный контекст, порисовал, релизнул ссылку;

Это что, для разнообразия сделано, что ли? хочешь так, хочешь так... Можно как-то принципиальную разницу растолковать?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #16 : 01-06-2010 06:10 » 

а МСДН то на что дадено ? Ага
Цитата
The BeginPaint function automatically sets the clipping region of the device context to exclude any area outside the update region. The update region is set by the InvalidateRect or InvalidateRgn function and by the system after sizing, moving, creating, scrolling, or any other operation that affects the client area. If the update region is marked for erasing, BeginPaint sends a WM_ERASEBKGND message to the window.

An application should not call BeginPaint except in response to a WM_PAINT message. Each call to BeginPaint must have a corresponding call to the EndPaint function.

If the caret is in the area to be painted, BeginPaint automatically hides the caret to prevent it from being erased.

If the window's class has a background brush, BeginPaint uses that brush to erase the background of the update region before returning.


The EndPaint function marks the end of painting in the specified window. This function is required for each call to the BeginPaint function, but only after painting is complete.


The GetDC function retrieves a common, class, or private DC depending on the class style of the specified window. For class and private DCs, GetDC leaves the previously assigned attributes unchanged. However, for common DCs, GetDC assigns default attributes to the DC each time it is retrieved. For example, the default font is System, which is a bitmap font. Because of this, the handle for a common DC returned by GetDC does not tell you what font, color, or brush was used when the window was drawn. To determine the font, call GetTextFace.

Note that the handle to the DC can only be used by a single thread at any one time.

After painting with a common DC, the ReleaseDC function must be called to release the DC. Class and private DCs do not have to be released. ReleaseDC must be called from the same thread that called GetDC. The number of DCs is limited only by available memory.




Вызывать BeginPaint и EndPaint напрямую в MFC не нужно (хотя и не запрещено), это сделает экземпляр класса CPaintDC

CPaintDC dc(this); // device context for painting

который обычно объявляется в самом начале обработчика WM_PAINT (OnPaint). В конструкторе и деструкторе и вызывается BeginPaint и EndPaint.

В других местах программы (не в обработчике WM_PAINT) создавать новый контекст не нужно - обычно требуется что-то дорисовать поверх существующего. Для этого производится вызов GetDC()/ReleaseDC()
« Последнее редактирование: 01-06-2010 06:12 от Алексей1153++ » Записан

yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #17 : 01-06-2010 11:12 » 

Забываю иногда про MSDN Показываю язык Спасибо, все ясно
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines