2016-10-26 37 views
1

假设我有一个任意的GDI +句柄,我怎样才能确定它代表的GDI +对象的基础类型?笔刷,笔,图像,矩阵等?确定GDI中的句柄类型+

我已经在网上搜索,但只能找到GDI的例子,但没有GDI +,GDI +有这样的设施吗?

编辑:只是要注意,我没有使用C++,所以我没有访问任何语言特定的功能来确定对象类型。我正在为AutoHotkey创建一个GDI +包装器,所以我非常局限于DLL中的函数。

+0

我不熟悉在AutoHotkey。你应该发布一些示例代码。如果你使用的是Gdi + Flat API,那么我认为没有办法。 –

+0

是的,我仅限于使用Flat API或其他来自DLL的API调用。 AHK是一种解释型语言,并且有一些限制,不确定我可以发布哪些代码示例,因为代码本身并不真正相关。然而,我确信你是对的,因为除了像前面提到的那样使用“typeid”操作符之外,似乎并没有正式的方式来从句柄本身确定GDI +句柄的类型。 –

+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++,那将会很有帮助,我正在为AutoHotkey创建一个GDI +包装器,所以很遗憾我无法访问typeid操作符。我希望可以通过AHKs DllCall函数调用某种API调用,但我没有太多运气。感谢您的回答,我应该更清楚我使用的是哪种环境!虽然你的答案不是我所需要的,但它对于C++用户来说非常合适,所以我投票赞成! :) –