Графика в MS Visual 2005 C++

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

24 ноя 2008, 21:19

WinMain, спасибо за моральную поддержку :)

Vladimir89, bGisto должен быть глобальной переменной типа bool. Я подразумевал это, неужели не понятно? В Invalidate передаётся ещё один параметр типа BOOL - очищать заинвалидейченную облать или нет. Передавай туда TRUE.

У тебе ещё не хватает обработчика WM_DESTROY. В нём нужно не забыть вызвать PostQuitMessage и не забыть вызывать также DefWindowProc - это важно. Никогда не сталкивался с проблемой, что твою программу приходится снимать через Task Manager? :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Vladimir89
Сообщения: 75
Зарегистрирован: 21 май 2007, 02:25

01 дек 2008, 02:53

УРРЯЯЯЯ!
У МЕНЯ ЗАРАБОТАЛА КНОПОЧКА!!!!!!!
Си ++
Здоровье --
Аватара пользователя
Vladimir89
Сообщения: 75
Зарегистрирован: 21 май 2007, 02:25

01 дек 2008, 13:04

ААААААА
Эта дрянь опять не работает!
Решил сделать так: когда появляется окно программы там буде тнаписано текстом: работа такого-то такого-то. А потом когда нажмешь одну кнопку - рисуются точки. А потом когда нажмешь кнопку гистограмма рисуется гистограмма.
И вот значит я написал... Для начала просто тупо с текстом:

Код: Выделить всё

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
		PAINTSTRUCT ps;
	HDC hdc;
	int bGisto=0;
	int mas[2][500];
	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;
		case ID_GISTO:
			bGisto=2;
			//InvalidateRect(hWnd,NULL,TRUE);
		case ID_POINT:
			bGisto=1;
			//InvalidateRect(hWnd,NULL,TRUE);
         break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;
	case WM_PAINT:           /////////////////////////////////////////////
		hdc = BeginPaint(hWnd, &ps);
	if(bGisto==1)
	{
	//for(int i=0; i<500;i++)
	//SetPixel(hdc,mas[0][i],mas[1][i],0);
	TextOut(hdc,50,50,_T("Группа ПО0602"),39);
	}
	else
	TextOut(hdc,0,0,_T("Работа Шалаева Владимира. Группа ПО0602"),39);
    	EndPaint(hWnd, &ps);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
} 
Си ++
Здоровье --
Аватара пользователя
Vladimir89
Сообщения: 75
Зарегистрирован: 21 май 2007, 02:25

01 дек 2008, 13:07

Кнопки не работают! Ничего не работает и не изменяется!
Почему с 1 кнопкой работало а с 2мя уже не хочет?!!!!!
ППЦ!
Си ++
Здоровье --
Аватара пользователя
Vladimir89
Сообщения: 75
Зарегистрирован: 21 май 2007, 02:25

01 дек 2008, 13:59

С кнопками разобраться получилось!
Теперь все работает!

У меня новый вопрос: про комманду GetPixel
Мне нужно проверить всё окно программы на наличие темных точек. И запомнить координаты этих темных точек!
ГетПиксель возвращает какое то очень странное значение COLORREF - как им пользоваться никак не могу догадаться!
В общем мне нужен способ как сделать грамотно: if("цвет точки"=="черный") то добавляем координату в массив.
Си ++
Здоровье --
Аватара пользователя
Vladimir89
Сообщения: 75
Зарегистрирован: 21 май 2007, 02:25

01 дек 2008, 14:10

Еще не получается понять как пользоваться СетТаймером!
Пишу ему так: SetTimer(hWnd,1,2000,0);
Но не работает! ппц!
Си ++
Здоровье --
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

01 дек 2008, 22:22

1. Я же написал, что bGisto должен быть глобальной переменной, ты различаешь глобальные и локальные переменные?

2. Черный, это RGB(0, 0, 0). Можешь его вполне законно сравнивать оператором == с тем, что возвращает тебе GetPixel.

3. Ты сообщение WM_TIMER обработал в том окне, дескриптор которого передал в SetTimer в качестве первого аргумента? Если нет, то неудивительно, что не работает. Почитай внимательной в MSDN о функции SetTimer, не пытайся всё взять наскоком и методом проб и ошибок - это самый неправильный метод в программировании.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Vladimir89
Сообщения: 75
Зарегистрирован: 21 май 2007, 02:25

06 дек 2008, 03:35

Появился смешной вопрос!

Я создал статический массив int mas[2][500];
Теперь мне нужно передать его в функцию для обработки.
Я как только не изгалялся! Не получается! Мне нужно передать адрес его начала, ведь так? вот я пишу void random(int** mas)... Не работает! Через ссылку пробовал! Не получается! Я знаю что это идиотизм, но если кто сможет - подскажите!
Си ++
Здоровье --
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

06 дек 2008, 17:28

Слушай, у одного меня такой код компилируется?

Код: Выделить всё

int mas[30][10];

void f(int p[30][10])
{
}

void main()
{
   f(mas);
}
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Vladimir89
Сообщения: 75
Зарегистрирован: 21 май 2007, 02:25

06 дек 2008, 18:14

А мы таким макаром случайно не одно число передадим? оО
Си ++
Здоровье --
Ответить