MFC怎么获取控件地址

MFC怎么获取控件地址,第1张

1设置位置可以使用setWindowPos

但是并没有函数GetWindowPos获取位置

2可以通过一下方法获得

相关函数

GetClientRect(); //获得client区域

GetWindowRect(); //获取window区域

ScreenToClient(); //相互转换

ClientToScreen();

3由于GetClientRect()获得的区域不包括位置,得到的rect的left,top必然为0

而GetWindowRect();获得的区域包括位置,但会发现获得值不准确,应该是加上了窗体边界。

4正确方法:

CRect rt;

GetWindowRect(&rt); //获得window区域

ScreenToClient(&rt); //转到client

没有现成的成员函数可以完成这个功能,可以用下面迂回的办法:(假设要获得一个CButton but控件的位置)

RECT rectBut;

butGetWindowRect( &rectBut); //获取按钮控件的屏幕坐标

RECT rectParent;

(butGetParent())->GetWindowRect( &rectParent ); //获取按钮父窗口的屏幕坐标

RECT rect; //开始计算按钮相对于父窗口的坐标

rectleft = rectButleft - rectParentleft;

rectright = rectButright - rectParentleft;

recttop = rectButtop - rectParenttop;

rectbottom = rectButbottom - rectParenttop;

经过这段代码后,rect里面就是按钮空间相对于其所在窗口的坐标。这段代码有两点要特别注意:

1)butGetParent()可能返回NULL,这在按钮是桌面上的按钮时发生,此时(butGetParent())->GetWindowRect( &rectParent )将导致访问违例异常,程序会崩溃,但鉴于一般程序不会在桌面窗口上添加控件,因此不必作额外的检测。

2)这段代码获得的是按钮相对于整个父窗口的坐标,包括菜单和标题栏,而不是相对于父窗口客户区的坐标。若要获得相对于父窗口客户区的坐标则要做更多处理。

楼上的回答简直是胡扯。

我觉得你对于这几个函数的理解已经很正确了。

msdn的解释很清晰很正确,没有任何疑义,和你的理解是一致的。

呵呵,我觉得只要解释一下第一个执行为啥左上角是(0,0),你的所有疑问就没有了。

我想请问一下,你是不是在对话框初始化的时候,也就是OnInitialDlg里面执行的以上代码?我相信答案肯定是“是的”。

在对话框初始化的时候,窗口是先有可能放置在屏幕左上角,然后在这个初始化函数结束后,窗口被移动到屏幕正中。

也就是说,你在对话框初始化过程中获取窗口位置的时候,窗口确实就在左上角!

如果你想验证一下我的结论,不妨在程序中设置一个按钮,在这个按钮的消息响应中,再次执行这几句代码,然后你观察一下结果,是不是就完全符合你的预期了^_^

欢迎采纳!

没有装VB6,提供一下方法,希望你自己写代码

SetWindowLong设置窗口消息处理新函数地址指向自己定义的消息处理函数

自己定义的消息处理函数中获取 上 下 左 右 方向键按下产生的消息msg的值是WM_COMMAND怎么判断是方向键,查MSDN中关于WM_COMMAND消息的介绍

获取图形的RECT结构值:GetWindowRect(图形控件的句柄,RECT结构指针)

左方向时,将RECT的left成员的值减去一个值,这个值是移动时的像素数

右方向时,将RECT的left成员的值加上一个值,同上

上方向时,将RECT的top成员的值减去一个值,同上

下方向时,将RECT的top成员的值加上一个值,同上

然后使用SetWindowPos(hPicture,0,Rectleft,Recttop,0,0,SWP_NOSIZE)进行图形控件的位置设置hPicture指图形控件的句柄SWP_NOSIZE指不更改控件尺寸

步骤就是这样,优点是,即使窗体上有其他控件,焦点在其他控件上,主窗体依然可以通过方向键控制图形的移动因为所有子控件收到按键消息时,都会转发WM_COMMAND消息给主窗体部分子控件可能不接收按键消息

拆分窗口,那肯定有个拆分控件,比如分割条

你取得这个控件的Rect,然后取得外面大窗口的区域,然后就可以计算。

取得分割条的Rect1,再取得大窗口的Rect2,那么右边的子区域的 left等于rect1right+1

右边子区域的right等于rect2right

我相信是可以通过计算得到的

以上就是关于MFC怎么获取控件地址全部的内容,包括:MFC怎么获取控件地址、mfc中控件移动的问题、各位高手,小弟请教关于GetWindowRect,GetClientRect以及ClientToScreen,ScreenToClient的使用!先谢谢啦等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9350464.html

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

发表评论

登录后才能评论

评论列表(0条)

保存