Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
403 / 19 / 5
Регистрация: 17.01.2017
Сообщений: 572

Как нарисовать фигуру в Visual Studio 2008?

09.10.2024, 18:46. Показов 3172. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я пытаюсь нарисовать фигуру на холсте, за основу взяла этот пример Как нарисовать человечика?. Подключила дополнительные библиотеки и хеадеры выдаёт ошибку. Вот мой пример кода.
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
// TicTok.cpp: главный файл проекта.
 
#include "stdafx.h"
#include <windows.h>
#include "Form1.h"
#include <cassert>
#define _USE_MATH_DEFINES
#include <cmath>
 
using namespace TicTok;
 
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
    // Включение визуальных эффектов Windows XP до создания каких-либо элементов управления
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false); 
 
    bool bRes;
    //hwnd hwnd = 0;
    HWND hwnd = 0;
    HDC hdc = GetDC( hwnd );        assert( hdc );
    //assert( hdc );
   /* HWND hwnd = 0;
    HDC hdc = GetDC( hwnd );        assert( hdc );
    Ellipse(hdc,200,200,400,400);
    HPEN hPen = CreatePen( PS_SOLID, 10, RGB(255,0,0) );
    HPEN hOld = (HPEN)SelectObject( hdc, hPen );
    double dAngl,x,y,_x,_y;
    int i;
    for( i = 1, dAngl = -M_PI/10;i<10;++i, dAngl-=M_PI/10 ){
        x = 300 + cos(dAngl)*100;
        y = 300 + sin(dAngl)*100;
        _x = 300 + cos(dAngl)*150;
        _y = 300 + sin(dAngl)*150;
        MoveToEx(hdc,x,y,static_cast<LPPOINT>(NULL));
        LineTo(hdc,_x,_y);        
    }
    SelectObject(hdc,hOld);
    DeleteObject(hPen);
    ReleaseDC( hwnd, hdc );*/
    // Создание главного окна и его запуск
    Application::Run(gcnew Form1());
    return 0;
}
Ошибка на этой строке
C++
1
HDC hdc = GetDC( hwnd );        assert( hdc );
fatal error LNK1120: 2 неразрешенных внешних элементов
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.10.2024, 18:46
Ответы с готовыми решениями:

Как открыть проект созданный в Visual Studio 2012 в Visual Studio 2008?
Нашел здесь же тему открытия Visual Studio 2012 в Visual Studio 2010 там написано так. Открыть файл проекта (.sln) с помощью блокнота и...

Visual Studio 2008 Professional или Visual Studio 2008 Team System?
Доброго времени суток всем!!! Предстал перед дилеммой!!!:wall: Чем отличаются(если их вообще можно сравнивать) Visual Studio 2008...

Как проект на visual studio 2012 открыть на visual studio 2008
Программа(курсовая) создана на 2012, надо показать и чтобы работала на 2008. Подскажите пожалуйста как решить данную проблему?

23
9949 / 2950 / 497
Регистрация: 05.10.2013
Сообщений: 8,030
Записей в блоге: 242
02.12.2024, 21:16
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Katerina1993 Посмотреть сообщение
Ещё один пример сделала. В центре выводит "Hello World!"
Я сделал пример вывода "Hello, World!" на английском и русском разных цветов на SDL3 и языке C с шрифтом из TTF-файла arial.ttf:

Название: 85414f3c4a025084476dd60a4004f0c5060a33a6.png
Просмотров: 58

Размер: 4.8 Кб

Здесь в примере используются следующие функции обратного вызова, вместо явного написания main(), как написано в официальном примере template.c на GitHub:
  • SDL_AppInit() - вызывается один раз при запуске программы
  • SDL_AppEvent() - вызывается при наступлении какого-либо события
  • SDL_AppIterate() - вызывается каждый фрейм
  • SDL_AppQuit() - вызывается один раз перед завершением программы

main.c

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
#include <string.h>
 
#define SDL_MAIN_USE_CALLBACKS 1  // Use the callbacks instead of main()
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
#include <SDL3_ttf/SDL_ttf.h>
 
// We will use this renderer to draw into this window every frame
static SDL_Window *window = NULL;
static SDL_Renderer *renderer = NULL;
static SDL_Texture *helloTexture = NULL;
static SDL_Texture *cyrillicTexture = NULL;
 
// This function runs once at startup
SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[])
{
    if (!SDL_Init(SDL_INIT_VIDEO)) {
        SDL_Log("Couldn't initialize SDL: %s", SDL_GetError());
        return SDL_APP_FAILURE;
    }
 
    // Initialize the TTF library
    if (!TTF_Init()) {
        SDL_Log("Couldn't initialize TTF: %s",SDL_GetError());
        return SDL_APP_FAILURE;
    }
 
    if (!SDL_CreateWindowAndRenderer("Привет, Мир!", 268, 268, 0, &window, &renderer)) {
        SDL_Log("Couldn't create window/renderer: %s", SDL_GetError());
        return SDL_APP_FAILURE;
    }
 
    TTF_Font *arialFont = TTF_OpenFont("assets/fonts/arial.ttf", 24);
 
    const char *helloText = "Hello, World!";
    SDL_Color helloTextColor = (SDL_Color){ 255, 255, 255 };
    int helloAmount = strlen(helloText);
    SDL_Surface *helloSurface = TTF_RenderText_Blended(arialFont, helloText, helloAmount, helloTextColor);
    helloTexture = SDL_CreateTextureFromSurface(renderer, helloSurface);
    SDL_DestroySurface(helloSurface);
 
    const char *cyrillicText = "Привет, Мир!";
    SDL_Color cyrillicTextColor = (SDL_Color){ 20, 200, 20 };
    SDL_Surface *cyrillicSurface = TTF_RenderText_Blended(arialFont, cyrillicText, 21, cyrillicTextColor);
    cyrillicTexture = SDL_CreateTextureFromSurface(renderer, cyrillicSurface);
    SDL_DestroySurface(cyrillicSurface);
 
    return SDL_APP_CONTINUE;  /* carry on with the program! */
}
 
// This function runs when a new event (mouse input, keypresses, etc) occurs
SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event)
{
    if (event->type == SDL_EVENT_QUIT) {
        return SDL_APP_SUCCESS;  // End the program, reporting success to the OS
    }
    return SDL_APP_CONTINUE; // Carry on with the program!
}
 
// This function runs once per frame, and is the heart of the program
SDL_AppResult SDL_AppIterate(void *appstate)
{
    // Create a rectangle to hold the texture dimensions
    SDL_FRect rect;
 
    // Clear the screen
    SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
    SDL_RenderClear(renderer);
 
    // Draw "Hello, World"
    SDL_GetTextureSize(helloTexture, &rect.w, &rect.h);
    rect.x = 10.f;
    rect.y = 10.f;
    // Draw the text
    SDL_RenderTexture(renderer, helloTexture, NULL, &rect);
 
    // Draw a cyrillic text
    SDL_GetTextureSize(cyrillicTexture, &rect.w, &rect.h);
    rect.x = 10.f;
    rect.y = 50.f;
    // Draw the text
    SDL_RenderTexture(renderer, cyrillicTexture, NULL, &rect);
 
    // Update the screen
    SDL_RenderPresent(renderer);
    return SDL_APP_CONTINUE;  // Carry on with the program!
}
 
// This function runs once at shutdown
void SDL_AppQuit(void *appstate, SDL_AppResult result)
{
    // SDL will clean up the window/renderer for us
    TTF_Quit();
    SDL_Quit();
}
Вложения
Тип файла: zip cyrillic-text-sdl3-c.zip (529.6 Кб, 0 просмотров)
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18342 / 14268 / 5370
Регистрация: 17.03.2014
Сообщений: 28,934
Записей в блоге: 1
02.12.2024, 21:25
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Я сделал пример вывода "Hello, World!" на английском и русском разных цветов на SDL3 и языке C
Прекрасно, но какое это имеет отношение к C++/CLI?
0
9949 / 2950 / 497
Регистрация: 05.10.2013
Сообщений: 8,030
Записей в блоге: 242
02.12.2024, 22:04
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Прекрасно, но какое это имеет отношение к C++/CLI?
Если я правильно понял, то автор темы случайно создала проект CLI. На самом деле, ей нужен был чистый WinAPI и GDI. Она за основу взяла код рисования человечка из раздела WinAPI. Тогда возникает вопрос, а какое отношение мои сообщения имеют к WinAPI и GDI? Конечно, же никакого. Я просто хотел показать альтернативный способ и некоторые преимущества рисования с помощью SDL, на тех же самых примерах. Обратите внимания, что она опубликовала несколько примеров в этой теме на чистом WinAPI. Я просто показал более простой способ создания окна, рисования линий и текста, а так же этот вариант кроссплатформенный в отличает от WinAPI, то есть эти примеры можно собрать для Android, Web, Windows, Linux, и т.д. из одного проекта. Я сослался на её примеры. Я думаю, никому плохо от этого не будет. Надеюсь, она выберет этот более выгодный способ рисования, который подходит, как для С, так и для С++.

Добавлено через 11 минут
Я думаю, что она просто ищет, на чём можно рисовать на С++, а CLI и Visual Studio здесь вообще не при чём. В итоге она всё нарисовала на чистом WinAPI и GDI. Она ищет что-то похожее на HTML5 Canvas API, который она использовала в разделе JavaScript: HTML5 Canvas. Она давно занимается изучением программирования игр, а SDL, я считаю, лучше подходит для игр, чем WinAPI и GDI. Можно ещё посмотреть в сторону SFML, либо OpenGL, либо DirectX и т.д. Я просто предложил, что мне больше всего понравилось и что более универсально и проще, чем GDI.
0
9949 / 2950 / 497
Регистрация: 05.10.2013
Сообщений: 8,030
Записей в блоге: 242
09.12.2024, 17:35
Цитата Сообщение от Katerina1993 Посмотреть сообщение
Вообще нужно создать проект. У меня Visual C++ 2008 года. Поэтому я выбираю Win32->Проект Win32. Называю проект потом нажимаю “далее”. Устанавливаю тип “Приложение Windows” . Дополнительные параметры “Пустой проект”. Дальше создаю два файла один “main.cpp” второй с ресурсами “Resource.h”. Пример на картинки.
Попытался скомпилировать пример из сообщения #8, где рисуются разноцветные линии и должен выводиться текст и меню с проигрыванием звука. Собираю с помощью CMake и MinGW. Есть некоторые проблемы - одни проблемы я решил, а другие нет.

Решённые проблемы:
  1. В примере подключён файл SoftWareDefinitions.h, но его нет в примере. Я эту строку просто закомментировал.
  2. При компиляции выдаётся ошибка:
    error: cannot convert 'const wchar_t*' to 'LPCSTR' {aka 'const char*'}
    Это очень распространённая ошибка. Можете скопировать её текст в поисковик. Я её решил путём добавления подключения tchar.h перед windows.h, а строки окружил макросом _T вот так:
    C++
    1
    
    #define WINDOW_CLASS_NAME _T("WINCLASS1")

Проблемы, которые я не знаю как решить:
  1. Не выводится текст
  2. Не выводится меню с проигрыванием музыки

Для решения второй проблемы выше нужно было опубликовать файл "resource.rc", где прописываются пути к аудио файлам, например:

resource.rc

Code
1
2
3
#include "resource.h"
 
SOUND WAV "sound.wav"
Добавлено через 59 минут
Цитата Сообщение от 8Observer8 Посмотреть сообщение
error: cannot convert 'const wchar_t*' to 'LPCSTR' {aka 'const char*'}
Я её решил путём добавления подключения tchar.h перед windows.h, а строки окружил макросом _T вот так:
C++
1
#define WINDOW_CLASS_NAME _T("WINCLASS1")
Есть другой вариант. Можно не подключать tchar.h, а использовать вместо макроса _T() макрос TEXT():

C++
1
2
int result = MessageBox(hWnd, TEXT("Do you want to close the application?"),
    TEXT("Handle WM_CLOSE"), MB_YESNO|MB_ICONQUESTION);
Это два универсальных варианта, то есть они будут работать независимо от настроек VS и использования MinGW, то есть эта ошибка может возникнуть и в VS тоже, если человек скачает код, а у него в VS будет выставлено значение "Multi-Byte" в опции Character Set вместо "Unicode":
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.12.2024, 17:35

Visual Studio 2005 и Visual Studio 2008 сильно ли они отличаются друк от друга?
привет ребята:) вот у меня есть Visual Studio 2005 и Visual Studio 2008 возник вопрос сильно ли они отличаются друк от друга? пробывал...

Скажите если я напишу программу на C# в MS Visual studio 2012 на framework 3.5 я потом смогу открыть проект моей программы на MS Visual studio 2008
Скажите если я напишу программу на C# в MS Visual studio 2012 на framework 3.5 я потом смогу открыть проект моей программы на MS Visual...

Конвертация(или сохранение) проектов Visual Studio 2008 c# в Visual Studio 2005 c#
Доброго времени суток =) Можно ли, конвертировать проект или же сохранить под другую версию программы(например MS Word 2007 может...

Учебный материал Visual Studio 2010/Visual Studio 2008
Приветствую. Работаю программистом и не знаю всех особенностей/возможностей среды разработки. Подскажите книгу или статьи по ...

Отличие сборок Visual Studio 2008 от Visual Studio 2010
Здравствуйте, товарищи! Пытаюсь собрать библиотеку libvbucket, используя Visual Studio 2008. Проблема в том, что библиотека...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне. Это уже новая модель, модель сукцессии грибной. потоки фосфора, азота. Углерода. 5 видов организмов. Я даже. . .
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru