Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ronny137
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 61
#1

доработать прогу - C++

21.04.2011, 18:30. Просмотров 278. Ответов 0
Метки нет (Все метки)

помогите пожалуйста доработать прогу, а то я не могу ее дописать((

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

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;
}
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 );
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2011, 18:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос доработать прогу (C++):

Скатерть Улама - помогите доработать прогу :) - C++
Есть код программы, но что-то не могу заставить его работать в Visual Studio 2008.. int simple(int n) { int i; int ret=1; ...

Цикл(Доработать прогу для решения квадратных уравнений) - C++
Написал прогу для решения квадратных уравнений,но как известно она вычисляет только раз и потом уже закрывается,а я захотел сделать...

доработать - C++
вот программа #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;iostream&gt; typedef double (*Pfun)(const double, const double ); ...

Доработать программу - C++
Ниже рабочая программа, но надо сделать без использования циклов (кроме уже имеющегося) и функций (аля pow). Проблема в том что я не пойму...

Доработать код - C++
Нужно что-бы программа не заменяла многократные пробелы однократным , а просто удаляла их. (Должно быть в виде функции) #include...

Доработать программу - C++
Помогите доработать программу-Даны натуральное n, целые числа a1, ..., an. Внутри данной последовательности могут быть поваторяющиеся...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2011, 18:30
Привет! Вот еще темы с ответами:

Доработать программу - C++
Здравствуйте, преподавателю не нравится как выполнена задача,жалуется на формулу и требует её сократить (о чем в задаче не упоминается) при...

Доработать программу - C++
День добрый. У меня есть программа, которая удваивает каждый символ, из введенной строки. Как сделать, чтобы удвоенная пара символов...

доработать программу - C++
что изменить в коде, чтобы значения вводились не с клавиатуры, а читались из файла или хотя бы вводились в самом коде? пробовал вводить в...

Доработать программу - C++
Как сюда добавить учет табуляции и переноса строки #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru