0 / 0 / 0
Регистрация: 23.11.2017
Сообщений: 20
1

Microsoft visual studio 2015 выдает ошибку

22.12.2017, 17:45. Показов 900. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
#include <afxwin.h>// большинство заголовочных файлов для mfc
#include <afxext.h>// для доп. возможностей mfc 
#include <math.h>// математические функции
#define _AFXDLL
// константа для вычислений окружности
const double PI = 3.14159;
//****************************************************************************************************
// Класс часов -Графическая форма. Тут же логика. 
class CClockFrame :public CFrameWnd
    //наследуемся от встроенного класса фреймвого окна CFrameWnd.
{
private:
    RECT _rect;
    //базовая структура, описывает координаты верхнего левого и 
    //и нижнего правого углов прямоугольника. Данная структура _rect
    //будет использоваться для описания клиентской области окна.
    //--------центрирование фрейма относительно экрана монитора (диагонали)-
public:
    BOOL CClockFrame::PreCreateWindow(CREATESTRUCT& cs) {
        //Изменение функционала (функциональных возможностей) окна CClockFrame
        //через PreCreateWindow. :: - глобальное разрешение функции PreCreateWindow
        //вне класса.CREATESTRUCT - определяет параметры инициализации 
        //передаваемой оконной процедуре
//!!!       cs.cy = ::GetSystemMetrics(SM_CYSCREEN) / 1.5;
        //получаем размер экрана меньший в 1.5 раза
//!!!       cs.cx = ::GetSystemMetrics(SM_CXSCREEN) / 2;
        //- в 2 раза
        cs.y = ((cs.cy * 1.5) - cs.cy) / 2;
        //получаем необходимую точку для центрирования фрейма
        //CClockFrame относительно заданного экрана. 
        //Пропорционально выбранному делителю - 1.5
        cs.x = ((cs.cx * 2) - cs.cx) / 2;
        //-2
        return TRUE;
    }
    //------------конструктор класса CClockFrame (вид фрейма как фрейма или диалога; определение клавиш упр.)
    CClockFrame()
    {
        HBRUSH brush = (HBRUSH)::CreateSolidBrush(RGB(0, 0, 0));
        //Определение свойств кисти. Заливка сплошным цветом.
        CString mywindow = AfxRegisterWndClass(
            //CString - класс  для передачи строк. 
            //В mfc пользуем именно его.
            //регистрируем свой класс окна с предъустановл. сво-ми.
            CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS, 0, brush, 0);
        //CS_HREDRAW - перерисовка внутр. области окна при изм. ширины
        //CS_VREDRAW - тоже самое при высоте.
        //CS_DBLCLKS - сообщение при двойном нажатии мыши
        Create(mywindow, CString("Analog Clock"),
            WS_VISIBLE | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX);
        // создаем ограничение -> невозможность произвольно 
        // менять размер окна 
        // можно получить диалог.окно WS_SYSMENU
        // создаем сам фрейм окна и передаем ранее заданные дескрипторы
        // mywindow - свойства окна; название заголовка окна;
        // WS_SYSMENU - оконное меню в строке заголовка фрейма.
    }
    //-----------------рисвание фрейма
    int OnCreate(LPCREATESTRUCT l)
        //LPCREATESTRUCT - cтруктура, описывающая параметры фрейма 
        //при его создании (api-функция)
    {
        CFrameWnd::OnCreate(l);
        //OnCreate - функция-член для создание окна. 
        SetTimer(1, 1000, NULL);
        //(системный таймер)
        //Функция посылающее "сообщение" фрейму через каждую 1 секунду
        //необходимо для создание часов (перерисовка через 1 секунду)
        //логика: получение системного времени->перерисовка стрелок через 1 секунду
        return 1;
    }
    //-----------------рисуем стрелки, циферблат (цифры)
    void OnPaint()
    {
        CPaintDC d(this);
        //Вывод чего либо (примитивы, регионы) на контекст устройства.
        //------------------------
        CBrush b(RGB(192, 192, 192));
        //Задание цвета кисти для последующего применения к примитивам
        float x1 = -220;//центральная область под стрелками и цифрами - прямоугольник
        float y1 = -220;
        float x2 = 220;
        float y2 = 220;
        Transform(&x1, &y1);// передаем в пользовательскую процедуру. Изменение размеров областей
                            // при изменении размеров фрейма. (левый-верхний)
        Transform(&x2, &y2); // (нижний правый) 
        CRect rect(x1, y1, x2, y2);
        //область прямоугольник-циферблат. (передаем координаты)
        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));
        //d.SelectStockObject(GRAY_BRUSH);// только предопределенные цвета
        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;//1.2
        arr[1] = 19.6;//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(&centr_el_x, &centr_el_y);
        drawCircle(&d, centr_el_x, centr_el_y, 330);
        //-----------------------
        CPen p2(PS_SOLID, 6, RGB(8, 28, 255));
        // установка цвета для минуты и часа стрелок
        CPen sec_p(PS_SOLID, 4, RGB(153, 0, 0));
        // установка цвета секундной стрелки
        d.SelectObject(&p2);
        // заносим объект типа (CPen) p2 в контекст типа (CPaintDC) d
        float fhour;// поля для час, минута, секунда
        float fmin;
        float fsec;
        CTime t1;
        CTime t = CTime::GetCurrentTime(); // получаем системное время из OC Windows (формат UTC)
                                           // начальная инициализация (секунды, минуты, часы)
        fhour = t.GetHour() % 12; // получаем час (0-23). Переводим в 12 часовую форму.
        fmin = t.GetMinute(); // получаем минуты (0-59)
        fsec = t.GetSecond(); // получаем секунды (0-59)
        fhour += fmin / 60; // час=час+минута(ы)/60 чтобы часовая стрелка тоже двигалась 
        fhour = fhour * 360 / 12; // смещение (дискретное) на 30 град (360/12) * час. Если час дробный, то
                                  // смещение происходит на какую-то долю. Полученное значение - радианы.
        fmin = fmin * 360 / 60; // смещение (дискретное) на 6 град. (360/60) по окружности каждую минуту (рад)
        fsec = fsec * 360 / 60; // смещение (дискретное) на 6 град. по окружности каждую секунду (рад)
                                // d[град]=d[рад]*(Pi/180)
                                // общая формула x=cos_d*R; y=sin_d*R
        float xs = 130 * cos((-fsec * (PI / 180.0)) + PI / 2.0); // R*cos((-d[рад]*Pi/180)+ Pi/2). 
                                                                 // PI/2 - начало отсчета I квадрант
                                                                 // против час. стрелки
        float ys = 130 * sin((-fsec * (PI / 180.0)) + PI / 2.0);
        float xm = 100 * cos((-fmin * (PI / 180.0)) + PI / 2.0);
        float ym = 100 * sin((-fmin * (PI / 180.0)) + PI / 2.0);
        float xh = 70 * cos((-fhour * (PI / 180.0)) + PI / 2.0);// длинна стрелки (позиция новой точки)// fhour
        float yh = 70 * sin((-fhour * (PI / 180.0)) + PI / 2.0);// -fhour
        float x = 0;// начальные значения - центр //x=7 y=-8.4
        float y = 0;
        Transform(&x, &y);// изменение при перерисовки центра (0,0)
        Transform(&xh, &yh);
        d.MoveTo(x, y);// перемещение (час)
        d.LineTo(xh, yh);// рисование (час)
        Transform(&xm, &ym);
        d.MoveTo(x, y);// перемещение (минута)
        d.LineTo(xm, ym);// рисование (минута)
        d.SelectObject(&sec_p); // применение цвета к секундной стрелке
        Transform(&xs, &ys);
        d.MoveTo(x, y);// перемещение (секунда)
        d.LineTo(xs, ys);// рисование (секунда)
        d.SelectObject(el_outer);// делаем закрывающий шпиндель)
        d.SelectObject(el_brush_outer);
        drawCircle(&d, x, y, 20);
        //---------рисование циферблата (цифры по окружности)
        d.SelectObject(&p2);
        // цвет
        char *str[] = { "3","2","1","12","11","10","9","8","7","6","5","4" };
        // раставление от квандрант Pi=180 град. против час.
        /*
        char *str_point[]={".",".",".",".",".",".",".",".",".",".",".",".",
        ".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",
        ".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",
        ".","."};// рисование пунктов [.] текстом - не лучшее реш.
        //*/
        CFont f;
        f.CreatePointFont(170, (LPCTSTR)"Times New Roman");// стиль букв
        d.SelectObject(&f);
        d.SetBkMode(TRANSPARENT);// установка режима фона
                                 // TRANSPARENT не изменять до отрисовки
        CString txt_header = CString("ЧГУ ФИВТ");
        CString txt_bottom = CString("Васильев А.А.");
        d.SetTextColor(RGB(0, 0, 0));
        float xtext1 = -80;
        float ytext1 = 60;
        float xtext2 = -70;
        float ytext2 = -80;
        Transform(&xtext1, &ytext1);
        Transform(&xtext2, &ytext2);
        d.TextOutA(xtext1, ytext1, txt_header);// указание позиции надписи и самого объекта надписи
        d.TextOutA(xtext2, ytext2, txt_bottom);
        d.SetTextColor(RGB(8, 28, 255));// перебор цифр
        for (int i = 0;i < 12;i++)
        {
            float x = 194 * cos(i * PI / 6.0);// R * cos(i*Pi/6 град) кол-во элементов для размещ-12.
            float y = 190 * sin(i * PI / 6.0);
            Transform(&x, &y);
            d.TextOut(x - 5, y - 10, CString(str[i]), strlen(str[i])); // выравнивание циферблата. x-5; y-10
                                                                       // выбрано имперически. Выравнивание в массиве
                                                                       // одинарного символа и двойного происходит по-раз.
        }
        /*
        d.SetTextColor(RGB(153,0,0));// перебор пунктов циферблата [.] текстом
        for(int i = 0;i < 48;i++)
        {
        float x = 170 * cos(i * PI / 24.0);// R * cos(i*Pi/24 град) кол-во элементов для размещ-48.
        float y = 170 * sin(i * PI / 24.0);
        Transform(&x,&y);
        d.TextOut(x,y,CString(str_point[i]),strlen(str_point[i]));
        }
        //*/
    }
    //----------метод изменения (перерисовки) координат примитивов (прямоугольника, линий итд)
    // как только изменяется клиентская область окна (изменение размеров) происходит изменение
    // (перерисовка) переданных координат. 
    void Transform(float *px, float *py)
    {
        ::GetClientRect(m_hWnd, &_rect);
        // GetClientRect - клиентская часть окна 
        //- прямоугольник окна(клиентская область окна)
        // m_hWnd - указатель на само окно (handle)
        // _rect - стуктура с координатами, описанная в классе CClockFrame
        float width = (_rect.right - _rect.left) / 2;
        float height = (_rect.bottom - _rect.top) / 2;
        *px = *px + width; // именно так! (иначе все в обратном порядке)
        *py = height - *py;
    }
    //-------------затирка старого фона (перерисовка)-получ.динам. картинки--------------------
    void OnTimer(UINT n)
    {
        this->Invalidate(); // (0)
                            // CWnd::Invalidate - стирать ли фон в области обновления
                            // без этого метода получим статичную картинку
                            // -> выбор элемента по указателю.
    }
    //-------------рисуем эллирс типа круг (x, y, R)
    void drawCircle(CPaintDC *aDC, int aX, int aY, int aD)
    {
        double r = aD / 2;
        aDC->Ellipse(aX - r, aY - r, aX + r, aY + r);
    }
    // этим методом рисуем эллипс типа круг
    // задаем нач. позиции X и Y и указываем R
    DECLARE_MESSAGE_MAP(); // класс определяем сопоставление сообщениям. Если он
                           // реагирует на какие-либо события
};
//*****************************************************************************************************
//--------------------макрос-таблица откликов (на что должен реагировать класс)----------------
BEGIN_MESSAGE_MAP(CClockFrame, CFrameWnd)
    ON_WM_CREATE()// реакция на событие создание окна
    ON_WM_PAINT()// реакция на отображение графики
    ON_WM_TIMER()// реакция на событие таймера
END_MESSAGE_MAP()
//****************************************************************************************************
//-------------внутренний класс с которого запускаем экземпляр CClockFrame----------------------------
class CClockApp :public CWinApp
{
public:
    int InitInstance()
    {
        CClockFrame *p;
        p = new CClockFrame();
        p->ShowWindow(1);
        m_pMainWnd = p;
        return 1;
    }
};
//****************************************************************************************************
CClockApp a; // поле для иниц. класса CClockApp


выше представлен код. но при запуске отладчика вылетает ошибка:

#error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d] Test_Analog_Clock
ругается на строку 24

в чем ошибка и как исправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2017, 17:45
Ответы с готовыми решениями:

При запуске Microsoft Visual Studio 2012 выдает ошибку
При запуске Microsoft Visual Studio 2012 выдает ошибку &quot;Не удалось запустить приложение, поскольку...

Microsoft Visual Studio 2010 кидает ошибку
обычное консольное приложения ответ Visual Studio...

Visual Studio 2017 выдает ошибку компоновки
#include &quot;stdafx.h&quot; #include&quot;iostream&quot; #include &quot;string&quot; #include &quot;vector&quot; #include...

При установке Microsoft Visual C++ 2005 SP1 Redistributable x64 выдаёт ошибку
при установке Microsoft Visual C++ 2005 SP1 Redistributable x64 выдаёт ошибку помогите...

2
Эксперт С++
8737 / 4315 / 960
Регистрация: 15.11.2014
Сообщений: 9,762
22.12.2017, 17:47 2
Цитата Сообщение от pyatrovich Посмотреть сообщение
в чем ошибка и как исправить?
компилятор вам об этом прямым английским текстом пишет:
Цитата Сообщение от pyatrovich Посмотреть сообщение
Please #define _AFXDLL or do not use /MD[d] Test_Analog_Clock
"пожалуйста, объявите #define _AFXDLL или не используйте ключ компиляции /MD"

что не понятно?
0
0 / 0 / 0
Регистрация: 23.11.2017
Сообщений: 20
22.12.2017, 17:49  [ТС] 3
Так там объявлено : #define _AFXDLL
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2017, 17:49
Помогаю со студенческими работами здесь

При запуске Visual Studio 2010 выдает ошибку
Выдает такое что делать? заранее спасибо

Отличие между Microsoft Developer Studio и Microsoft Visual Studio?
Здравствуйте, объясните чем отличается Microsoft Developer Studio и Microsoft Visual Studio ?

Как с сайта Microsoft скачать Microsoft Visual Studio 2005 Express Edition?
На сайте Microsoft вроде бы можно скачать Microsoft Visual Studio 2005 Express Edition, но отдаётся...

Visual Studio 2015. шось с заголовками
недавно скачал Visual Studio 2015. сделал стандартный хелоуворлд: #include&lt;iostream&gt; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru