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

来源:互联网 发布:淘宝怎么买vr资源 编辑:程序博客网 时间:2024/04/30 22:14

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

    POINTstructure orCPoint that specifies the values used to initializeCPoint.

initSize

    SIZEstructureorCSizethat 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 ofdwPoint.

 

 

光标----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,表示对鼠标的移动设有附加的修改。


原创粉丝点击