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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2009, 15:19   #1
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию не выводится графика на экран

Мне необходимо написать программу,которая бы на выбор пользователя рисовала квадрат заштрихованный, просто контур квадрата и квадрат, вложенный в другой квадрт. я написал программу в Visual Studio 2008, он не выдаёт никаких ошибок, но при запуске графика всё равно не появляется подскажите пожалуйста,что у меня не так в программе?.. заранее благодарен...

Код:
#include<stdio.h>
#include<conio.h>
#include<windowsx.h>
#include<AtlConv.h>
#include<math.h>

void input(int *x0, int *y0, int *l)
{
	FILE *in;
	in = fopen("d:\\input.txt", "r");
	fscanf_s(in, "%d", &x0);
	fscanf_s(in, "%d", &y0);
	fscanf_s(in, "%d", &l);
}

void nezakrash(HWND hwnd, HDC hdc, int x0, int y0, int l)
{
	HPEN hMyPen = CreatePen (PS_SOLID, 3, RGB(111,17,203)); //создали перо

	POINT ppt[4]={ {x0, y0},{x0+l,y0},{x0+l,y0-l},{x0,y0-l} };
	Polyline (hdc, ppt, 4); //рисование квадрата функцией построения ломаной линии
}

void zakrash(HWND hwnd, HDC hdc, int x0, int y0, int l)
{
	HPEN hMyPen = CreatePen (PS_SOLID, 3, RGB(111, 17, 203)); //создаём фиолетовое перо

	SelectPen (hdc, hMyPen); //выбрали фиолетовое перо
	Rectangle (hdc, x0, y0, x0+l, y0+l); //рисуем прямоугольник,в частном случае квадрат
}

void vlozhen(HWND hwnd, HDC hdc, int x0, int y0, int l)
{

	HPEN hFirstPen = CreatePen (PS_SOLID, 3, RGB(111, 17, 203)); //создаём фиолетовое перо
	HPEN hSecondPen = CreatePen (PS_SOLID, 3, RGB(228, 241, 55));

	SelectPen (hdc, hFirstPen); //выбрали фиолетовое перо
	Rectangle (hdc, x0, y0, x0+l, y0+l); //рисуем большой квадрат
	FloodFill (hdc, x0+l/2, y0-l/2, RGB(55, 217, 55)); 
	/*закрасили внутреннюю часть большого квадрата*/

	COLORREF rgb = GetPixel (hdc, x0+l+1,y0);//"взяли" цвет экрана

	SelectPen (hdc, hSecondPen); //выбрали жёлтое перо
	POINT ppt[4] = { {x0+l/4, y0-l/4},{x0+3*l/4, y0-l/4},{x0+3*l/4, y0-3*l/4},{x0+l/4, y0-3*l/4} };
	Polyline (hdc, ppt, 4); //рисуем вложеный квадрат
	FloodFill (hdc, x0+l/2, y0-l/2 , RGB(GetRValue(rgb), GetGValue(rgb), GetBValue(rgb)));
	/*закрасили внутреннюю часть малого квадрата цветом фона экрана*/
}

void main()
{
	USES_CONVERSION;

	HWND hwnd = FindWindow (A2W ("ConsoleWindowClass"),NULL); //получаем контекст изображения
	HDC hdc = GetDC (hwnd);

	if(hdc)
	{
		int x0,y0,l,P, temp;

		input(&x0, &y0, &l);

		P=1;
		while(P)
		{
			printf("\n==========================");
			printf("\nVarianty:");
			printf("\n  1.NEzakrashennaya");
			printf("\n  2.ZAkrashennaya");
			printf("\n  3.Dve vlozhennyh figury");
			printf("\n  4.Vyhod");
			printf("\nVash vybor: ");

			scanf("%d", &temp);

			if((temp!=1)&&(temp!=2)&&(temp!=3)&&(temp!=4))
			{
				printf("\nError! Ne verniy vvod!");
				printf("\nVash vybor: ");
				scanf("%d", &temp);
			}
			else
				{
					if(temp==4) P=0; // значит был выбран выход
					else 
						{
							if(temp==1) //незакрашенная фигура
							{
								nezakrash(hwnd, hdc, x0, y0, l);
							}
							else
								{
									if(temp==2)//закрашенная фигура
									{
										zakrash(hwnd, hdc, x0, y0, l);
									}
									else  //две вложенных фигуры
										{
											vlozhen(hwnd, hdc, x0, y0, l);
										}
								}
						}
				}
		}
	}
	else printf("\n Error in OS!");
	
	getch();

}
Petruha-nsk вне форума Ответить с цитированием
Старый 08.09.2009, 16:28   #2
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

эх...а мне видимо никто не поможет...
Petruha-nsk вне форума Ответить с цитированием
Старый 08.09.2009, 16:37   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А оно хоть хендл находит? Проверь чему равен hwnd. Мож FindWindow не отрабатывает как положено.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.09.2009, 17:58   #4
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

да я разобрался чё за косяк был!
я в кажду подпрограмму передавал HWND hwnd, а это означал, что в каждой подпрограмме свой контекст отображения)))
Petruha-nsk вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при чтении дважды выводится последний символ pavelstraut Общие вопросы C/C++ 9 23.07.2009 01:39
Массив не выводится на экран vikaspb Общие вопросы C/C++ 7 22.01.2009 17:29
вместо номера телефона выводится на экран какой-то мусор le_den Общие вопросы C/C++ 2 25.11.2008 20:45
сообщение не выводится(echo) ERASERROR PHP 26 27.01.2008 02:13