|
C# 中的结构体与炫彩中结构体是不同的。
比如 炫彩中的RECT这个结构体是来源于Win32 中的 ,他与C#中Rectangle是不一样的,所以在有些地方你用C#中的Rectangle作为炫彩API中的参数会得不到在正确的值,那么我们该怎么办呢?其实问题很简单,那就是自己封装符合要求的结构体,并且灵活使用C#中的指针这一感念!你也许会好奇,C#指针不是不安全吗?其实不然,C#指针有事还是很有用的,尤其在调用非托管代码时,下面我来举个例子,当你单击窗体时如何获取鼠标坐标。根据炫彩1.5.3文档,我们可以通过下面的方法获取鼠标坐标
窗口注册消息处理函数
参数:hWindow | 窗口句柄 | message | 窗口消息类型. #define XWM_MOUSECLICK 0x7000+1 | pFun | 处理消息函数名 BOOL CALLBACK WndMouseClick(HWINDOW hWindow,POINT *pPt); | 但是,当你封装时如歌将POINT *pPt 这个参数封成C#中的Point自带的结构体,那么打死你也得不到真实的值,所以你需要自己进行封装POINT格式如下:- [StructLayout(LayoutKind.Explicit)]
- public struct Wm32Struct_Point
- {
- [FieldOffset(0)]
- public int x;
- [FieldOffset(4)]
- public int y;
- }
复制代码
调用时- unsafe
- {
- XWnd_RegisterMessage(hWindow, XWM_MOUSEDBCLICK, delegate(int _hWindow, Wm32Struct_Point* pPt)
- {
- int c = pPt->x;
- int q = pPt->y;
- }
复制代码 就可以获取真实的值了,
|
|