Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2009, 18:27   #1
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию Создание графа в Form,C++

Возникла необходимость построения в окне программы графа.Надо сетку 9х8,потом перемещаем элемент графа(ну или кликаем кнопку и щелкаем на ячейку),устанавливаем связи(например,щелкнули кнопку и сначала выделяем i элемент,потом щелкаем по j и рисуется линия) ну и некоторые другие функции...Посоветуйте как это лучше прорисовать и объясните неучу что да как.Хотел сначала сделать через таблицы(например DrawGrid),но как тогда связи прорисовывать?..
Заранее спасибо.
З.Ы. Мне надо,чтобы вы мне накатали эту прогу,нужен дельный совет и периодическая поддержка..)))
Не давай организму поблажки, каждый день тренируй его в шашки..

Последний раз редактировалось Скарам; 08.10.2009 в 10:53.
Скарам вне форума Ответить с цитированием
Старый 08.10.2009, 17:08   #2
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Ну нарисовать ячеистую структуры думаю сами сделайте(хотя бы линиями...)
Есть событие маус клик которое свойственно объекту.
При нажатии на какую либо ячейку можно записать в событие маус клин какие либо изменения.
Как скажем провести линию из одной ячейки в другую:
есть 4 глобальные переменные которые рисуют по второму маус клику прямую.(х1,у1,х2,у2) где х1 у1 Вы возьмете из первой ячейки куда ткнете мышкой, х2 у2 следовательно из второго ...
Ну как-то так пришло на ум)
dampirik вне форума Ответить с цитированием
Старый 08.10.2009, 20:15   #3
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

Думаю начать с того,чтобы создать структуру
Код:
struct graf
   {
     TRect coordinates;//координаты(ну или просто проинтую 2 переменные)
     int x;//значение для матрицы смежности
     int value;//состояние в котором находиться элемент(их может быть несколько
   }
Из этих структур сделать матрицу смежности
Код:
graf matrix[9][8];
Ну а сейчас занимаюсь тем,что заставляю программу рисовать в окне...читаю и подбираю материал и тд... надо же когда-то начинать учиться рисовать в окне..))
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 08.10.2009, 22:39   #4
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Как то мне кажется Вы слишком усложняете задачу...

Последний раз редактировалось dampirik; 08.10.2009 в 22:41.
dampirik вне форума Ответить с цитированием
Старый 08.10.2009, 22:52   #5
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

хм...да нет,я её упрощаю для того,чтобы мне быстрее дали ответ...на самом деле там очень много надо делать,отмечать какой элемент(в мат. модели это резонатор) входной-выходной-промежуточный,для каждого резонатора свои характеристики и тд..
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 09.10.2009, 16:03   #6
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Если самое простое... мы имеем два квадрата расположенных случайно.
Нужно нажать мышкой на один, потом на второй в следствии чего провидется линия... сделать в общем виде
Если я правильно понял.. то сегодня вечером на работе сделаю)
dampirik вне форума Ответить с цитированием
Старый 09.10.2009, 19:48   #7
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

ну в общем случае да..))буду благодарен за любую помощь))
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 10.10.2009, 05:49   #8
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Ну вот как-то так:
Код:
private: System::Void pictureBox1_MouseClick(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
			 if(a==0)
				{a=1;x1=this->MousePosition.X-this->Left;
				 y1=this->MousePosition.Y-this->Top;}
			  if(a==1)
				 {a=0;x2=this->MousePosition.X-this->Left;
				  y2=this->MousePosition.Y-this->Top;}
				 


			 }
	private: System::Void pictureBox2_MouseClick(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
			 if(a==0)
				{a=1;x1=this->MousePosition.X-this->Left;
				 y1=this->MousePosition.Y-this->Top;}
			  if(a==1)
				 {a=0;x2=this->MousePosition.X-this->Left;
				  y2=this->MousePosition.Y-this->Top;}
			 }
	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
				 Color ^col=gcnew Color();
				 Pen ^pen=gcnew Pen(col->Black);
				 Graphics ^im = this->CreateGraphics();
				 pen->Width=10;
				 im->DrawLine(pen,x1,y1,x2,y2);
			 }
	private: System::Void pictureBox3_MouseClick(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {

			if(a==0)
				{a=1;x1=this->MousePosition.X-this->Left;
				 y1=this->MousePosition.Y-this->Top;}
			  if(a==1)
				 {a=0;x2=this->MousePosition.X-this->Left;
				  y2=this->MousePosition.Y-this->Top;}
			 }
только с переменной а где-то касяк...(хотел обобщить...)ну задумку ты понял...
Без нее для двух объектов рисует..
dampirik вне форума Ответить с цитированием
Старый 10.10.2009, 09:05   #9
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

Да,спасибо,всё более-менее понятно...мой преподаватель мне советовал сделать через WinApi,написал в инсте,там VS2005,только вот беда,в builder даже найти такого не могу))). Функция рисует круг по щелчку левой клавиши мыши и закрашивает его красным,если щелкнуть правой клавишей внутри его:
Код:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;
	static struct Sv
		{
			int x,y,r;
	}sv={0,0,50},sv1={0,0,0};
	HBRUSH h1,h2;
	switch (message)
	{
	case WM_COMMAND:
		wmId    = LOWORD(wParam);
		wmEvent = HIWORD(wParam);
		// Parse the menu selections:
		switch (wmId)
		{
		case IDM_ABOUT:
			DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
			break;
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;
	case WM_LBUTTONDOWN:
		hdc=GetDC(hWnd);//дескриптор окна
		wmId=LOWORD(lParam);
		wmEvent=HIWORD(lParam);
		sv.x=wmId;sv.y=wmEvent;
		Ellipse(hdc,sv.x-sv.r,sv.y-sv.r,sv.x+sv.r,sv.y+sv.r);
		break;
	case WM_RBUTTONDOWN:

		wmId=LOWORD(lParam);
		wmEvent=HIWORD(lParam);
		sv1.x=wmId;sv1.y=wmEvent;
		sv1.r=(int)sqrt((double)(sv1.x-sv.x)*(double)(sv1.x-sv.x)-(double)(sv1.y-sv.y)*(double)(sv1.y-sv.y));
		//if(sv1.r<sv.r)
		if(sv1.x>=sv.x-sv.r && sv1.x<=sv.x+sv.r && sv1.y>=sv.y-sv.r && sv1.y<=sv.y+sv.r)
		{   
			hdc=GetDC(hWnd);

			h1=CreateSolidBrush(RGB(255,0,0));
			SelectObject(hdc,h1);
			Ellipse(hdc,sv.x-sv.r,sv.y-sv.r,sv.x+sv.r,sv.y+sv.r);
		}
		break;
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		// TODO: Add any drawing code here...
		EndPaint(hWnd, &ps);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}
Тут я создал структуру(в начале функции),кисть,добавил и написал отработку для case WM_LBUTTONDOWN и case WM_RBUTTONDOWN...Только ещё надо отработать WM_PAINT,чтобы перерисовывал кружки,если меняется размер окна)) В общем буду дальше читать...кто бы знал как эта программа надоела)..Видать не быть мне программистом)
З.Ы. И последняя просьба не скинете ли ссылочку на теорию,которая используется в Ваших процедурах?
Не давай организму поблажки, каждый день тренируй его в шашки..

Последний раз редактировалось Скарам; 10.10.2009 в 09:56.
Скарам вне форума Ответить с цитированием
Старый 10.10.2009, 16:15   #10
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Я до нет использую... C++/CLR теории мало... но все есть на MSDN...
dampirik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание User form Zhene4ka2607 Помощь студентам 6 21.05.2009 18:59
Создание User form Zhene4ka2607 Microsoft Office Excel 4 21.05.2009 17:37
Связность графа. Пaвeл Помощь студентам 0 26.04.2009 10:42
Form.Show в Form.Create UnD)eaD)Snake Общие вопросы Delphi 6 07.09.2007 11:13