m_show = new CImageShow();
m_show->Create("d:\\IMG_1518.JPG",WS_VISIBLE|WS_CHILD|SS_BITMAP|SS_CENTER,rect,this);
创建后显示正常
然后我调用派生类里面的方法
void CShowImg::SetNewPos(CRect rect)
{
CPoint p1,p2;
CRect ttt;
p1 = rect.TopLeft();
p2 = rect.BottomRight();
if (GetSafeHwnd())
{
SetWindowPos(NULL, p1.x, p1.y, p2.x-p1.x, p2.y-p1.y,SWP_ASYNCWINDOWPOS);
MoveWindow(rect,true);
}
}
结果发现,这个类纹丝不动。也就是说,上面2个方法,都没起作用。
请问,这是为什么?
11 个解决方案
#1
我重写了 onsize事件,发现 SetNewPos 根本没有引发 ONSIZE事件??
奇怪。。。。
奇怪。。。。
#2
直接MoveWindow(rect)就可以了。
#3
movewindow 是有效的,但是,很奇怪,送入的参数值是 rect(top=100,bottom=300,left=100,right=300)
movewindow 后,我 getclientrect ,发现值是
rect(top=0,bottom=200,left=0,right=200)
怎么会这样?
movewindow 后,我 getclientrect ,发现值是
rect(top=0,bottom=200,left=0,right=200)
怎么会这样?
#4
GetClientRect(rect)得到当前static的大小 起始坐标为(0,0)
#5
我用一个 cstatic 类来实验
CRect rect(100,100,300,300);
mystatic.Create("d:\\IMG_1518.JPG",WS_VISIBLE|WS_CHILD,rect,this,9988);
创建后发现,这个窗体w 和 H,其实是 200 ,而不是 300
创建的大小都没对
但是,送入的rect(0,0,x,y)这样开头的坐标,那么,大小就不会错误
我被弄糊涂了
CRect rect(100,100,300,300);
mystatic.Create("d:\\IMG_1518.JPG",WS_VISIBLE|WS_CHILD,rect,this,9988);
创建后发现,这个窗体w 和 H,其实是 200 ,而不是 300
创建的大小都没对
但是,送入的rect(0,0,x,y)这样开头的坐标,那么,大小就不会错误
我被弄糊涂了
#6
CRect rect(100,100,300,300);
看看构造函数的参数,这个边长的确的是200
看看构造函数的参数,这个边长的确的是200
#7
CRect(
int l,
int t,
int r,
int b );
l
Specifies the left position of CRect.
t
Specifies the top of CRect.
r
Specifies the right position of CRect.
b
Specifies the bottom of CRect.
int l,
int t,
int r,
int b );
l
Specifies the left position of CRect.
t
Specifies the top of CRect.
r
Specifies the right position of CRect.
b
Specifies the bottom of CRect.
#8
GetClientRect获得的矩形是相对于客户区的,左上角坐标一定是(0,0)。
CRect构造函数的4个参数分别是左、上、右、下,你这样给参数,宽度就是300-100=200。
CRect构造函数的4个参数分别是左、上、右、下,你这样给参数,宽度就是300-100=200。
#9
楼主始终要注意,对于任意一个窗口,他有两个坐标体系,一个是它自身,一般范围就是 (0,0, width, height),而另外一个就是他自身相对以其父窗口的的坐标;
你创建窗口的时候,当然要输入其在父窗口中的坐标啊
#10
up
#11
大概的意思是明白了,但还是有些不清楚
假设,我要在 cscrollview 的 (100,100) 这个坐标,建立一个 w,h==300的 cstatic
我 create 的时候,要怎么输入?我输入的 这个 rect 就是希望的在view 出现的坐标啊。
CRect rect(100,100,300,300);
mystatic.Create("d:\\IMG_1518.JPG",WS_VISIBLE|WS_CHILD,rect,this,9988);
如果是其他的类,比如 flash类,这样输入,就会是我想要的结果
另外,如何才能获取到,cstatic 的屏幕坐标,我 move 的时候,是否应该送入转换后的 屏幕地址?因为我的 cscrollview 是有滚动条的。
假设,我要在 cscrollview 的 (100,100) 这个坐标,建立一个 w,h==300的 cstatic
我 create 的时候,要怎么输入?我输入的 这个 rect 就是希望的在view 出现的坐标啊。
CRect rect(100,100,300,300);
mystatic.Create("d:\\IMG_1518.JPG",WS_VISIBLE|WS_CHILD,rect,this,9988);
如果是其他的类,比如 flash类,这样输入,就会是我想要的结果
另外,如何才能获取到,cstatic 的屏幕坐标,我 move 的时候,是否应该送入转换后的 屏幕地址?因为我的 cscrollview 是有滚动条的。
#1
我重写了 onsize事件,发现 SetNewPos 根本没有引发 ONSIZE事件??
奇怪。。。。
奇怪。。。。
#2
直接MoveWindow(rect)就可以了。
#3
movewindow 是有效的,但是,很奇怪,送入的参数值是 rect(top=100,bottom=300,left=100,right=300)
movewindow 后,我 getclientrect ,发现值是
rect(top=0,bottom=200,left=0,right=200)
怎么会这样?
movewindow 后,我 getclientrect ,发现值是
rect(top=0,bottom=200,left=0,right=200)
怎么会这样?
#4
GetClientRect(rect)得到当前static的大小 起始坐标为(0,0)
#5
我用一个 cstatic 类来实验
CRect rect(100,100,300,300);
mystatic.Create("d:\\IMG_1518.JPG",WS_VISIBLE|WS_CHILD,rect,this,9988);
创建后发现,这个窗体w 和 H,其实是 200 ,而不是 300
创建的大小都没对
但是,送入的rect(0,0,x,y)这样开头的坐标,那么,大小就不会错误
我被弄糊涂了
CRect rect(100,100,300,300);
mystatic.Create("d:\\IMG_1518.JPG",WS_VISIBLE|WS_CHILD,rect,this,9988);
创建后发现,这个窗体w 和 H,其实是 200 ,而不是 300
创建的大小都没对
但是,送入的rect(0,0,x,y)这样开头的坐标,那么,大小就不会错误
我被弄糊涂了
#6
CRect rect(100,100,300,300);
看看构造函数的参数,这个边长的确的是200
看看构造函数的参数,这个边长的确的是200
#7
CRect(
int l,
int t,
int r,
int b );
l
Specifies the left position of CRect.
t
Specifies the top of CRect.
r
Specifies the right position of CRect.
b
Specifies the bottom of CRect.
int l,
int t,
int r,
int b );
l
Specifies the left position of CRect.
t
Specifies the top of CRect.
r
Specifies the right position of CRect.
b
Specifies the bottom of CRect.
#8
GetClientRect获得的矩形是相对于客户区的,左上角坐标一定是(0,0)。
CRect构造函数的4个参数分别是左、上、右、下,你这样给参数,宽度就是300-100=200。
CRect构造函数的4个参数分别是左、上、右、下,你这样给参数,宽度就是300-100=200。
#9
楼主始终要注意,对于任意一个窗口,他有两个坐标体系,一个是它自身,一般范围就是 (0,0, width, height),而另外一个就是他自身相对以其父窗口的的坐标;
你创建窗口的时候,当然要输入其在父窗口中的坐标啊
#10
up
#11
大概的意思是明白了,但还是有些不清楚
假设,我要在 cscrollview 的 (100,100) 这个坐标,建立一个 w,h==300的 cstatic
我 create 的时候,要怎么输入?我输入的 这个 rect 就是希望的在view 出现的坐标啊。
CRect rect(100,100,300,300);
mystatic.Create("d:\\IMG_1518.JPG",WS_VISIBLE|WS_CHILD,rect,this,9988);
如果是其他的类,比如 flash类,这样输入,就会是我想要的结果
另外,如何才能获取到,cstatic 的屏幕坐标,我 move 的时候,是否应该送入转换后的 屏幕地址?因为我的 cscrollview 是有滚动条的。
假设,我要在 cscrollview 的 (100,100) 这个坐标,建立一个 w,h==300的 cstatic
我 create 的时候,要怎么输入?我输入的 这个 rect 就是希望的在view 出现的坐标啊。
CRect rect(100,100,300,300);
mystatic.Create("d:\\IMG_1518.JPG",WS_VISIBLE|WS_CHILD,rect,this,9988);
如果是其他的类,比如 flash类,这样输入,就会是我想要的结果
另外,如何才能获取到,cstatic 的屏幕坐标,我 move 的时候,是否应该送入转换后的 屏幕地址?因为我的 cscrollview 是有滚动条的。