Member 14430889 Ответов: 1

Привет, я начинаю учиться рисовать фигуру с помощью gdiplus, но как мне удалить фигуру с холста ?


Дорогие Все:
я новичок, я только начинаю учиться рисовать фигуру с vs2012 c++ и Gdiplus около 5 недель, я создаю простой проект для тестирования, но когда я рисую polygon finish, я не могу удалить ни один полигон, который я выбрал из canvas, это не так просто, как удалить прямоугольник или эллипс, только удалить параметр в CArray, но холст все еще может найти "полигон", как показывает результат моего проекта...

я поместил свой проект здесь :
https://drive.google.com/file/d/1LrQY0tQ7RqqXDiRjonASU5QXMRh3X2t0/view?usp=sharing

это может быть работа, мне нужно, чтобы кто-то помог мне или научил меня "ключевой точке".

Q1 : как мне определить фоновую область памяти или показать область памяти, когда я использую двойной буфер для рисования фигуры, я использую bitblt , это не очень хорошо, чтобы показать результат рисования?

Q2 : как мне использовать идею "объектно-ориентированного программирования", чтобы переписать мой тестовый код и позволить ему стать более легким для чтения или легко добавить какой-либо новый элемент, например : прочитать некоторые книги или некоторую информацию !

Q3 : я интересуюсь программированием кода, какие базовые книги или знания мне нужно знать, если я хочу стать хорошим "кодером".

или если у вас есть какие-то идеи, то все в порядке~~~

как использовать мой проект :
1. Откройте проект и начните его выполнение.
2. Выберите режим рисования или режим удаления.
3. когда пользователь выбирает нарисовать прямоугольник : используйте левую кнопку мыши и удерживайте ее нажатой, начните рисовать, и он может изменить размер.
4. Когда выберите нарисовать полигон : используйте левую кнопку мыши и переместите мышь, начните рисовать, и пользователь выберет следующую точку, которую вы хотите, он автоматически соединит последнюю точку с новой точкой, если вы хотите закрыть, пожалуйста, используйте правую кнопку мыши и нажмите один раз.
5. когда пользователь выберите Удалить : используйте мышь, выберите любой фигуры, которую вы нарисуете, и нажмите на форму левой или нижней правой, сообщение будет отображаться, если вы выберите "ОК", форма будет перерисован в режиме пера notxorpen.

Что я уже пробовал:

я пытаюсь найти так много названия или ответа из книги и веб-стороны, но это не очень ясно, я думал, я пытаюсь написать код для тестирования и найти, как он получает ответ или что происходит, когда я иду другим путем, чтобы проверить gdiplus, я не очень понимаю, как код для программирования, например : двойной буфер для рисования формы, использовать "объектно-ориентированное программирование" для создания нового полного проекта, или как стать более легким для чтения или тестирования мысли других людей. я знаю, что это не короткое время, чтобы получить правильный путь, я просто хочу получить больше базовых знаний для изучения.

1 Ответов

Рейтинг:
4

Richard MacCutchan

Вы должны сделать все ваши картины/рисунки на экране в функции, которая обрабатывает сообщение WM_PAINT. Каждый раз, когда эта функция вызывается, она должна перерисовывать все фигуры. Когда фигура удаляется, вы просто удаляете ее из списка элементов для рисования, а затем вызываете InvalidateRect принудительно перекрасить окно клиента.


Member 14430889

Спасибо за ваше предложение, сэр. Я пытаюсь использовать CArray для записи каждой точки и параметра из полигона, который я рисую. Но это не очень хороший способ и не очень удобно в отношении идеи ООП. И второй способ : я создаю новый буфер памяти для перерисовки. Он может только отменить шаг для последней фигуры. Там все еще есть много ошибок после того, как я рисую, и не так просто узнать, как получить решение или улучшить свой код. Не могли бы вы любезно дать мне какое-нибудь "ключевое слово" для поиска ссылки или пример кода. Мысль не нужна очень точная. Но сейчас мне это будет очень полезно. Спасибо снова~

Richard MacCutchan

Использование Каррея для удержания набора точек-разумный выбор. Вы также можете использовать один из контейнеров STL, например std::vector. Окончательный выбор, конечно, за вами. Что касается собственно живописи, то каждая фигура должна рисовать сама себя. Взгляните на некоторые ссылки по адресу shape class paint c - поиск в Google[^].