通过SetWindowPos改变窗体的位置,每一步的轨迹怎么都在?

_Sodo_ 2011-03-15 05:45:03
我本来要做窗体的拉伸、放大、缩小效果,无边框的,但是拉伸过程中有问题,后来我就去测这个问题,具体情况如下:

我在窗体上创建了一个Button,每点击一下这个Button就让窗体 X,Y坐标移动30坐标点,然后我点10下移动10步,就变10个窗体了,我很诧异,前面9个都是假的,还有我在OnPaint加断点也执行呀,但是为什么不刷新呢?不解,大侠们救命了。

void CControlLayeredPanel::OnBnClickedButton1()
{
//改变窗体的位置
::SetWindowPos(mobilePanel->GetSafeHwnd(),HWND_BOTTOM,letf,top,m_rectInfo.Width(),m_rectInfo.Height(),SWP_NOZORDER|SWP_NOSIZE|SWP_SHOWWINDOW);

// TODO: 在此添加控件通知处理程序代码
}
...全文
192 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2011-04-09
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
jackiesen 2011-03-17
  • 打赏
  • 举报
回复
UpDatedata(FALSE);不知道对不对!
_Sodo_ 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 fishion 的回复:]

用了SetLayeredWindowAttributes来设置窗口透明的?如果是的知那就是这个东西的问题了,反正你都是全屏透明显示的,那就不要这个控件了,直接用一个尺寸为300*300的对话框来加入尺寸为300*300的自定义控件
[/Quote]

我要在一个全透明背景上创建一个透明控件,这个透明控件上承载一个半透明窗体,这个半透明窗体周围有8个顶点支持放大缩小,还有删除,而且支持拖拽,我用窗体的话也要全透明,不过我可以试一试
fishion 2011-03-16
  • 打赏
  • 举报
回复
用了SetLayeredWindowAttributes来设置窗口透明的?如果是的知那就是这个东西的问题了,反正你都是全屏透明显示的,那就不要这个控件了,直接用一个尺寸为300*300的对话框来加入尺寸为300*300的自定义控件
向立天 2011-03-16
  • 打赏
  • 举报
回复
OnBnClickedButton1()的最后加一句
Invalidate();
_Sodo_ 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 singwhatiwanna 的回复:]

Invalidate使窗口区域无效
接着updatewindow立即刷新
[/Quote]

不行啊大哥,我快崩溃了。
xiaohuh421 2011-03-15
  • 打赏
  • 举报
回复
直接用个无框架的可调整大小的对话框能轻松搞定吧,那些放大缩小都是原生的,什么都不做就OK了
singwhatiwanna 2011-03-15
  • 打赏
  • 举报
回复
Invalidate使窗口区域无效
接着updatewindow立即刷新
upc_xiaowei 2011-03-15
  • 打赏
  • 举报
回复
移动窗口的命令不是movewindow吗
_Sodo_ 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 huangcheng90 的回复:]

C/C++ code

void CControlLayeredPanel::OnBnClickedButton1()
{
//改变窗体的位置
CRect rectWnd;
GetWindowRect(&rectWnd);
::SetWindowPos(GetSafeHwnd(),HWND_BOTTOM,rectWnd.left+30,rectWnd.top+30,rectWnd.……
[/Quote]

哥,我也是用的2010,不过这个窗体是我自己注册的,然后动态创建,动态创建时指定了一个父类,我在父类里创建了一个Button,在Button的响应函数里改变窗体的位置,确实出现这样的情况,我也很诧异。

_Sodo_ 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 huangcheng90 的回复:]

C/C++ code

void CControlLayeredPanel::OnBnClickedButton1()
{
//改变窗体的位置
CRect rectWnd;
GetWindowRect(&rectWnd);
::SetWindowPos(GetSafeHwnd(),HWND_BOTTOM,rectWnd.left+30,rectWnd.top+30,rectWnd.……
[/Quote]

我的坐标点没有问题,在函数体内我给赋值了,上面没写,移动的位置也对。
_Sodo_ 2011-03-15
  • 打赏
  • 举报
回复
各位大哥不行呀...
Dreadnought 2011-03-15
  • 打赏
  • 举报
回复

void CControlLayeredPanel::OnBnClickedButton1()
{
//改变窗体的位置
CRect rectWnd;
GetWindowRect(&rectWnd);
::SetWindowPos(GetSafeHwnd(),HWND_BOTTOM,rectWnd.left+30,rectWnd.top+30,rectWnd.Width(),rectWnd.Height(),SWP_NOZORDER|SWP_NOSIZE|SWP_SHOWWINDOW);

// TODO: 在此添加控件通知处理程序代码
}

Visual Studio 2010运行正常.没有你说的假窗体
lyingbo 2011-03-15
  • 打赏
  • 举报
回复
SetWindowPos之后invaldate一下
lj2lxm 2011-03-15
  • 打赏
  • 举报
回复
Invalidate(TRUE);
lj2lxm 2011-03-15
  • 打赏
  • 举报
回复
invalite()刷新一下

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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