MFC中,我能过GetCursorPos()来获取鼠标当前的屏幕坐标,但是我想获取当前窗口的坐标。

MFC中,我能过GetCursorPos()来获取鼠标当前的屏幕坐标,但是我想获取当前窗口的坐标。,第1张

有现成的ScreenToClient函数,你可以百度搜一下。

例:

void CTest25Dlg::OnButton1()

{

CRect r(0,0,100,100);

CPoint pt(0,0);

ScreenToClient(&r);

ScreenToClient(&pt);

}

执行下面的两行后,r,pt的值变成了相对对话框左上角的值

GetPixel函数可以得到指定坐标点的像素值。

函数功能:该函数检索指定坐标点的像素的RGB颜色值。

函数原型:COLORREF GetPixel(HDC hdc, int nXPos, int nYPos)

参数

hdc:设备环境句柄。

nXPos:指定要检查的像素点的逻辑X轴坐标。

nYPos:指定要检查的像素点的逻辑Y轴坐标。

返回值:返回值是该象像点的RGB值。如果指定的像素点在当前剪辑区之外;那么返回值是CLR_INVALID。

GetCursorPos函数可以得到当前鼠标的坐标点。

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

函数原型:BOOL GetCursorPos(LPPOINT lpPoint)。

参数

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

with two methods to create a toolbar To create a toolbar resource using the Resource Editor, follow these steps: //在资源编辑器中创建一个toolbar资源

Create a toolbar resource//常见一个toolbar资源

Construct the CToolBar object//构造一个toolbar对象

Call the Create (or CreateEx) function to create the Windows toolbar and attach it to the CToolBar object//调用creat或者createx函数创建窗口toolbar并且将其与toolbar对象关联

Call LoadToolBar to load the toolbar resource//调用 LoadToolBar载入toolbar资源

Otherwise, follow these steps:

Construct the CToolBar object//构造CToolBar对象

Call the Create (or CreateEx) function to create the Windows toolbar and attach it to the CToolBar object//调用Create (or CreateEx)函数创建窗口toolbar并关联到CToolBar 对象

Call LoadBitmap to load the bitmap that contains the toolbar button images//调用LoadBitmap 载入包含了toolbar按钮的bitmap载入图标 *** 作,图标可以通过资源管理器导入。

Call SetButtons to set the button style and associate each button with an image in the bitmap//调用SetButtons 设置按钮类型并且将每一个按钮和关联

All the button images in the toolbar are taken from one bitmap, which must contain one image for each button All images must be the same size; the default is 16 pixels wide and 15 pixels high Images must be side by side in the bitmap//所有的工具栏按钮都来自于一个位图,且每一个按钮必须包含一个位图。所有的必须有相同的大小,默认时16像素宽,15像素高。必须边挨边在为图中。

上面是MSDN中的说明,很清楚的说明了如何向工具栏中添加图标。

1、在资源管理器中添加一个工具栏资源

2、定义一个工具栏对象并且和工具栏资源关联

3、用loadbitmap函数将图标载入到工具栏,LoadBitmap 函数的使用可以查阅MSDN

4、用SetButtons 将按钮和关联起来就行了

载入位图可以用LoadBitmap()有两种重载形式

BOOL LoadBitmap( LPCTSTR lpszRecourceName );

BOOL LoadBitmap( UINT nIDResource );

参数: lpszResourceName 指向一个包含了位图资源名字的字符串(该字符串以null结尾)。

nIDResource 指定位图资源中资源的ID号。

获取位图可以用GetBitmapBits()

DWORD GetBitmapBits( DWORD dwCount, LPVOID lpBits ) const;

CBitmap::GetBitmap

int GetBimap( BITMAP pBitMap );

返回值:调用成功时返回非零值,否则为0。

参数: pBitMap 指向BITMAP结构的一个指针,不能为NULL。

说明:

本函数用于查看CBitmap对象的信息。返回的信息存放在pBitMap指向的BITMAP结构中。

BITMAP结构如下:

BITMAP结构具有如下形式:

typedef struct tagBITMAP

{ / bm /

int bmType;

int bmWidth;

int bmHeight;

int bmWidthBytes;

BYTE bmPlanes;

BYTE bmBitsPixel;

LPVOID bmBits;

} BITMAP;

BITMAP结构定义了逻辑位图的高,宽,颜色格式和位值。

成员: bmType 指定了位图的类型。对于逻辑位图,这个成员必须为0。

bmWidth 指定了位图的宽度,以像素为单位。宽度必须大于0。

bmHeight 指定了位图的高度,以扫描行为单位。高度必须大于0。

bmWidthBytes 指定了每个扫描行中字节的数目。这个值必须是个偶数,因为图形设备接口(GDI)假定位图中的位值构成一个整数(2字节)数组。换句话说,bmWidthBytes8必须是16的倍数,大于或等于bmWidth与bmBitsPixel相乘所得的值。

bmPlanes 指定了位图中颜色平面的数目。

bmBitsPixel 指定了每个位平面中用于定义一个像素所需的颜色位数。

bmBits 指向位图中位值的位置。bmBits成员必须是一个指向单字节数组的长指针。

注释:

现在使用的位图格式有单色的和彩色的。单色的位图使用每个位平面一位的格式。每个扫描线是16的倍数。

对于一个高度为n的单色位图,扫描线是按照如下方式组织的:

Scan 0

Scan 1

Scan n-2

Scan n-1

单色设备上的像素不是黑就是白。如果位图中对应的位是1,则像素就被打开(白)。如果对应的位是0,则像素被关闭(黑)。

所有具有RC_BITBLT位的设备都支持位图,该位是在CDC::GetDeviceCaps成员函数的RASTERCAPS索引中设置的。

每个设备都有它自己的颜色格式。为了在不同的设备间传递位图,使用Windows的GetDIBits和SetDIBits函数。

给你举个例子:

CBitmap m_bmp;

BITMAP pBitMap;

m_bmpLoadBitmap("d:\\\\示例\\flowerbmp");//加载位图

m_bmpGetBitmap(pBitMap);//获取位图信息

int i,j;

DWORD color=pBitMap->bmBits[ipBitMap->bmHeight+pBitMap->bmWidth];//访问第i行第j列像素点的颜色值

数:DPI(每英寸多少点)

象素数 / DPI = 英寸数

英寸数 254 = 毫米数

对于显示设备,不管是打印机还是屏幕,都有一种通用的方法

先用GetDeviceCaps(设备句柄,LOGPIXELSX)

或者

GetDeviceCaps(设备句柄,LOGPIXELSY)获得设备每英寸的像素数

分别记为:px 和 py

一英寸等于254mm

那么毫米换算成像素的公式为 

水平方向的换算: x px /254

垂直方向的换算: y py /254

像素换算为毫米 x 254 / px

//在对话窗标题处实时显示客户区内鼠标的坐标

void CTestDlg::OnMouseMove(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

CString str;

strFormat("X:%d  Y:%d", pointx, pointy);   //格式化鼠标坐标点信息并保存到CString型变量str中

SetWindowText(str);    //更新程序窗口Edit控件文本

CDialog::OnMouseMove(nFlags, point);

}

//单击鼠标时,显示鼠标在客户区内的坐标

void CTestDlg::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

CString str;

strFormat("x = %d, y = %d", pointx, pointy);

AfxMessageBox(str,MB_ICONQUESTION);

CDialog::OnLButtonDown(nFlags, point);

}

以上就是关于MFC中,我能过GetCursorPos()来获取鼠标当前的屏幕坐标,但是我想获取当前窗口的坐标。全部的内容,包括:MFC中,我能过GetCursorPos()来获取鼠标当前的屏幕坐标,但是我想获取当前窗口的坐标。、VC++如何获取当前坐标点的像素值、MFC 获取及修改CBitmap对象的单个像素等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9580379.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存