Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kotgav
2 / 2 / 0
Регистрация: 13.07.2013
Сообщений: 62
#1

С++2010 и GDI+ не рисует многоугольник - C++

28.11.2013, 16:24. Просмотров 603. Ответов 3
Метки нет (Все метки)

Подскажите, пожалуйста, в чем причина того, что на данном объекте Graphics-наследнике класса Image с именем g,
текст выводится исправно, а другие фигуры рисоваться не хотят?
В частности, мне надо нарисовать многоугольник с тремя вершинами (это для примера, фактически нужны 17 вершин).
Я создал объект myPen типа Pen и массив точек многоугольника PointsArr[3] типа Point.
В строке с функцией DrawPoligon компилятор дает две ошибки:
1. Подсвечивается точка после объекта g:
Отсутствуют экземпляры перегруженная функция "Gdiplus::Graphics:rawPolygon", соответствующие списку элементов.
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
///////////////////////////////////////////////////////////////////////////////////////
// Функция рисования на объекте bitmap. Запускается от case WM_PAINT
void OnPaint(HDC hdc, const RECT& rc)
{
    // Все строки - в кодировке Unicode
    WCHAR welcome[]=L"Welcome, GDI+ !";
 
    // Создаем контекст рисования и устанавливаем пиксельную систему координат
    Graphics g(hdc);
    g.SetPageUnit(UnitPixel);
    RectF bounds(0, 0, float(rc.right), float(rc.bottom));
 
    Pen* myPen = new Pen(Color::Red);  // создаю моё перо красного цвета 
 
    // Загружаем фоновое изображение и растягиваем его на все окно
    Image bg(L"BACKGRND.gif");
    g.DrawImage(&bg, bounds);
 
    // Создаем кисть с градиентом на все окно и полупрозрачностью
    LinearGradientBrush brush(bounds, Color(130, 255, 0, 0), Color(255, 0, 0, 255), 
            LinearGradientModeBackwardDiagonal); 
    
    // Готовим формат и параметры шрифта
    StringFormat format;
    format.SetAlignment(StringAlignmentCenter);
    format.SetLineAlignment(StringAlignmentCenter);
    Font font(L"Arial", 48, FontStyleBold);
 
    // Выводим текст приветствия, длина -1 означает, что строка заканчивается нулем
    g.DrawString(welcome, -1, &font, bounds, &format, &brush);
 
    // Создаем массив точек многоугольника
    Point PointsArr[3] = {
        Point(50,50),
        Point(100,25),
        Point(200,5)};
        
    g.DrawPolygon(myPen, PointsArr[3]);    // Рисуем полигон (не рисует!!!)
}
Добавлено через 6 часов 20 минут
Добавлю, что это - консольное приложение, среда - Visual Studio 2010 Professional.

Добавлено через 14 часов 13 минут
Дополню вопрос.
Мне самому надо перегрузить функцию DrawPolygon? Если да, то как?
Или искать перегруженную функцию? Тогда где?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2013, 16:24     С++2010 и GDI+ не рисует многоугольник
Посмотрите здесь:

C++ Выпуклый многоугольник
C++ Описать класс «Многоугольник»
Ввести количество точек, получить многоугольник, закрасить многоугольник построчно. C++
Выпуклый многоугольник C++
Многоугольник в пространстве C++
C++ задача выпуклый многоугольник
C++ Определить выпуклый ли многоугольник.
Динамический многоугольник C++
C++ Соединить рёбра в многоугольник
Построить многоугольник по координатам C++
Многоугольник. Переопределение оператора += C++
C++ Повернуть многоугольник

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kotgav
2 / 2 / 0
Регистрация: 13.07.2013
Сообщений: 62
06.12.2013, 20:04  [ТС]     С++2010 и GDI+ не рисует многоугольник #2
Ответа так и нет. Судя по всему и не будет.
Модераторов прошу удалить тему, как не имеющую решения.
ValeryS
Модератор
6446 / 4912 / 451
Регистрация: 14.02.2011
Сообщений: 16,283
06.12.2013, 20:15     С++2010 и GDI+ не рисует многоугольник #3
Цитата Сообщение от kotgav Посмотреть сообщение
g.DrawPolygon(myPen, PointsArr[3]); * *// Рисуем полигон (не рисует!!!)
что ты хотел когда написал PointsArr[3]?
ты передаешь четвертый элемент массива,который не существует а должен был передать адрес массива
далее где количество точек которые нужно нарисовать?
вот как ты должен был вызвать
C++
1
g.DrawPolygon(myPen, PointsArr,3);
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
kotgav
2 / 2 / 0
Регистрация: 13.07.2013
Сообщений: 62
06.12.2013, 23:30  [ТС]     С++2010 и GDI+ не рисует многоугольник #4
Точно! Это я, видать, заработался.
Все получилось и заработало, как в примере, так и в моем проекте.
Большое спасибо! Ответ краткий и по существу!
Тему можно закрывать, вопрос решен.
Yandex
Объявления
06.12.2013, 23:30     С++2010 и GDI+ не рисует многоугольник
Ответ Создать тему
Опции темы

Текущее время: 00:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru