Особенности разработки и представления проекта программы, представляющей собой аналоговые часы с циферблатом, часовой, минутной и секундной стрелкой. Применение MS Visual Studio 2010, языка С для ее написания и компилирования. Специфика библиотеки MFC.
Аннотация к работе
В данном курсовом проекте представлена программа, представляющая собой аналоговые часы с циферблатом, часовой, минутной и секундной стрелкой. Список файлов, составляющих проект: Исходный код: mysimple_clock.cpp Схема приложения (в целях изучения библиотеки MFC и Windows API, для простоты проектирования и понимания, весь функционал приложения был описан одним единственным файлом mysimple_clock.cpp). Схема взаимодействия методов классов, описанных в mysimple_clock.cpp представлена на диаграмме: 1. Он создает экземпляр (instance) главного класса CClockFrame, который одновременно реализует всю математику приложения и визуализацию посредством MFC (Microsoft Foundation Classes). Данный класс - это класс фрейма, главное окно. Данная структура //будет использоваться для описания клиентской области окна. //--------центрирование фрейма относительно экрана монитора (диагонали)- public: BOOL CClockFrame::PreCreateWindow(CREATESTRUCT& cs){ //Изменение функционала окна CClockFrame //через PreCreateWindow. //:: - глобальное разрешение функции PreCreateWindow //вне класса.CREATESTRUCT - определяет параметры инициализации //передаваемой оконной процедуре cs.cy = ::GetSystemMetrics(SM_CYSCREEN) / 1.5; //получаем размер экрана меньший в 1.5 раза по y cs.cx = ::GetSystemMetrics(SM_CXSCREEN) / 2; //- в 2 раза по x cs.y = ((cs.cy * 1.5) - cs.cy)/2; //получаем необходимую точку для центрирования фрейма //CClockFrame относительно заданного экрана. //Пропорционально выбранному делителю - 1.5 по y cs.x = ((cs.cx * 2) - cs.cx)/2; //-2 по x. return TRUE; } //----конструктор класса CClockFrame (вид фрейма как фрейма или диалога; определение клавиш упр.) CClockFrame() { HBRUSH brush = (HBRUSH)::CreateSolidBrush(RGB(0,0,0)); //Определение свойств кисти. //----------- CBrush b(RGB(192,192,192)); //Задание цвета кисти для последующего применения к примитивам float x1 = -220; float y1 = -220; float x2 = 220; float y2 = 220; // координаты центральная область под стрелками и цифрами Transform(&x1,&y1); // передаем в пользовательскую процедуру. (передаем координаты) d.FillRect(&rect,&b); // заполняем выбранный прямоуголник rect заданной кистью b (заполняем цветом) // выводим все это в область _rect класса CClockFrame /* LOGBRUSH l_LogBrush; // линия из точек без задания расстояния l_LogBrush.lbColor = RGB(0,0,0); l_LogBrush.lbStyle = BS_SOLID; l_LogBrush.lbHatch=10; CPen l_pen(PS_GEOMETRIC | PS_DOT, 3, &l_LogBrush, 0, NULL); */ CPen el_outer(PS_SOLID,1,RGB(0,0,0)); CBrush el_brush_outer(RGB(226,226,226)); d.SelectObject(el_outer); d.SelectObject(el_brush_outer); d.Ellipse(&rect); // рисуем внешний элипс (круг) по координатам закрашенной // области-квадрата и устанавливаем ему определенный цвет. d.SelectStockObject(WHITE_BRUSH); // восстанавливаем все в белое CPen l_pen; // рисуем циферблат (пункты секунд) - пунктирная линия LOGBRUSH lb; lb.lbColor=RGB(153,0,0); // устанавливаем цвет (пункты секунд) они же точки lb.lbStyle=BS_SOLID; lb.lbHatch=0; DWORD arr[2]; arr[0]=2;// играемся промежутками между пунктирами arr[1]=19.6;// l_pen.CreatePen(PS_USERSTYLE|PS_GEOMETRIC,3,&lb,2,arr); // устанавливаем свой геометрический стиль линии «ручке» d.SelectObject(&l_pen); float centr_el_x=0; float centr_el_y=0; Transform(¢r_el_x,¢r_el_y); drawCircle(&d,centr_el_x,centr_el_y,330); // рисуем внутренний круг и обрамляем края линией // своего стиля - пунктиром.