Winapi Как нарисовать прямоугольник для определенного дескриптора окна?
Я использую библиотеку Wrapper в GMS2, которая была сделана еще в GM6 Days (разработчик игр). Кто-то смог обернуть большую часть win32API для использования в GM6-8. Есть только один странный случай, когда система WinAPI дает сбой при рисовании элементов управления в главном окне приложения.
Желаемая цель состоит в том, чтобы нарисовать изображение в дочернем окне и нарисовать сетку, определяющую его разделение в соответствии с вводом пользователя EX: 16x16 и с выбором пользователем квадратов ЧЕРЕЗ Щелчок мышью + перетаскивание по полям.
К сожалению, у меня практически нет опыта работы с win32API, поэтому я немного не понимаю, с чего начать. Просматривая документацию, похоже, что он оставил большинство имен сценариев DLL, чтобы имитировать формат этого при вызове на C++ или C (только мои предположения).
Из его документации у него есть такие вещи, как "Система рисования", которая содержит такие вещи, как "Переместить элемент","Добавить строку","Добавить графический буфер" и т. Д., А также другие функции графического буфера. Но тогда есть функции "Draw", в которых есть такие вещи, как "Draw Fill Rect, DrawSelectObj" и т. Д. Он на самом деле не предоставляет примеров, поэтому я не уверен, как использовать эти вещи вместе для получения желаемых результатов. В чем разница между системой рисования и функцией рисования? Должен ли я использовать их вместе с графическим буфером?
Может ли кто-нибудь указать правильное направление необходимых шагов, чтобы сделать это? Пример без кода и просто эквивалент функции будет достаточно, мне просто нужно знать, какие функции использовать, а затем привязать его к дочернему окну.
Пример кода из его демонстрации выглядит примерно так
GbGradient2 = API_GB_Create (105,105); //Graphics Buffer
DcGradient2 = API_GB_GetDC (GbGradient2);
API_Draw_Gradient (DcGradient2,0,0,105,105,0,c_yellow,c_lime);
BrGradient2 = API_Draw_CreatePatternBrush (API_GB_GetBitmap (GbGradient2));
API_Draw_Gradient (DcGradient2,0,0,105,105,0,c_red,65535);
BrGradient3 = API_Draw_CreatePatternBrush (API_GB_GetBitmap (GbGradient2));
hRectangle = API_DS_AddRectangle (2,5,5,105,105); // Adds a rectangle(Drawing System)
hEllipse = API_DS_AddEllipse (2,5,5,105,105);
hNoPen = API_Draw_CreatePen (PS_NULL,0,0);
API_DS_SetItemBrush (hRectangle,BrGradient2); // Sets the brush
API_DS_SetItemBrush (hEllipse,BrGradient3);
API_DS_SetItemPen (hRectangle,hNoPen); // Sets the pen
API_DS_SetItemPen (hEllipse,hNoPen);
API_Draw_Gradient (GbGradient2,0,0,16,16,0,c_yellow,c_lime);
Посмотрите на это еще немного, похоже, что функции рисования как-то связаны с GDI.
1 ответ
Поскольку GMS2 является кроссплатформенным инструментом, его функциональность только для Windows была удалена. вы можете создать красивый графический интерфейс для этой цели, используя объекты GMS2, так как у вас есть немного опыта в Win32 API, это будет проще, чем это громоздкое кодирование
вот несколько советов,
- создание оконного объекта со спрайтом прямоугольника
- создание объектов пользовательского интерфейса в событии создания указанного выше объекта
- добавление кода к глобальному событию мыши