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

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

Восстановить пароль Регистрация
 
ronny137
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 61
21.04.2011, 18:30     доработать прогу #1
помогите пожалуйста доработать прогу, а то я не могу ее дописать((

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

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++ Доработать программу
Доработать программу C++
C++ доработать
Цикл(Доработать прогу для решения квадратных уравнений) C++
доработать программу C++
Доработать программу C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 23:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru