Консультация № 138613
30.05.2008, 04:53
0.00 руб.
0 1 1
Уважаемые эксперты! В программе запускаются 2 процесса: вывод прямоугольников и треугольников. Подскажите, как и какие строки в программе нужно исправить, чтобы выводился закрашенный прямоугольник и прямые линии.

В приложении фрагмент для вывода незакрашенного прямоугольника.

Приложение:
#include <windows.h> //заголовочный файл для win32 приложений#pragma hdrstop#define SizeWindow 400 //размер окна //описание переменныхMSG msg; //сообщениеHDC hdc; //контекст устройстваHBRUSH hBrush; //тип кистиHWND Wnd; //handle окнаWNDCLASS wnds; //структура класса окнаchar ClassName[255]="Rectangle"; //имя класса окна//оконная функцияLRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){switch (uMsg){ //поступило сообщение case WM_DESTROY: //выход PostQuitMessage(0); return 0; case WM_TIMER: //сработал таймер Rectangle(hdc, random(SizeWindow), random(SizeWindow/2), random(SizeWindow), random(SizeWindow)); //нарисовали произвольный четырехугольник default: //по умолчанию DefWindowProc(hWnd, uMsg, wParam, lParam); break; }}WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) {//регистрация класса окна в системеwnds.style = CS_HREDRAW + CS_VREDRAW + CS_GLOBALCLASS;wnds.lpfnWndProc = WindowProc;wnds.cbClsExtra = 0;wnds.cbWndExtra = 0;wnds.hInstance = hInstance;wnds.hIcon = LoadIcon(0, IDI_APPLICATION);wnds.hCursor = LoadCursor(0, IDC_ARROW);wnds.hbrBackground = (HBRUSH) 6;wnds.lpszMenuName = 0;wnds.lpszClassName = ClassName; //атрибуты структуры окна заполненыRegisterClass(&wnds); //зарегистрируем класс окнаWnd = CreateWindowEx(0, ClassName,"Rectangles",WS_EX_DLGMODALFRAME,GetSystemMetrics(SM_CXFULLSCREEN)/2 - SizeWindow,GetSystemMetrics(SM_CXFULLSCREEN)/2 - SizeWindow,SizeWindow, SizeWindow/2,0,0,hInstance,0); //создадим экземпляр зарегистрированного класса окнаShowWindow(Wnd,SW_SHOWNORMAL); //отобразим окно на экранеhdc = GetDC(Wnd); //получим его контекстSetTimer(Wnd,1,100,NULL); //установим таймерint Exit = 1;while(Exit){ //обработка сообщений от окна if ((Exit = GetMessage(&msg,0,0,0))) { TranslateMessage(&msg); DispatchMessage(&msg); } }return 0;}

Обсуждение

Неизвестный
30.05.2008, 09:46
общий
это ответ
Здравствуйте, Сергеев Александр!
В приведенной вами программе отрисовка прямоугольника производится в строчке:
<code>
Rectangle(hdc, random(SizeWindow), random(SizeWindow/2), random(SizeWindow), random(SizeWindow));
</code>
Для отрисовки случайной линии используйте:
<code>
MoveToEx(hdc, random(SizeWindow), random(SizeWindow), NULL);
LineTo(hdc, random(SizeWindow), random(SizeWindow));
</code>
а для закрашенного прямоугольника:
<code>
RECT r = {
random(SizeWindow),
random(SizeWindow/2),
random(SizeWindow),
random(SizeWindow)
};

FillRect(hdc, &r, (HBRUSH) (COLOR_WINDOW+1));
</code>
Форма ответа