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