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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 21.04.2011, 18:33   #1
ronny137
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 52
По умолчанию прямоугольник

помогите пожалуйста доработать прогу, чтоб прямоугольник появлялся написал, а чтоб он менял цвет по клику и очищался экран ничего не получается.

надо доделать, чтоб этот прямоугольник по клику изменил цвет а по второму клику очистился экран

Header file:
draw.h
Код:
#ifndef _Draw_h
#define _Draw_h

#include "GraphicObjects.h"

void DrawRectangle( HDC hdc, TRectangle& rect, int left, int upper );
void DrawText( HDC hdc, TText& text, int left, int upper );

#endif
graphicObject.h
Код:
#ifndef _GraphicObjects_h
#define _GraphicObjects_h

struct TRectangle
{
	int side1;
	int side2;

	bool ready;
};

void RectMake( TRectangle& rect, int side1, int side2 );
int RectGetSide1( const TRectangle& rect );
int RectGetSide2( const TRectangle& rect );
bool IsRectReadyToDraw( const TRectangle& rect );

struct TText
{
	char * value;
	int length;

	bool ready;
};

void TextMake( TText& text, const char *value );
const char * TextGetValue( const TText& text );
int TextGetLength( const TText& text );
bool IsTextReadyToDraw( const TText& rect );

#endif
Source files:
deaw.cpp
Код:
#include <windows.h>

#include "Draw.h"

void DrawRectangle( HDC hdc, TRectangle& rect, int left, int upper )
{
	HBRUSH hNewBrush = ::CreateSolidBrush( RGB( 220, 127, 17 ) );
	HBRUSH hOldBrush = HBRUSH ( ::SelectObject( hdc, hNewBrush ) );

	::Rectangle( hdc, left, upper, left+RectGetSide1( rect ), upper+RectGetSide2( rect ) );

	::DeleteObject( hNewBrush );
	::SelectObject( hdc, hOldBrush );
}

void DrawText( HDC hdc, TText& text, int left, int upper )
{
	COLORREF oldBkColor = ::SetBkColor( hdc, RGB( 220, 127, 17 ) );
	
	::TextOut( hdc, left, upper, TextGetValue( text ), TextGetLength( text ) );
	
	::SetBkColor( hdc, oldBkColor );
}
graphicObject.cpp
Код:
#include <string.h>

#include "GraphicObjects.h"

void RectMake( TRectangle& rect, int side1, int side2 )
{
	rect.side1 = side1;
	rect.side2 = side2;

	rect.ready = true;
}

int RectGetSide1( const TRectangle& rect )
{
	return rect.side1;
}

int RectGetSide2( const TRectangle& rect )
{
	return rect.side2;
}

bool IsRectReadyToDraw( const TRectangle& rect )
{
	return  rect.ready;
}

void TextMake( TText& text, const char *value )
{
	text.length = strlen( value );
	text.value = new char[ text.length+1 ];

    strcpy( text.value, value );

	text.ready = true;
}

const char * TextGetValue( const TText& text)
{
	return text.value;
}

int TextGetLength( const TText& text )
{
	return text.length;
}

bool IsTextReadyToDraw( const TText& text )
{
	return text.ready;
}
ronny137 вне форума
Старый 21.04.2011, 18:34   #2
ronny137
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 52
По умолчанию

mainframe.cpp
Код:
#include <windows.h>
#include <winuser.h>

#include "GraphicObjects.h"
#include "Draw.h"

/*
 * Глобальные переменные в связи с представлением главного окна приложения
 */
HINSTANCE hInst; // Дескриптор экземпляра приложения

const char * classTitle = "Advanced Hello With Paint (процедурный проект)"; // Текст заголовка главного 
                                                                // главного окна приложения
                                                                // (title bar text)
const char * className = "MainFrameWnd"; // Имя регистрируемого класса окна
                                         // (main window class name)

/*
 * Графические объекты для отображения в клиентской области главного окна
 */
TRectangle rect = { 0, 0, false };
TText text = { "", 0, false };

/*
 * Прототипы функций, входящих в состав модуля
 */
void ConstructAndRegisterWndClass( HINSTANCE hInstance );
BOOL InitInstanceAndShow( HINSTANCE hInstance, int cmdShow );
LRESULT CALLBACK WndProc( HWND hInstance, UINT message, WPARAM wparam, LPARAM lparam );

int WINAPI WinMain( HINSTANCE hInstance, 
				    HINSTANCE hPrevInstance,
					char * cmdParam,
					int cmdShow
	  			   )
{
	// Определение свойств оконного класса и его регистрация
	ConstructAndRegisterWndClass( hInstance );

	// Создание окна и его отображение
	if( !InitInstanceAndShow( hInstance, cmdShow ) ) return FALSE;

	// Цикл обработки соообщений
	MSG  msg;
    int status;

    while( (status = ::GetMessage( &msg, 0, 0, 0 ) ) != 0 )
    {
        if (status == -1)	return -1;
        ::DispatchMessage( &msg );
    }

    return msg.wParam;
}


void ConstructAndRegisterWndClass( HINSTANCE hInstance )
{
	WNDCLASSEX wcex;

	// Заполнение полей структуры WNDCLASSEX начальными значениями
	wcex.cbSize = sizeof(WNDCLASSEX); 

	wcex.style			= 0;				// свойства окна по умолчанию
	wcex.lpfnWndProc	= (WNDPROC)WndProc; // оконная процедура обязательна!
	wcex.cbClsExtra		= 0;
	wcex.cbWndExtra		= 0;
	wcex.hInstance		= hInstance;		// дескриптор владельца класса обязателен!
	wcex.hIcon			= 0;
	wcex.hCursor		= ::LoadCursor(NULL, IDC_ARROW); // вид курсора (необязательное поле) 
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1); // цвет фона (необязательное поле)
	wcex.lpszMenuName	= 0;
	wcex.lpszClassName	= className;        // имя класса окна обязательно!
	wcex.hIconSm		= 0;

	RegisterClassEx(&wcex);
}

BOOL InitInstanceAndShow( HINSTANCE hInstance, int cmdShow )
{
	HWND hWnd;

	// Создание экземпляра окна
	hWnd = ::CreateWindow(
        className,            // имя регистрируемого оконного класса
        classTitle,           // заголовок окна
        WS_OVERLAPPEDWINDOW,  // стиль окна
        CW_USEDEFAULT,        // позиция x
        CW_USEDEFAULT,        // позиция y
        CW_USEDEFAULT,        // ширина
        CW_USEDEFAULT,        // высота
        0,                    // handle to parent window
        0,                    // handle to menu
        hInstance,            // дескриптор экземпляра
        0 );                  // дата создания (window creation data)

	if( !hWnd ) return FALSE;

	// Отображение окна
	::ShowWindow( hWnd, cmdShow );
	::UpdateWindow( hWnd );

	return TRUE;
}

LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
    switch( message )
    {
	case WM_LBUTTONDOWN:
		if( !IsRectReadyToDraw( rect ) ) 
		{
			RectMake( rect, 400, 100 );
			::InvalidateRect( hWnd, NULL, FALSE );
		}
		break;
	case WM_RBUTTONDOWN:
		if( !IsTextReadyToDraw( text ) )
		{
			TextMake( text, "Hello, Windows!" );
			::InvalidateRect( hWnd, NULL, FALSE );
		}
	case WM_PAINT:
		{
			PAINTSTRUCT ps;
			
			HDC hdc = ::BeginPaint( hWnd, &ps );

			if( IsRectReadyToDraw( rect ) ) DrawRectangle( hdc, rect, 50, 100 );
			if( IsTextReadyToDraw( text ) ) DrawText( hdc, text, 55, 105 );

			::EndPaint( hWnd, &ps );
		}
		break;
    case WM_DESTROY:
        ::PostQuitMessage (0);
        return 0;
    }

	// Необработанные сообщения передаются Window
    return ::DefWindowProc( hWnd, message, wParam, lParam );
}
ronny137 вне форума
Старый 21.04.2011, 19:34   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Кросспост.
тема во Фрилансе.

Тут закрыто.
Serge_Bliznykov вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прямоугольник с размерами A*B. xamelion Общие вопросы Delphi 1 17.10.2010 10:39
Прямоугольник с тенями SashaN Помощь студентам 4 14.05.2010 14:22
C#, прямоугольник Goldcoding Фриланс 2 09.04.2010 20:34
прямоугольник(масм) Дініс Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 21.12.2009 07:33
Неправельный прямоугольник soonner Мультимедиа в Delphi 5 01.06.2009 22:25