2016-10-26 2 views
1

Скажем, у меня есть произвольный дескриптор GDI +, как я могу определить базовый тип объекта GDI +, который он представляет? Кисть, ручка, изображение, матрица и т. Д.?Определение типа ручки в GDI +

Я искал в Интернете, но могу найти только примеры для GDI, но ничего для GDI +, у GDI + нет такого средства?

EDIT: Просто отметить, что я не использую C++, поэтому у меня нет доступа к любым языковым функциям для определения типа объекта. Я создаю обертку GDI + для AutoHotkey, поэтому я почти ограничена функциями в DLL.

+0

Я не знаком с AutoHotkey. Вы должны опубликовать некоторый пример кода. Если вы используете Gdi + Flat API, то я думаю, что нет способа. –

+0

Да, я ограничен использованием Flat API или других вызовов API из DLL. AHK является интерпретированным языком и имеет некоторые ограничения, не уверенный, какие примеры кода я мог бы разместить, поскольку сам код не имеет особого значения. Я верю, что вы правы, однако, что, похоже, не существует официального способа определить тип дескриптора GDI + только из самого дескриптора, за исключением использования оператора «typeid», как вы уже упоминали. –

+0

Имеют ли эти объекты уникальные методы или атрибуты? Имея быстрый взгляд на документы, кажется, что Pen имеет атрибут «PenType», который не имеет ни один из других классов. Может быть немного утомительно создать набор правил, чтобы идентифицировать объект по его атрибутам или методам, но лучше, чем ничего, я полагаю. – MCL

ответ

1

Использование typeid оператор

Пример:

Gdiplus::Brush *brush; 
Gdiplus::Pen *pen; 
Gdiplus::Image *image; 
Gdiplus::Matrix *matrix; 

cout << "brush: " << typeid(brush).name() << '\n'; 
cout << "pen: " << typeid(pen).name() << '\n'; 
cout << "image: " << typeid(image).name() << '\n'; 
cout << "matrix: " << typeid(matrix).name() << '\n'; 

выход:

brush: class Gdiplus::Brush * 
pen: class Gdiplus::Pen * 
image: class Gdiplus::Image * 
matrix: class Gdiplus::Matrix * 
+0

Было бы полезно, если бы я использовал C++, я в процессе создания оболочки GDI + для AutoHotkey, к сожалению, у меня нет доступа к оператору typeid. Я надеялся на вызов API, который я мог бы назвать через функцию AHKs DllCall, но мне там не повезло. Спасибо за ваш ответ, я должен был бы более четко определить, какую среду я использовал! Хотя ваш ответ был не тем, что мне нужно, он очень подходит для пользователей C++, поэтому я проголосовал за это! :) –