炫彩界面库论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3457|回复: 0

[分享] 我来给你解答C#中使用炫彩的难题系列文章(三)

[复制链接]

该用户从未签到

发表于 2013-11-13 17:03:31 | 显示全部楼层 |阅读模式
C# 中的结构体与炫彩中结构体是不同的。
比如 炫彩中的RECT这个结构体是来源于Win32 中的 ,他与C#中Rectangle是不一样的,所以在有些地方你用C#中的Rectangle作为炫彩API中的参数会得不到在正确的值,那么我们该怎么办呢?其实问题很简单,那就是自己封装符合要求的结构体,并且灵活使用C#中的指针这一感念!你也许会好奇,C#指针不是不安全吗?其实不然,C#指针有事还是很有用的,尤其在调用非托管代码时,下面我来举个例子,当你单击窗体时如何获取鼠标坐标。根据炫彩1.5.3文档,我们可以通过下面的方法获取鼠标坐标
void WINAPI XWnd_RegisterMessage (HWINDOW hWindow,
int message,
void * pFun
)

窗口注册消息处理函数
参数:
hWindow窗口句柄
message窗口消息类型.  #define XWM_MOUSECLICK   0x7000+1
pFun处理消息函数名 BOOL CALLBACK WndMouseClick(HWINDOW hWindow,POINT *pPt);  
但是,当你封装时如歌将POINT *pPt 这个参数封成C#中的Point自带的结构体,那么打死你也得不到真实的值,所以你需要自己进行封装POINT格式如下:
  1. [StructLayout(LayoutKind.Explicit)]
  2.     public struct Wm32Struct_Point
  3.     {
  4.         [FieldOffset(0)]
  5.         public int x;
  6.         [FieldOffset(4)]
  7.         public int y;
  8.     }
复制代码

调用时
  1.   unsafe
  2.             {
  3.                 XWnd_RegisterMessage(hWindow, XWM_MOUSEDBCLICK, delegate(int _hWindow, Wm32Struct_Point* pPt)
  4.             {
  5.                 int c = pPt->x;
  6.                 int q = pPt->y;
  7.             }
复制代码
就可以获取真实的值了,
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

QQ|Archiver|手机版|小黑屋|炫彩界面库 ( 鄂ICP备2023014763号-1 )

GMT+8, 2024-3-29 15:20 , Processed in 0.090213 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表