русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Программа на Visual C++ выводящая в windows-окно эллипсы

Создание программы на Visual C++, выводящей в windows-окно эллипсов с использованием всех возможных вариантов заливки.

 

В среде Visual C++ наберём текст программы :

// Устанавливаем режим строгой проверки типов
// для Windows-программ
#define STRICT
#include<windows.h>
#include<windowsx.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#define HNST HINSTANCE

WNDCLASS WCS;      // Структура класса окна
int X,Y,          // Координаты для вывода текста функцией TextOut
HatchStyle=0;      // Стандартный тип заливки
char AName[]=" РГЗ №2  ";

// Обработчик сообщения WM_DESTROY : сообщает Windows о завершении работы
void OnDestroy (HWND)
{ PostQuitMessage(0L); }
void OnMouseMove(HWND hW, int x, int y, UINT Flags)
{  if(Flags&MK_LBUTTON) ::X=x,::Y=y,InvalidateRect(hW,0L,TRUE); }
// Обработчик сообщения WM_CREATE  :
// загружает ресурс растрового изображения
BOOL OnCreat   (HWND hW,CREATESTRUCT FAR*)
{ return TRUE; }

// Обработчик сообщения WM_PAINT  :
// Перерисовывает необходимые фрагменты окна программы
void OnPaint   (HWND hW)
{ PAINTSTRUCT PS;RECT RC;
RC.left=X-200,RC.top=Y-30,RC.right=X+200,RC.bottom=Y+50; HDC DC=BeginPaint(hW,&PS);
HBRUSH             OLDB;
UINT B[]={HS_BDIAGONAL,HS_CROSS,HS_DIAGCROSS,HS_FDIAGONAL,HS_HORIZONTAL,HS_VERTICAL};
char*X[]={"HS_BDIAGONAL","HS_CROSS","HS_DIAGCROSS","HS_FDIAGONAL","HS_HORIZONTAL","HS_VERTICAL"};

OLDB=(HBRUSH)SelectObject(DC,CreateHatchBrush(B[::HatchStyle],RGB(0,0,0)));
COLORREF R=SetBkColor(DC,RGB(255,200,100)),T=SetTextColor(DC,RGB(0,0,255));
Ellipse(DC,::X-150,::Y-80,::X+150,::Y+80), 
DrawText(DC,"Заливка ",-1,&RC,DT_CENTER),
RC.bottom+=20,RC.top+=20,DrawText(DC,X[::HatchStyle],-1,&RC,DT_CENTER),
SetBkColor(DC,R),SetTextColor(DC,T),SelectObject(DC,OLDB);
EndPaint(hW,&PS);
}

// Обработчики сообщений мыши и клавиатуры :
// формируют строку символов и передают её на контекст устройства
void OnLeftUp  (HWND hW,int x,int y,UINT fl)
{ ::X=x,::Y=y,InvalidateRect(hW,0L,TRUE); }

// Обработчик сообщения WM_LBUTTONDBLCLICK
// ( двойной щелчок правой кнопкой мыши )
void OnLDBLCLICK(HWND hW, BOOL fDoubleClick, int x, int y, UINT /*keyFlags*/)
{ if(fDoubleClick)::X=x,::Y=y,++HatchStyle%=6,InvalidateRect(hW,0L,TRUE);  }

// Оконная процедура WProc : обрабатывает все сообщения ,
// посылаемые окну hW
// Устанавливаем WProc в качестве оконной процедуры главного окна программы
LRESULT CALLBACK WProc(HWND hW,UINT msg,WPARAM wParam,LPARAM lParam)
{  switch(msg)
// Для обработки сообщений можно использовать
// макросы HANDLE_MSG из <windowsx.h>
// связывающие конкретные сообщения с соответствующими функциями-обработчиками
{
HANDLE_MSG(hW,WM_CREATE,OnCreat);
HANDLE_MSG(hW,WM_DESTROY,OnDestroy);
HANDLE_MSG(hW,WM_LBUTTONDBLCLK,OnLDBLCLICK);
HANDLE_MSG(hW,WM_LBUTTONUP,OnLeftUp);
HANDLE_MSG(hW,WM_PAINT,OnPaint);
HANDLE_MSG(hW,WM_MOUSEMOVE,OnMouseMove);
default:return DefWindowProc(hW,msg,wParam,lParam);
// Для необрабатываемых сообщений
// следует вызывать API-функцию DefWindowProc,
// обеспечивающую стандартную обработку соответствующих сообщений
}
}

// Функция RG - заполняет поля структуры класса окна (WCS)
// и регистрирует класс окна ,
// после чего можно создавать окна данного класса окна
BOOL RG(HNST h)
{ WCS.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;
WCS.lpfnWndProc=WProc; WCS.hInstance=h;
WCS.cbClsExtra=WCS.cbWndExtra=0;
WCS.hIcon=LoadIcon(0L,IDI_APPLICATION);
WCS.hCursor=LoadCursor(0L,IDC_CROSS);
WCS.hbrBackground=GetStockBrush(LTGRAY_BRUSH);
WCS.lpszMenuName=0L;WCS.lpszClassName=AName;
return RegisterClass(&WCS);
}
#define def CW_USEDEFAULT
#define WStyle WS_OVERLAPPEDWINDOW

// Функция Creat - создаёт окно и показывает его
HWND Creat(HNST h,int Cmd)
{ auto HWND hW=CreateWindow(AName,AName,WStyle,def,def,def,def,0L,0L,h,0L);
if (hW) ShowWindow(hW,Cmd),UpdateWindow(hW);
return  hW;
}

// Функция WinMain - главная функция Windows-приложения
// вызываемая при запуске программы
int PASCAL WinMain(HNST h,HNST Prev,LPSTR ,int Cmd)
{ MSG M; register MSG*P=&M;
if(!Prev&&!RG(h)||!Creat(h,Cmd)) return FALSE;
while(GetMessage(P,0,0,0))TranslateMessage(P),DispatchMessage(P);
return P->wParam;
}

 

Результат работы программы:


Просмотров: 9922

Вернуться воглавление




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.