自绘控件中
CRect rect;
GetWindowRect(&rect);
ScreenToClient(&rect);
rect值是(-1,-1,25,25) 我以为是(0,0,26,26)喃 为什么会出现这种情况?
CRect rect;
GetWindowRect(&rect);
ScreenToClient(&rect);
rect值是(-1,-1,25,25) 我以为是(0,0,26,26)喃 为什么会出现这种情况?
屏幕坐标是相对于屏幕左上角的,而窗口坐标是相对于窗客户区左上角的,即窗口title标题下面,
MFC下,有些函数使用窗口坐标,有些使用屏幕坐标,使用时要分清。
把屏幕左边转换成窗口坐标,相对于窗口坐标零点,坐标在原点的前面,所以当然是负值啦。
然后我做了个实验,创建一个对话框程序,在OnInitDialog中执行
CRect rect;
GetWindowRect(&rect);
ScreenToClient(&rect);
结果是rect.left=-3;rect.top=-39也就是说ScreenTOClient的原点其实是titile的左上角,不是客户区左上角
我自绘哪个控件时Cstatic,应该它的客户区和最左上角有一个像素空白,所以是-1
| |------------||
| | ||
| |------------||
|---------------|
外面的框架,是窗体,里面的框架,是客户区。
GetWindowRect(&rect)的原点坐标,是电脑显示器左上角(0,0);
ScreenToClient(&rect)的原点坐标,是客户区的左上角(0,0),注意,是客户区,而不是窗体;
(以X轴方向向右,Y轴方向向下为正)
同时,GetWindowRect获取的坐标,是窗体相对于 原点的坐标。
先谢谢了, 但是,如果如你说说GetWindowRect(&rect)原点是显示器左上角,那为什么 我新建一个对话框程序 在OnInitDialog中执行
CRect rect;
GetWindowRect(&rect);
结果会是
rect.left=0,rect.top=0???
BOOL GetWindowRect(
HWND hWnd, // handle to window
LPRECT lpRect // address of structure for window coordinates
);
其次,当对话框创建完毕后,他的位置就被置中了。
你可以试下(我刚试了下),在OnInitDialog和按钮事件里,都添加
CRect rc1,rc2,rc3,rc4;
GetWindowRect(rc1);
GetClientRect(rc2);
rc3=rc1;
ScreenToClient(rc3);
rc4=rc2;
ClientToScreen(rc4);
监视下,就知道这几个函数的作用了。
所以,并不是函数有问题,只是窗体的位置发生了改变而已。