在SDK中获取子窗口坐标的问题
2008-12-24 05:48
399 查看
想给TreeView控件加个其它颜色的边框,本来以前也常用GetWindowRect和GetClientRect函数,其中GetWindowRect函数是获取指定窗口句柄在屏幕中的坐标和大小,而GetClient函数则时获取指定窗口在窗口显示区域的坐标和大小。给TreeView加个颜色边框,我的思路是先获取TreeView的坐标和大小,然后再用Rectangle函函数照着坐标和大小来画个矩形框就行了,但在获取TreeView的坐标时,X坐标和Y坐标总是为0,我的代码如下:
GetWindowRect(hwndTV, &rectTV);
ScreenToClient(hwndTV, (LPPOINT)&rectTV);
在MSDN中也没说ScreenToClient函数中的句柄该设置子窗口句柄还是父窗口句柄,这是我在学习这个函数时没有理解,而且用得也少,后来在CSDN上看到了一篇贴子,才知道正确的写法如下:
GetWindowRect(hwndTV, &rectTV); //hwndTV为TreeView控件句柄
ScreenToClient(hwnd, (LPPOINT)&rectTV); //hwnd为父窗口句柄
以前我一直将ScreenToClient函数的作用理解为将窗口屏幕坐标转为显示区域坐标,并存入RECT或POINT结构体中,正确的理解应为将RECT或POINT结构体中的已存在的屏幕坐标转换为在第一个参数中设置窗口的显示区域坐标。
来个完整点的代码:
GetWindowRect(hwndTV, &rectTV);
Point.x = rectTV.left; //将X坐标赋值到POINT结构中
Point.y = rectTV.top; //将Y坐标赋值到POINT结构中
ScreenToClient(hwnd, &Point);
GetClientRect(hwndTV, &rectTV);
hdc = BeginPaint(hwnd, &ps);
hPen = CreatePen(PS_SOLID, 1, RGB(127,157,185));
SelectObject(hdc, hPen);
SelectObject(hdc, (HBRUSH) GetStockObject(NULL_BRUSH));
Rectangle(hdc,
Point.x - 1,
Point.y - 1,
rectTV.right + 2,
rectTV.bottom + 2);
EndPaint(hwnd, &ps);
GetWindowRect(hwndTV, &rectTV);
ScreenToClient(hwndTV, (LPPOINT)&rectTV);
在MSDN中也没说ScreenToClient函数中的句柄该设置子窗口句柄还是父窗口句柄,这是我在学习这个函数时没有理解,而且用得也少,后来在CSDN上看到了一篇贴子,才知道正确的写法如下:
GetWindowRect(hwndTV, &rectTV); //hwndTV为TreeView控件句柄
ScreenToClient(hwnd, (LPPOINT)&rectTV); //hwnd为父窗口句柄
以前我一直将ScreenToClient函数的作用理解为将窗口屏幕坐标转为显示区域坐标,并存入RECT或POINT结构体中,正确的理解应为将RECT或POINT结构体中的已存在的屏幕坐标转换为在第一个参数中设置窗口的显示区域坐标。
来个完整点的代码:
GetWindowRect(hwndTV, &rectTV);
Point.x = rectTV.left; //将X坐标赋值到POINT结构中
Point.y = rectTV.top; //将Y坐标赋值到POINT结构中
ScreenToClient(hwnd, &Point);
GetClientRect(hwndTV, &rectTV);
hdc = BeginPaint(hwnd, &ps);
hPen = CreatePen(PS_SOLID, 1, RGB(127,157,185));
SelectObject(hdc, hPen);
SelectObject(hdc, (HBRUSH) GetStockObject(NULL_BRUSH));
Rectangle(hdc,
Point.x - 1,
Point.y - 1,
rectTV.right + 2,
rectTV.bottom + 2);
EndPaint(hwnd, &ps);
相关文章推荐
- 在SDK中获取子窗口坐标的问题
- 解决在canvas获取的坐标和窗口的坐标一样的问题
- android Dialog无法获取窗口问题闪退
- C#如何获取鼠标相对当前窗口的坐标
- 解决C#获取鼠标相对当前窗口坐标的实现方法
- VC++ 坐标问题总结,控件大小随窗口变化
- 【微信开发】-JSSDK获取地理位置坐标及转换成百度坐标和腾讯坐标
- ligerUI调用$.ligerDialog.open弹出窗口,关闭后无法获取焦点问题
- JavaScript(获取或设置html元素的宽,高,坐标),确定和判断鼠标是否在元素内部,二级导航菜单鼠标离开样式问题解决
- android版本sdk动态获取权限问题
- JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度问题
- js获取各种浏览器窗口滚动坐标
- 动态获取自定义控件坐标中遇到的问题
- matlab中GUI界面点击图片获取坐标问题的解决方法
- 父窗口的文本框中获取弹出子窗口文本框的值!获取多值问题
- Android中的窗口坐标体系(分二种)、获取坐标的方法
- Java获取窗口鼠标坐标以及键盘
- delphi2010获取鼠标指向窗口的位置及鼠标在窗口内的相对位置坐标
- android sdk manager获取更新版本问题
- 获取弹出框里面元素相对于整个浏览器窗口的坐标