您的位置:首页 > 其它

MFC界面 坐标获取/转换 及 区域获取

2014-11-18 21:47 302 查看
MFC界面 坐标获取/转换 及 区域获取



MFC界面相关常用方法整理:







坐标点----CPoint:



CPoint



构造方法:



CPoint();



CPoint( intinitX, int initY );



CPoint(POINT initPt );



CPoint( SIZEinitSize );



CPoint(DWORD dwPoint );



参数:



initX



Specifies the value of the x member of CPoint.



initY



Specifies the value of the y member of CPoint.



initPt



POINT structure orCPoint that specifies the values used to initializeCPoint.



initSize



SIZE structureor CSize that specifiesthe values used to initialize CPoint.



dwPoint



Sets the x member to the low-order word of dwPoint and the ymember to the high-order word of dwPoint.











光标----GetCursorPos/SetCursorPos

GetCursorPos



函数功能:该函数检取光标的位置,以屏幕坐标表示。



函数原型:BOOL GetCursorPos(LPPOlNTIpPoint);



参数:



  IpPoint:POINT结构指针,该结构接收光标的屏幕坐标。



返回值:



如果成功,返回值非零;



如果失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。



备注:



1.光标的位置通常以屏幕坐标的形式给出,它并不受包含该光标的窗口的映射模式的影响。该调用过程必须具有对窗口站的WINSTA_READATTRIBUTES访问权限。



2.此函数为api函数,头文件:winuser.h;库文件:user32.lib。(Windows CE不支持)







SetCursorPos



函数功能:该函数把光标移到屏幕的指定位置。如果新位置不在由ClipCursor函数设置的屏幕矩形区域之内,则系统自动调整坐标,使得光标在矩形之内。



函数原型:BOOL SetCursorPos(int X,int Y);



参数:



  X:指定光标的新的X坐标,以屏幕坐标表示。



  Y:指定光标的新的Y坐标,以屏幕坐标表示。



返回值:



如果成功,返回非零值;



如果失败,返回值是零,若想获得更多错误信息,请调用GetLastError函数。



备注:



1.该光标是共享资源,仅当该光标在一个窗口的客户区域内时它才能移动该光标。











区域----GetClientRect/GetWindowRect



GetClientRect



函数功能:该函数获取窗口客户区的坐标。客户区坐标指定客户区的左上角和右下角。由于客户区坐标是相对窗口客户区的左上角而言的,因此左上角坐标为(0,0)



函数原型:



Win32SDK :BOOL GetClientRect( HWND hWnd, LPRECT lpRect );



MFC :void GetClientRect(LPRECT lpRect) const;//属于CWnd类



参数:



hWnd



  [输入]是程序窗口的句柄。



  lpRect



  [输出]是一个指针,指向一个RECT类型的rectangle结构。该结构有四个LONG字段,分别为left、top、right和bottom。GetClientRect将这四个字段设定为窗口显示区域的尺寸。left和top字段通常设定为0。right和bottom字段设定为显示区域的宽度和高度(像素点数)。也可以是一个CRrect对象指针。CRect对象有多个参数,与RECT用法相同。



返回值:



如果函数成功,返回一个非零值。



  如果函数失败,返回零。要得到更多的错误信息,请使用GetLastError函数。







GetWindowRect



函数功能:该函数返回指定窗口的边框矩形的尺寸。该尺寸以相对于屏幕坐标左上角的屏幕坐标给出。



函数原型:



WIN32 SDK : BOOL GetWindowRect(HWND hWnd,LPRECT lpRect);



  MFC :void GetWindowRect(LPRECT lpRect) const; //属于CWnd类



参数:



  hWnd:窗口句柄。



  lpRect:指向一个RECT结构的指针,该结构接收窗口的左上角和右下角的屏幕坐标。



返回值:



如果函数成功,返回值为非零;



如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。







普及:



*客户区就是窗体中除了菜单、工具栏、状态栏的其他部分。当然按钮的客户区就是整个窗口部分都是。



* 窗口的边框矩形就是指整个窗口的外边缘。















区域间的光标转换----ScreenToClient/ClientToScreen



ScreenToClient



函数功能:该函数把屏幕上指定点的屏幕坐标转换成用户坐标。



函数原型:



WIN32 SDK : BOOL ScreenToClient(HWND hWnd, LPPOINTlpPoint);



MFC : void ScreenToClient( LPPOINT lpPoint )const; //CWnd类



参数:



  hWnd:指向窗口的句柄,此窗口的用户空间将被用来转换。



  lpPoint:指向POINT结构指针,该结构含有要转换的屏幕坐标。



返回值:



如果函数调用成功,返回值为非零值;



如果函数调用失败,则为零。在Windows NT下,若想获得更多错误信息,请调用GetLastError函数。



注释:



该函数应用hWnd参数标识的窗口和POINT结构给定的屏幕坐标来计算用户坐标,然后以用户坐标来替代屏幕坐标,新坐标是相对于指定窗口的领域的左上角。







ClientToScreen



函数功能:该函数将指定点,或者矩形的用户坐标转换成屏幕坐标。



函数原型:



WIN32SDK : BOOL ClientToScreen(HWND hWnd,LPPOINTlpPoint);



MFC : void ClientToScreen( LPPOINT lpPoint ) const;//CWnd类



参数:



  hWnd:用户区域用于转换的窗口句柄。



  lpPoint:指向一个含有要转换的用户坐标的结构的指针,如果函数调用成功,新屏幕坐标复制到此结构。



返回值:



如果函数调用成功,返回值为非零值,否则为零。



注释:



函数用屏幕坐标取代POINT结构中的用户坐标,屏幕坐标与屏幕左上角相关联。







普及:



*屏幕坐标 Screen coordinates:就是相对于整个电脑屏幕的左上角为0,0点。



*窗口坐标Window coordinates: 原点(0,0)位于窗口的左上角(包括非客户区,如标题条)



*用户坐标/客户区坐标Client-window coordinates: 是以窗口客户区左上角为原点,主要用于客户区的绘图输出和窗口消息的处理











模拟鼠标点击----mouse_event



mouse_event



函数功能:该函数综合鼠标击键和鼠标动作。



函数原型:



  VOIDmouse_event(



  DWORDdwFlags, // motion and click options



  DWORD dx,// horizontal position or change



  DWORD dy,// vertical position or change



  DWORDdwData, // wheel movement



  ULONG_PTRdwExtraInfo // application-defined information



  );



参数:



  dwFlags:标志位集,指定点击按钮和鼠标动作的多种情况。此参数里的各位可以是下列值的任何合理组合:



  MOUSEEVENTF_ABSOLUTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。此标志可被设置,也可不设置,不管鼠标的类型或与系统相连的类似于鼠标的设备的类型如何。要得到关于相对鼠标动作的信息,参见下面备注部分。



  MOUSEEVENTF_MOVE:表明发生移动。



  MOUSEEVENTF_LEFTDOWN:表明接按下鼠标左键。



  MOUSEEVENTF_LEFTUP:表明松开鼠标左键。



  MOUSEEVENTF_RIGHTDOWN:表明按下鼠标右键。



  MOUSEEVENTF_RIGHTUP:表明松开鼠标右键。



  MOUSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。



  MOUSEEVENTF_MIDDLEUP:表明松开鼠标中键。



  MOUSEEVENTF_WHEEL:在WindowsNT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出。



  dx:指定鼠标沿x轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOUSEEVENTF_ABSOLUTE的设置。给出的绝对数据作为鼠标的实际X坐标;给出的相对数据作为移动的mickeys数。一个mickey表示鼠标移动的数量,表明鼠标已经移动。



  dy:指定鼠标沿y轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOUSEEVENTF_ABSOLUTE的设置。给出的绝对数据作为鼠标的实际y坐标,给出的相对数据作为移动的mickeys数。



  dwData:如果dwFlags为MOUSEEVENTF_WHEEL,则dwData指定鼠标轮移动的数量。正值表明鼠标轮向前转动,即远离用户的方向;负值表明鼠标轮向后转动,即朝向用户。一个轮击定义为WHEEL_DELTA,即120。



  如果dwFlagsS不是MOUSEEVENTF_WHEEL,则dWData应为零。



  dwExtralnfo:指定与鼠标事件相关的附加32位值。应用程序调用函数GetMessgeExtraInfo来获得此附加信息。



返回值:



无。



备注:



如果鼠标被移动,用设置MOUSEEVENTF_MOVE来表明,dX和dy保留移动的信息。给出的信息是绝对或相对整数值。



  如果指定了MOUSEEVENTF_ABSOLUTE值,则dX和dy含有标准化的绝对坐标,其值在0到65535之间。事件程序将此坐标映射到显示表面。坐标(0,0)映射到显示表面的左上角,(65535,65535)映射到右下角。



  如果没指定MOUSEEVENTF_ABSOLUTE,dX和dy表示相对于上次鼠标事件产生的位置(即上次报告的位置)的移动。正值表示鼠标向右(或下)移动;负值表示鼠标向左(或上)移动。



  鼠标的相对移动服从鼠标速度和加速度等级的设置,一个最终用户用鼠标控制面板应用程序来设置这些值,应用程序用函数SystemParameterslnfo来取得和设置这些值。



  在应用加速时系统对指定相对鼠标移动提供了两个测试。如果指定的沿X轴y轴的距离比第一个鼠标阈值大,并且鼠标的加速等级非零,则操作系统将距离加倍。如果指定的沿X轴或y轴的距离比第二个鼠标阈值大,并且鼠标的加速等级为2,则操作系统将从第一个阈测试得来的距离加倍。这样就允许操作系统将指定鼠标沿X轴或y轴的相对位移加到4倍。



  一旦应用了加速,系统用期望的鼠标速度换算合成的值。鼠标速度的范围是从1(最慢)到20(最快),并代表基于鼠标移动的距离指示符移动的数量。缺省值是10,表示对鼠标的移动设有附加的修改
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: