|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
07.03.2023, 16:20 | #1 | |
Почему функция CreatePen (Lib "gdi32.dll") создает сетку разных цветов?
Регистрация: 14.12.2008
Сообщений: 1,079
|
||
Просмотров: 1477
|
|
||||
Инженер-философ Регистрация: 24.04.2019
Хабаровск
Сообщений: 1,874
|
Потому что в функцию CreatePen надо передавать целочисленный цвет, а не дескриптор кисти.
Неправильно: hPen = CreatePen(PS_SOLID, 1, CreateSolidBrush(IЦветДопЛин)) Правильно: hPen = CreatePen(PS_SOLID, 1, IЦветДопЛин) Когда создается новая кисть, она получает новый незанятый дескриптор. В результате у двух кистей одного цвета дескрипторы разные. При передаче в CreatePen они преобразуются в разные целые числа, что и дает разные цвета. В WinApi специально создали пачку разных типов данных, чтобы компилятор ловил такие глюки. Не зря там все дескрипторы hBrush, hFont и т.п. - указатели. Есть даже режим компиляции, в котором дескрипторы разных видов объектов становятся разными типами, чтобы еще и кисти со шрифтами не путать. В бейсике тоже стоит как минимум объявлять дескрипторы как LongPtr, а не Long, чтобы потом не терять время на подобные ошибки. Заодно тут утечка памяти, потому что созданные кисти и перья не освобождаются. И освобождать память надо всегда, даже при досрочных выходах из функций. Вот как развлекаются сишники в такой ситуации: О вреде GOTO-фобии (с примерами на C). |
|||
|
||||
Регистрация: 14.12.2008
Сообщений: 1,079
|
Спасибо Нубий-IV! Действительно в этом была проблема. Теперь все работает.
Код просто нашел подходящий, думал там все правильно, а оказалось с особенностями. Теперь все нормально. Там в коде функции активации формы есть отключенные строки кода: Код:
Почему так происходит? |
|||
|
||||
Инженер-философ Регистрация: 24.04.2019
Хабаровск
Сообщений: 1,874
|
|
|||
|
||||
Регистрация: 14.12.2008
Сообщений: 1,079
|
Спасибо! Попробую исправить!
Методику настройки системы координат взял с этого сайта: https://frolov-lib.ru/books/bsp/v14/ch2_2.htm Последний раз редактировалось МишаИнженер, 08.03.2023 в 17:29. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Почему дорожные люки круглые? (стресс-собеседование) | smile157 | Разное | 403 | 14.12.2015 09:06 |
Почему направление результатов между Лира 9.6 и САПР 2013 отличается? | ander | Лира / Лира-САПР | 11 | 12.11.2015 04:47 |
Civil 3D 2015 rus создает over9000 копий подшивок при работе в облаке (яндекс диск). почему? | ripeinik | Вертикальные решения на базе AutoCAD | 7 | 12.10.2015 13:04 |
Почему не активна функция ветер/снег 2Д/3Д в нагрузках? | ФАХВЕРК | Robot | 6 | 02.10.2015 10:06 |
Civil 3D 2014 Работа на разных компьютерах. | Serghei | Вертикальные решения на базе AutoCAD | 9 | 24.09.2014 11:00 |