得到MoveWindow的高和宽

eternalyen 2008-09-08 04:09:18
有没有什么函数可以得到MoveWindow中的高和宽
...全文
220 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
THCNC 2008-09-08
  • 打赏
  • 举报
回复
实在不行,
1,你给CCurve增加一个Redraw(int cx, int cy)函数,这个函数里面根据cx,cy重绘你的图形;
2,在你MoveWindow()后,调用Redraw(int cx, int cy)实现重绘,cx,cy就是你MoveWindow()函数的参数cx,cy
这样总行了吧
eternalyen 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 fuzigege 的回复:]
顶一下19楼。
楼主的意图可能是这样,CMainDialog是父窗口,而从CWnd继承下来的CCurve是子窗口。
在CMainDialog的OnCreate函数中,创建子窗口,并绑定到成员变量m_WndCurve上去。

父窗口要响应WM_SIZE消息,然后根据一定的策略计算出子窗口的m_WndCurve的大小,比如是不是全部覆盖在父窗口的客户区上,
或者只是覆盖在下半部。这个计算过程基本上就确定了子窗口的位置和大小,于是楼主可以针对子窗口调用MoveWidnow,把…
[/Quote]
这个我不是没试过
CCurve::OnSize(UINT nType, int cx, int cy)
int a = cx;
int b = cy;
跟的时候 a,b值都是零
fuzigege 2008-09-08
  • 打赏
  • 举报
回复
顶一下19楼。
楼主的意图可能是这样,CMainDialog是父窗口,而从CWnd继承下来的CCurve是子窗口。
在CMainDialog的OnCreate函数中,创建子窗口,并绑定到成员变量m_WndCurve上去。

父窗口要响应WM_SIZE消息,然后根据一定的策略计算出子窗口的m_WndCurve的大小,比如是不是全部覆盖在父窗口的客户区上,
或者只是覆盖在下半部。这个计算过程基本上就确定了子窗口的位置和大小,于是楼主可以针对子窗口调用MoveWidnow,把子窗口移动到指定位置。

子窗口也要响应WM_SIZE消息,就是楼上的做法,子窗口在自己的OnSize中重绘图形。

THCNC 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fox000002 的回复:]


这跟 MoveWindow 没有关系

CCurve 在什么上画,得到它的大小就行了,然后在 OnSize 时重新获取,更新高度和宽度的值
[/Quote]

在CCurve类中响应WM_SIZE消息
CCurve::OnSize(UINT nType, int cx, int cy)
{
//cx, cy就是 宽度和高度值
//你根据cx, cy就可以重新绘制了
}
wutaihua 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 eternalyen 的回复:]
引用 15 楼 eternalyen 的回复:
引用 14 楼 douzexin1111 的回复:
引用 13 楼 eternalyen 的回复:
用GetWindowRect得到的值也不对


你别直接GetWindowRect,这样得到的不是你想要的大小,用CCurve的对象,比如说:m_Curve->GetWindowRect(),你再试试。


试了下这个,内存溢出。。。

不用指针,用对象 m_curve.GetWindowRect(&rect);得到的rect(a,b,c,d) 中的值还是不对
和在CCurve类里用this->GetWindowRe…
[/Quote]

楼主,我忽然想问你,你在父窗口初始化的时候create了这个子窗口了吗?

比如,我这有个例子
在父窗口的OnInitDialog()里面
m_curve.Create(IDD_CONTROL_BASIC, this);

eternalyen 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 eternalyen 的回复:]
引用 14 楼 douzexin1111 的回复:
引用 13 楼 eternalyen 的回复:
用GetWindowRect得到的值也不对


你别直接GetWindowRect,这样得到的不是你想要的大小,用CCurve的对象,比如说:m_Curve->GetWindowRect(),你再试试。


试了下这个,内存溢出。。。
[/Quote]
不用指针,用对象 m_curve.GetWindowRect(&rect);得到的rect(a,b,c,d) 中的值还是不对
和在CCurve类里用this->GetWindowRect()得到的值是一样的
wutaihua 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 douzexin1111 的回复:]
引用 13 楼 eternalyen 的回复:
用GetWindowRect得到的值也不对


你别直接GetWindowRect,这样得到的不是你想要的大小,用CCurve的对象,比如说:m_Curve->GetWindowRect(),你再试试。
[/Quote]
这样他应该将这个函数写在父窗口中,就是那个Dialog中

我也写过类似的程序,都成功了,对楼主的情况确实比较费解。

希望楼主解决后,可以将标准答案贴出来,我想观摩学习下
eternalyen 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 douzexin1111 的回复:]
引用 13 楼 eternalyen 的回复:
用GetWindowRect得到的值也不对


你别直接GetWindowRect,这样得到的不是你想要的大小,用CCurve的对象,比如说:m_Curve->GetWindowRect(),你再试试。
[/Quote]

试了下这个,内存溢出。。。
douzexin1111 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 eternalyen 的回复:]
用GetWindowRect得到的值也不对
[/Quote]

你别直接GetWindowRect,这样得到的不是你想要的大小,用CCurve的对象,比如说:m_Curve->GetWindowRect(),你再试试。
eternalyen 2008-09-08
  • 打赏
  • 举报
回复
用GetWindowRect得到的值也不对
编程夜猫 2008-09-08
  • 打赏
  • 举报
回复
WM_SIZE事件中的
LOWORD(lParam)
HIWORD(lParam)
可以得到高和宽
eternalyen 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wutaihua 的回复:]
引用 6 楼 eternalyen 的回复:
那我说详细点,我写了一个类CCurve,是用来画曲线的

在Dialog中Create,然后MoveWindow()到Dialog界面上

我在CCurve中的高度和宽度现在是写死的,我想把它定义成一个变量,这个变量值根据MoveWindow()中后两个参数来确定


在CCurve类中添加WM_SIZE消息响应

响应函数如下(假设CCurve m_WndCurve)

OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, …
[/Quote]
这个我试过,得到的rect为(0,0,0,0)
wutaihua 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 eternalyen 的回复:]
那我说详细点,我写了一个类CCurve,是用来画曲线的

在Dialog中Create,然后MoveWindow()到Dialog界面上

我在CCurve中的高度和宽度现在是写死的,我想把它定义成一个变量,这个变量值根据MoveWindow()中后两个参数来确定
[/Quote]

在CCurve类中添加WM_SIZE消息响应

响应函数如下(假设CCurve m_WndCurve)

OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

CRect rect;
GetClientRect(&rect);
MoveWindow(rect.left, rect.top + 30, cx - 200, rect.Height(), TRUE);
}
eternalyen 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fox000002 的回复:]
引用 6 楼 eternalyen 的回复:
那我说详细点,我写了一个类CCurve,是用来画曲线的

在Dialog中Create,然后MoveWindow()到Dialog界面上

我在CCurve中的高度和宽度现在是写死的,我想把它定义成一个变量,这个变量值根据MoveWindow()中后两个参数来确定



这跟 MoveWindow 没有关系

CCurve 在什么上画,得到它的大小就行了,然后在 OnSize 时重新获取,更新高度和宽度的值
[/Quote]
fox000002 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 eternalyen 的回复:]
那我说详细点,我写了一个类CCurve,是用来画曲线的

在Dialog中Create,然后MoveWindow()到Dialog界面上

我在CCurve中的高度和宽度现在是写死的,我想把它定义成一个变量,这个变量值根据MoveWindow()中后两个参数来确定

[/Quote]

这跟 MoveWindow 没有关系

CCurve 在什么上画,得到它的大小就行了,然后在 OnSize 时重新获取,更新高度和宽度的值
eternalyen 2008-09-08
  • 打赏
  • 举报
回复
我就想有没有一个函数,可以得到自己被移动到windows界面上的宽度和高度
eternalyen 2008-09-08
  • 打赏
  • 举报
回复
那我说详细点,我写了一个类CCurve,是用来画曲线的

在Dialog中Create,然后MoveWindow()到Dialog界面上

我在CCurve中的高度和宽度现在是写死的,我想把它定义成一个变量,这个变量值根据MoveWindow()中后两个参数来确定
gaoxiaowei 2008-09-08
  • 打赏
  • 举报
回复
Up 2楼
wutaihua 2008-09-08
  • 打赏
  • 举报
回复
楼主说的应该是movewindow里面的参数吧

movewindow的两种情况
1、
void MoveWindow(
int x,
int y,
int nWidth,
int nHeight,
BOOL bRepaint = TRUE
);
2、
void MoveWindow(
LPCRECT lpRect,
BOOL bRepaint = TRUE
);

这两种情况都是通过先获取窗口的大小,然后再使用movewindow来移动。
比如,假设是个button

CButton m_BtnObject;
CRect rect;
m_BtnObject.GetWindowRect(&rect);

假设采用第一个movewindow的话
m_BtnObject.MoveWindow(10, 10, rect.Width(),rect.Height(), TRUE);


假设采用第二种的话,需要填写一个新rect来作为参数

下面是RECT Structure
typedef struct tagRECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT;

再下面就是MSDN上给的赋值例子
//Alternate ways to intialize a RECT structure:

RECT rctA;
rctA.left = 20;
rctA.top = 30;
rctA.right = 180;
rctA.bottom = 230;

RECT rctB = {20,30,180,230};

楼主试验下就知道怎么赋值了,实践出真知

wtfelse 2008-09-08
  • 打赏
  • 举报
回复
The MoveWindow function changes the position and dimensions of the specified window. For a top-level window, the position and dimensions are relative to the upper-left corner of the screen. For a child window, they are relative to the upper-left corner of the parent window's client area.

这个宽度和高度是自己指定的。
加载更多回复(2)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧