imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 17.12.2005, 22:43     # 1
ЛеднеFF
Junior Member
 
Регистрация: 01.04.2005
Сообщения: 121

ЛеднеFF Мелкий засранец
граффика в С++

есть microsoft visual C++

как в консольном приложении нарисовать точку(и) или линии?

ну по аналогии с бэйсиком (screen 2 : pset (x,y) цвет)

ну ни где не могу найти
ЛеднеFF вне форума  
Старый 17.12.2005, 22:49     # 2
Trotil
Advanced Member
 
Аватар для Trotil
 
Регистрация: 21.04.2005
Адрес: град Москва
Сообщения: 431

Trotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собой
Цитата:
ЛеднеFF:
COLORREF SetPixel (HDC,x,y, color )
Это функция из Win API, и для консольных приложений просто так применять нельзя. Нужно преварительно получить хендл и контекст устройства.
Код:
#include "stdafx.h"
#include "windows.h"
using namespace std;

BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lParam)
{
   if(GetWindowThreadProcessId(hwnd, NULL) == GetCurrentThreadId())
   {
      *(HWND*)lParam = hwnd;
      return FALSE;
   }

   return TRUE;
}

int main(int argc, _TCHAR* argv[])
{
   HWND hWnd;
   HDC hDc;
   EnumWindows(EnumWndProc, (LPARAM)&hWnd);
   hDc = GetDC(hWnd);
   for (int i=20; i<100; i++)

   ::SetPixel(hDc,i,i,RGB(255,0,0));
   getchar();
	return 0;

}
Если у Вас MS VS 6.0, закомментируйте строку
Код:
using namespace std;
По идее должно работать и выводить наклонную красную черту.

Цитата:
ЛеднеFF:
особенно касающиеся какого там HDC
Это контекст устройства, получаемого через хендл, для выполнения опеpаций интеpфейса GDI, куда вы хотите вывести данный пиксель.
Хендл - говоря простым языком, описатетель или идентификатор объекта. Под объектом может подразумеваться все что угодно. (окно, кнопка, даже устройство). При этом гарантируется, что все хендлы (handle) в пределах одного процесса(?) будут уникальны.

Последний раз редактировалось Trotil; 17.12.2005 в 22:57.
Trotil вне форума  
Старый 17.12.2005, 23:01     # 3
ЛеднеFF
Junior Member
 
Регистрация: 01.04.2005
Сообщения: 121

ЛеднеFF Мелкий засранец
не находит <stdafx.h>
ЛеднеFF вне форума  
Старый 17.12.2005, 23:05     # 4
Trotil
Advanced Member
 
Аватар для Trotil
 
Регистрация: 21.04.2005
Адрес: град Москва
Сообщения: 431

Trotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собой
Цитата:
ЛеднеFF:
не находит <stdafx.h>
Странно. Убери его тогда. ( + надо убрать getchar() )

Получилось?

Последний раз редактировалось Trotil; 17.12.2005 в 23:07.
Trotil вне форума  
Старый 17.12.2005, 23:08     # 5
ЛеднеFF
Junior Member
 
Регистрация: 01.04.2005
Сообщения: 121

ЛеднеFF Мелкий засранец
error C2061: syntax error : identifier '_TCHAR'
ЛеднеFF вне форума  
Старый 17.12.2005, 23:11     # 6
Trotil
Advanced Member
 
Аватар для Trotil
 
Регистрация: 21.04.2005
Адрес: град Москва
Сообщения: 431

Trotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собой
int main(int argc, _TCHAR* argv[]) замени на int main(int argc, char* argv[]) или на int main(void)

У меня код работает, я обычно проверяю его, прежде чем выставлять его всеобщее обозрение.

Правда у меня MS VS 2003 .Net и MS VS 2005 .Net. 6-ую версию удалил год назад и возвращаться не собираюсь...
Но данный код по идее корректно должен работать и в 6-ой версии, с учетом небольшой корректировки.

Последний раз редактировалось Trotil; 17.12.2005 в 23:57.
Trotil вне форума  
Старый 17.12.2005, 23:20     # 7
ЛеднеFF
Junior Member
 
Регистрация: 01.04.2005
Сообщения: 121

ЛеднеFF Мелкий засранец
откомпилировал, единственное что появилось это

press any key to continue на черном экране
ЛеднеFF вне форума  
Старый 17.12.2005, 23:53     # 8
PVitaliy
Junior Member
 
Регистрация: 28.10.2003
Адрес: Украина
Сообщения: 57

PVitaliy Нимб уже пробиваетсяPVitaliy Нимб уже пробивается
Вообще говоря консольные приложения придуманны для того чтобы в консоли только текст выводить, никакой графики (разве что еще псевдографика, ее не считаю). И хоть теоретически это возможно, (найти окно, найти его девайсконтекст, и потом рисовать), я всеже думаю что лучше не извращатся, а открыть мсдн, потратить полдня узнать что такое окно в виндовсе, и как работает процедура окна, и рисовать уже напрямую на форме, это и проще, и быстрее, и понятнее, и удобнее.
PVitaliy вне форума  
Старый 18.12.2005, 00:01     # 9
Trotil
Advanced Member
 
Аватар для Trotil
 
Регистрация: 21.04.2005
Адрес: град Москва
Сообщения: 431

Trotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собой
Цитата:
PVitaliy:
И хоть теоретически это возможно, (найти окно, найти его девайсконтекст, и потом рисовать),
Да я так и сделал...
Цитата:
PVitaliy:
я всеже думаю что лучше не извращатся,
По-другому не получится, увы...
Trotil вне форума  
Старый 18.12.2005, 00:16     # 10
ЛеднеFF
Junior Member
 
Регистрация: 01.04.2005
Сообщения: 121

ЛеднеFF Мелкий засранец
MSDN это куча каких то несвязанных данных (да еще на техническом английском) и найти там можно только то что знаешь и знаешь где искать, а я только начал врубаться что такое СИ++ и для обучения хочу написать прогу взаимодействия трех тел в пространстве- если как писать я знаю, то как выводить рисунок движения тел незнаю, в литературе (учебниках) даже простейшие вещи (возведение в степень, перехват символа с клавиатуры без ожидания ?, точность расчета - ну что б не округлял значения) неуказаны, а уж консоли не консоли это вообще

А граффика на чем делается в смысле не окна там всякие всплывающие, а типа игр где нужно быстро все выводить, в консоли или нет?

Последний раз редактировалось ЛеднеFF; 18.12.2005 в 02:31.
ЛеднеFF вне форума  
Старый 18.12.2005, 06:15     # 11
PVitaliy
Junior Member
 
Регистрация: 28.10.2003
Адрес: Украина
Сообщения: 57

PVitaliy Нимб уже пробиваетсяPVitaliy Нимб уже пробивается
Я постоянно использую MSDN, там есть все, хотя периодически микрософт недоговаривает.
Игры пишутся с использованием библиотек ДиректХ, которые позволяют рисовать 3хмерную графику быстро на экране.
А програмирование имхо изучать надо начинать всеже с програмирования под виндовс: как кнопку вывести, как обработчик прикрутить, как меню создать, как с клавиатурой работать. Потом можно двинутся в сторону ДиректХ, и програмировать 3хмерную графику, или писать юзеринтерфейсы при помощи винконтролов, это уже кому чего больше нравится.
PVitaliy вне форума  
Старый 18.12.2005, 12:33     # 12
Trotil
Advanced Member
 
Аватар для Trotil
 
Регистрация: 21.04.2005
Адрес: град Москва
Сообщения: 431

Trotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собой
перехват символа с клавиатуры без ожидания
Это противоречит логике программирования ДОС-овских приложений, однако это как раз очень просто делается с помощью методов программирования под Windows (в этом и состоит одно из преимуществ Windows)
Но код приводить или что-либо объяснять - долго и наверняка ничего не поймешь. (надо прочитать про события, обработчики событий(в случае MFC) или про функцию окна)
ИМХО, ты сейчас бежишь впереди паравоза и достаточно далеко убежал. Не надо спешить. Ты сейчас хочешь сразу понять такие вещи, которые не так просты для понимания, как поначалу кажется.

Ты читал мой пост в ебуках относительно книг по VS? Какой книгой ты пользуешься? Какие цели ты преследуешь при изучении VS? Чего ты хочешь добиться в программировании? Какой уровень программирования на данный момент?

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

А тем путем, которым пошел ты - естественно, преграды и непонимание будет встречаться на каждом пути...
Trotil вне форума  
Старый 22.12.2005, 14:53     # 13
ЛеднеFF
Junior Member
 
Регистрация: 01.04.2005
Сообщения: 121

ЛеднеFF Мелкий засранец
Я тут немного разобрался как в Visual C++ писать проги и задавать события кнопкам, так вот вопрос:

допустим на кнопку старт у меня запускается моя прога (в соответствующем месте программы соответствующем этой кнопке) и непрерывно считает и рисует что нибудь пока не остановишь - так вот как сделать так, что бы при нажатии какой нибудь кнопки она остановилась, ведь в этот момент ни какие кнопки не проверяются пока моя программа работае в цикле.

И второй вопрос, при создании нового всплывающего диалогового окна код программы находится отдельно и эта часть программы не видит переменные предыдущего окна (ни глобальные ни другие), как их передать из предыдущего окна в текущее.....
ЛеднеFF вне форума  
Старый 22.12.2005, 16:51     # 14
SapeR
::VIP::
 
Регистрация: 17.12.2002
Адрес: Q-ata, Israel
Сообщения: 310

SapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царстве
запускается моя прога - создавай новый поток, у тебя останется указатель на него, поток побежит параллельно основной программе, сможешь остановить когда угодно

не видит переменные предыдущего окна (ни глобальные ни другие), как их передать из предыдущего окна в текущее
допустим у меня есть родительское окно MyWnd и дочернее MyDlg и переменная родительского окна int MyWnd.m_Test . тогда я создаю в дочернем аналог данной переменной (вариант А) и копирую значение непосредственно перед показом окна. или поинтер на оригинальную переменную (вариант Б - уже немного наглость)

вариант А
определение
class MyDlg : CDialog { ...
int m_MyParentTest;
создание
MyDlg d1;
d1.m_MyParentTest = m_Test
использование
d1.DoModal()
... int x = m_MyParentTest
вариант Б
определение
class MyDlg : CDialog { ...
int* m_pMyParentTest;
создание
MyDlg d1;
d1.m_pMyParentTest = & m_Test;
использование
m_pMyParentTest = 10; // m_Test тоже меняется
SapeR вне форума  
Старый 22.12.2005, 17:38     # 15
ЛеднеFF
Junior Member
 
Регистрация: 01.04.2005
Сообщения: 121

ЛеднеFF Мелкий засранец
Цитата:
Сообщение от SapeR
запускается моя прога - создавай новый поток, у тебя останется указатель на него, поток побежит параллельно основной программе, сможешь остановить когда угодно
[
Это в смысле ,создаем функцию отдельно, а в месте программы где идет реакция на нажатие кнопки вызываем эту функцию...да?

....что то не получается, нельзя ли то же пример

Последний раз редактировалось ЛеднеFF; 22.12.2005 в 18:08.
ЛеднеFF вне форума  
Старый 22.12.2005, 21:38     # 16
Drakosha
Full Member
 
Аватар для Drakosha
 
Регистрация: 16.10.2002
Адрес: ArchLinux, Internet
Сообщения: 557

Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)
про потоки:
http://ru.wikipedia.org/wiki/%D0%9C%...81%D1%82%D1%8C
http://en.wikipedia.org/wiki/Thread_...ter_science%29
Drakosha вне форума  
Старый 22.12.2005, 23:26     # 17
PVitaliy
Junior Member
 
Регистрация: 28.10.2003
Адрес: Украина
Сообщения: 57

PVitaliy Нимб уже пробиваетсяPVitaliy Нимб уже пробивается
Не, потоки тут по моему немного неправильно. Поток разве для того чтобы данные для прорисовки подготовить, и то это не та тема, которую нужно разбирать начинающему. А рисование должно быть типа как покадровым и конечным (не в вечном цикле), т.е. алгоритм перерисовывает весь экран, и заканчивается. И по таймеру вызывается вновь.
PVitaliy вне форума  
Старый 24.12.2005, 23:31     # 18
ЛеднеFF
Junior Member
 
Регистрация: 01.04.2005
Сообщения: 121

ЛеднеFF Мелкий засранец
в Бэйсике есть обычная функция INKEY$ которая контролирует нажата ли какая нибудь клавиша, если нажата то сверяем не равна ли она нужной клавише, если не равна то повторяем цикл снова и так до тех пор пока не нажмем к примеру ESC. Так вот в С++ должно быть примерно также по моему?
а по поводу вечного цикла: представьте себе три тела в пространстве с начальными скоростями, моя программа ститает их взаимодействие с определенным заданным шагом по времени и отображает их положение на экране и все это отображается и считается пока мне не надоест и я не нажму кнопку Стоп. Так вот как это сделать....?

Последний раз редактировалось ЛеднеFF; 24.12.2005 в 23:35.
ЛеднеFF вне форума  
Старый 25.12.2005, 00:51     # 19
Trotil
Advanced Member
 
Аватар для Trotil
 
Регистрация: 21.04.2005
Адрес: град Москва
Сообщения: 431

Trotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собой
Еще раз хочу уточнить: какое приложение вы хотите создать? А то сначала речь шла о консольном приложении, теперь появились кнопка "Стоп"...
Trotil вне форума  
Старый 25.12.2005, 02:38     # 20
ЛеднеFF
Junior Member
 
Регистрация: 01.04.2005
Сообщения: 121

ЛеднеFF Мелкий засранец
Про консольные я уже забыл , теперь речь идет о диалоговых окнах.
Создал окно для ввода параметров, потом после нажатия кнопки старт всплывает следующее окно на котором рисуется траектория движения тел, а так как летать они могут долго (несколько миллиардов лет ) то когда я хочу остановить это, то на окне есть кнопочка Стоп, но так как моя прога работает в бесконечном цикле, при нажатии на Стоп все зависает(в смысле программма), а если нарисовать только один цикл, то что бы тела летали и дальше нужно очень часто и ооочень быстро давить на кнопку Старт (шутка)..... так вот что бы этого не произошло я так понимаю в цикл нужно вставить функцию проверки нажатий на кноппочки и если они нажаты то все можно идти спать.... Только не знаю что это за функция

Или к примеру есть игра стреллялка (Квакер к примеру) там мужик ходит в разные стороны при нажатии соответствующих клавиш а коли не нажаты клавиши, то игра все равно не останавливается а просто живет своей жизнью и ждет нажатий на ктопки (она собственно тоже работает в "бесконечном" цикле)

Последний раз редактировалось ЛеднеFF; 25.12.2005 в 02:43.
ЛеднеFF вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 05:32.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.