доработать прогу
21.04.2011, 18:30. Показов 576. Ответов 0
помогите пожалуйста доработать прогу, а то я не могу ее дописать((
надо доделать, чтоб этот прямоугольник по клику изменил цвет а по второму клику очистился экран
Header file:
draw.h
| Code | 1
2
3
4
5
6
7
8
9
| #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
| Code | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| #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
| Code | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| #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
| Code | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| #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
| Code | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
| #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 );
} |
|
0
|