![]() |
|
Программирование >> Процедурные приложения
![]() Рис. 17.13. Сектор, нарисованный в окне приложения Рисование прямоугольника Функция Rectangle() предназначена для построения прямоугольника или квадрата с использованием двух точек с. координатами х1,у1и х2,у2. Получаемая замкнутая фигура закрашивается цветом текущей кисти. Дескриптор контекста устройства задается параметром hdc. Все остальные параметры имеют тип int. В случае успешного завершения функция возвращает значение true. Синтаксис функции Rectangle (): Rectangle (hdc, xl, yl, x2, y2) В приведенном ниже фрагменте программы создается прямоугольник и сопровождающая его надпись (рис. 17.14): Rectangle(hdc, 50, 300, 150, 400); TextOut(hdc, 160,350, <- A Rectangle , 14); Simple Windows Program <- A Rectangle Рис. 17.14. Прямоугольник, нарисованный в окне приложения Использование файла SWP.C в качестве шаблона В предыдущих параграфах описаны принципы разработки простейшего Windows-приложения, которое теперь может послужить шаблоном для создания других приложений. Ниже показан текст приложения, строящего синусоиду. * Sine.с * Программа, которая рисует синусоиду. * Построена на базе файла swp.c. #include <windows.h> #include <math.h> #define pi 3.14159265359 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); : char szProgName[]= ProgName ; int WINAPI WinMain (HINSTANCE hlnst, HINSTANCE hPrelnst, , ,., LPSTR IpszCmdLine, int nCmdShow) HWND hWnd; MSG IpMsg; WNDCLASS wcApp; wcApp.lpszClassName = szProgName; wcApp.hlnstance = hlnst; wcApp.lpfnWndProc = WndProc; wcApp.hCursor = LoadCursor(NULL, IDC ARROW); wcApp.hlcon = NULL; wcApp.lpszMenuName = NULL; wcApp.hbrBackground = GetStockObject(WHITE BRUSH); wcApp. style = CS HREDRAW CS VREDRAW; wcApp.cbClsExtra = 0; wcApp.cbWndExtra = 0; if (IRegisterClass(SwcApp)) return 0; hWnd = CreateWindow(szProgName, A Sine Wave , WS OVERLAPPEDWINDOW, CW USEDEFAULT, CW USEDEFAULT, CW USEDEFAULT, CW USEDEFAULT, (HWND)NULL,.(HMENU)NULL, (HANDLE)hlnst, (LPSTR)NULL); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); while (GetMessage(&lpMsg, 0, 0 , 0) ) { TranslateMessage(SlpMsg); DispatchMessage(SlpMsg); return (IpMsg.wParam) ; LRESULT CALLBACK WndProc(HWND hWnd, DINT messg, WPARAM wParam, LPARAM IParam) { HOC hdc; PAINTSTRUCT ps; double y; int i; switch (messg) { case WM PAINT: hdc=BeginPaint(hWnd, Sps) ; /* построение осей координат */ MoveToEx(hdc, 100, 50, NULL); LineTo(hdc, 100, 350); MoveToEx(hdc, 100, 200, NULL); LineTo(hdc, 500, 200); MoveToEx(hdc, 100, 200, NULL); /* построение синусоиды */ for (i=0; i < 400; { у = 120.0*sin(pi*i*(360.0/400.0)/180.0) LineTo(hdc, i+100, (int)(200.0-y)); } ValidateRect (hWnd, NULL); EndPaint (hWnd, Sps); break; case WM DESTROY: PostQuitMessage (0); break; default: return (DefWindowProc break; } return (0); (hWnd, messg, wParam, IParam) ) ; Если проанализировать текст файла SINE. С и сравнить его с текстом рассмотренного ранее файла SWP.C, то можно увидеть, что внесенные изменения действительно незначительны. Обратите внимание, что в процедуре WndProc( ) определяются две новые переменные: double у; int i; Оси координат строятся с помощью функций MoveToEx( ) и LineTo( ) : /* построение осей координат */ MoveToEx(hdc, 100, 50, NULL); LineTo (hdc, 100, 350); MoveToEx (hdc, 100, 200, NULL) ; LineTo (hdc, 500, 200); MoveToEx (hdc, 100, 200, NULL) ; Синусоида рисуется в цикле for. Ее амплитуда составляет 120 пикселей относительно горизонтальной оси. Для построения синусоиды используется функция sin( ) , объявленная в файле МАТН.Н. Константа piнеобходима для преобразования значений углов из градусов в радианы. /* построение синусоиды */ for(i=0;i < 400; у = 120. 0*sin(pi*i* (360.0/400.0)/180.0); LineTo(hdc, i+100, (int)(200.0-y)); Окно программы показано на рис. 17.15. Поскольку в приложении не делалось никаких предположений о возможных размерах экрана, на мониторах с разной разрешающей способностью физические размеры изображения могут оказаться разными, что, как правило, нежелательно. Ниже, на примере приложения PIE.C, вы увидите, как можно избежать этого недостатка. ![]() Рис. 17.15. Синусоида, выведенная на экран программой SINE.C Создание диаграмм
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |