|
Программирование >> Процедурные приложения
Рис. 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 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |