MFC中怎么用SetWindowPos()设置窗口的初始位置

彗星撞地球 2011-05-12 01:19:22
本人菜鸟,在论坛里也看了些SetWindowPos()函数的使用的帖子,但是看不明白,特来讨教! 我是用MFC做的单文档设计,建立2个非模态的对话框,分别在菜单栏里设了2个菜单按钮与之相关联,运行程序之后 分别点了2个菜单按钮后2个对话框的弹出位置相同重合在了一起,我想实现 运行后 2个对话框在不同的位置,请教怎么用SetWindowPos()函数来实现,求实例!
...全文
1785 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuayi112 2011-07-07
  • 打赏
  • 举报
回复
学习了,我也在看这个函数
彗星撞地球 2011-05-12
  • 打赏
  • 举报
回复
结贴了~~~放分了,谢谢大家回帖!
寒冰雪 2011-05-12
  • 打赏
  • 举报
回复
注意大小写,如果在OnInitDialog里,可以用SetWindowPos(…),或者::SetWindowPos(xxxdlg.GetSafeHwnd(), …)试下。。
分号 2011-05-12
  • 打赏
  • 举报
回复
我试了的,没问题啊,要不你把项目重新生成一遍看看。
分号 2011-05-12
  • 打赏
  • 举报
回复
不是吧,这就奇了怪了,SetWindowPos是cwnd的方法啊,而cdialog又是继承自cwnd,怎么会出现c2065呢?
彗星撞地球 2011-05-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 novaliang 的回复:]
你确定你是建立的是MFC对话框应用程序?你确定你用的是xxxdlg.setwindowpos而不是xxxdlg::setwindowpos?
直接在你的OnIntDialog中使用SetWindowPos,不用带xxxdlg在前面。
[/Quote]
我确定用的是xxxdlg::setwindowpos
直接在OnIntDialog中使用SetWindowPos,仍然报错,error C2065: 'setwindowpos' : undeclared identifier SetWindowPos是不是要在哪定义
分号 2011-05-12
  • 打赏
  • 举报
回复
你确定你是建立的是MFC对话框应用程序?你确定你用的是xxxdlg.setwindowpos而不是xxxdlg::setwindowpos?
直接在你的OnIntDialog中使用SetWindowPos,不用带xxxdlg在前面。
SetWindowPos( const CWnd* pWndInsertAfter,
int x, int y,
int cx, int cy,
UINT nFlags);
pWndInsertAfter 标识了在Z轴次序上位于这个CWnd对象之前的CWnd对象。这个参数可以是指向CWnd对象的指针,也可以是指向下列值的指针:
wndBottom 将窗口放在Z轴次序的底部。如果这个CWnd是一个顶层窗口,则窗口将失去它的顶层状态;系统将这个窗口放在其它所有窗口的底部。
wndTop 将窗口放在Z轴次序的顶部。
wndTopMost 将窗口放在所有非顶层窗口的上面。这个窗口将保持它的顶层位置,即使它失去了活动状态。
wndNoTopMost 将窗口重新定位到所有非顶层窗口的顶部(这意味着在所有的顶层窗口之下)。这个标志对那些已经是非顶层窗口的窗口没有作用。
x 指定了窗口左边的新位置。
y 指定了窗口顶部的新位置。
cx 指定了窗口的新宽度。
cy 指定了窗口的新高度。
nFlags 指定了大小和位置选项。这个参数可以是下列值的组合:
SWP_DRAWFRAME 围绕窗口画出边框(在创建窗口的时候定义)。
SWP_FRAMECHANGED 向窗口发送一条WM_NCCALCSIZE消息,即使窗口的大小不会改变。如果没有指定这个标志,则仅当窗口的大小发生变化时才发送WM_NCCALCSIZE消息。
SWP_HIDEWINDOW 隐藏窗口。
SWP_NOACTIVATE 不激活窗口。如果没有设置这个标志,则窗口将被激活并移动到顶层或非顶层窗口组(依赖于pWndInsertAfter参数的设置)的顶部。
SWP_NOCOPYBITS 废弃这个客户区的内容。如果没有指定这个参数,则客户区的有效内容将被保存,并在窗口的大小或位置改变以后被拷贝回客户区。
SWP_NOMOVE 保持当前的位置(忽略x和y参数)。
SWP_NOOWNERZORDER 不改变拥有者窗口在Z轴次序上的位置。
SWP_NOREDRAW 不重画变化。如果设置了这个标志,则不发生任何种类的变化。这适用于客户区、非客户区(包括标题和滚动条)以及被移动窗口覆盖的父窗口的任何部分。当这个标志被设置的时候,应用程序必须明确地无效或重画要重画的窗口和父窗口的任何部分。
SWP_NOREPOSITION 与SWP_NOOWNERZORDER相同。
SWP_NOSENDCHANGING 防止窗口接收WM_WINDOWPOSCHANGING消息。
SWP_NOSIZE 保持当前的大小(忽略cx和cy参数)。
SWP_NOZORDER 保持当前的次序(忽略pWndInsertAfter)。
SWP_SHOWWINDOW 显示窗口。
彗星撞地球 2011-05-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xuddk727 的回复:]
xxxdlg::setwindowpos(&wndTopmost,0,0,0,0,SWP_NOMVE|SWP_NOZIE);
[/Quote]
error C2039: 'setwindowpos' : is not a member of 'CDlgp1' 我把XXXdlg换成了我的对话框类,出错啊
许文君 2011-05-12
  • 打赏
  • 举报
回复
xxxdlg::setwindowpos(&wndTopmost,0,0,0,0,SWP_NOMVE|SWP_NOZIE);
彗星撞地球 2011-05-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 starytx 的回复:]
在对话框的OnIntDialog中使用SetWindowPos
[/Quote]
我知道在OnIntDialog中使用SetWindowPos,我是菜鸟懂的不多,想求SetWindowPos的例子来作为参考,我搜索到的其他关于SetWindowPos的帖子讲的都是SetWindowPos的原理,我想求实例!
starytx 2011-05-12
  • 打赏
  • 举报
回复
在对话框的OnIntDialog中使用SetWindowPos

16,473

社区成员

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

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

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