vc高手请帮我解答一下

来源:百度知道 编辑:UC知道 时间:2024/07/02 12:46:25
GetClientRect();怎么用 要详细的解答,比如:是否要在程序中定义rect的结构体, 怎么样将rect中得到的值赋值给自己设的x上 最好也给个例子

BOOL GetClientRect(
HWND hWnd,
LPRECT lpRect
);
hWnd : 要得到坐标的区域所在窗口的句柄
lpRect : 保存坐标信息的RECT 结构体指针

要先声明一个RECT结构,然后将地址传给lpRect

例如:
RECT rect;
GetClientRect(hWnd, &rect);

rect: left, top 均为0, right , bottom 分别为区域长与宽

返回值非0 表示成功

传给x: x = rect.right 或者 x = rect.right - rect.left(为什么加上 -rect.left呢, 纯属习惯)

注: 工具栏也属于client 范围
----------------------------------------------

另外, 经常会遇到这样的问题: 想设置client 区域为固定大小,例如:640*480

这时,不能简单的在调用SetWindowPos时指定cx, cy 为 640, 480

因为窗口长还包括边框, 宽包括边框和标题栏, 所以还要调用
GetSystemMetrics, 分别得到SM_CXFRAME, SM_CYFRAME, SM_CYCATION的值, 然后将cx, cy 分别加上它们才行

win32常规编程就是楼上所说,用MFC的话,有个类CRect可以代替RECT;
MFC下:
BOOL GetClientRect(
LPRECT lpRect
);
比如,你定义了一个CRect rect;
就可以GetClientRect(&rect);或GetClientRect(rect);
用MSDN查CRect.看他的成员变量,用宽,高,顶,底,左上点,右上点等等。