CStatic 派生类的 setwindowpos 和 movewindow 无效问题

xjb2001 2008-12-01 08:43:28
我做了一个 cstatic 的派生类
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个方法,都没起作用。

请问,这是为什么?


...全文
278 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ilovedrv 2008-12-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xjb2001 的回复:]
我用一个 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)这样开头的坐标,那么,大小就不会错误

我被弄糊涂了
[/Quote]

楼主始终要注意,对于任意一个窗口,他有两个坐标体系,一个是它自身,一般范围就是 (0,0, width, height),而另外一个就是他自身相对以其父窗口的的坐标;

你创建窗口的时候,当然要输入其在父窗口中的坐标啊
xjb2001 2008-12-02
  • 打赏
  • 举报
回复
大概的意思是明白了,但还是有些不清楚

假设,我要在 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 是有滚动条的。
xuxingok 2008-12-02
  • 打赏
  • 举报
回复
up
cnzdgs 2008-12-01
  • 打赏
  • 举报
回复
GetClientRect获得的矩形是相对于客户区的,左上角坐标一定是(0,0)。
CRect构造函数的4个参数分别是左、上、右、下,你这样给参数,宽度就是300-100=200。
玉古云投 2008-12-01
  • 打赏
  • 举报
回复
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.
phisherr 2008-12-01
  • 打赏
  • 举报
回复
CRect rect(100,100,300,300);

看看构造函数的参数,这个边长的确的是200
xjb2001 2008-12-01
  • 打赏
  • 举报
回复
我用一个 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)这样开头的坐标,那么,大小就不会错误

我被弄糊涂了
yuhudie203 2008-12-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xjb2001 的回复:]
movewindow 是有效的,但是,很奇怪,送入的参数值是 rect(top=100,bottom=300,left=100,right=300)

movewindow 后,我 getclientrect ,发现值是
rect(top=0,bottom=200,left=0,right=200) 

怎么会这样?
[/Quote]
GetClientRect(rect)得到当前static的大小 起始坐标为(0,0)
xjb2001 2008-12-01
  • 打赏
  • 举报
回复
movewindow 是有效的,但是,很奇怪,送入的参数值是 rect(top=100,bottom=300,left=100,right=300)

movewindow 后,我 getclientrect ,发现值是
rect(top=0,bottom=200,left=0,right=200) 

怎么会这样?
cnzdgs 2008-12-01
  • 打赏
  • 举报
回复
直接MoveWindow(rect)就可以了。
xjb2001 2008-12-01
  • 打赏
  • 举报
回复
我重写了 onsize事件,发现 SetNewPos 根本没有引发 ONSIZE事件??


奇怪。。。。
内容概要:本文围绕“考虑电能交互的冷热电区域多微网系统双层多场景协同优化配置”的Matlab代码实现展开,提出一种结合电能交互机制的双层优化模型,用于解决冷、热、电多能耦合背景下多微网系统的协同规划与运行问题。研究采用多场景分析方法应对可再生能源出力与负荷需求的不确定性,通过上层规划设备容量配置与下层优化多时段运行策略的联动,提升系统在复杂环境下的经济性、鲁棒性与能源利用效率。所提供的Matlab代码集成了建模、求解(如YALMIP+CPLEX)与结果可视化全流程,涵盖场景生成与削减、双层优化结构设计及多能流协同调度等关键技术环节,为综合能源系统优化提供了完整的算法实现与技术参考。; 适合人群:具备电力系统、综合能源系统或优化建模背景,熟悉Matlab编程与数学规划方法,正在从事相关领域科研或工程设计工作的研究生、高校研究人员及能源行业技术人员。; 使用场景及目标:①开展冷热电联供(CCHP)多微网系统的容量规划与运行优化研究;②支撑含分布式能源、储能及多能转换设备的综合能源系统多目标、多场景优化建模;③学习与复现双层优化、分布鲁棒优化及场景分析等先进优化方法在能源系统中的实际应用。; 阅读建议:建议结合配套文献与代码同步研读,重点理解双层模型的构建逻辑、变量耦合关系与求解技巧,关注场景生成方法与YALMIP调用细节,通过调整参数、修改目标函数等方式进行仿真实验,以深化对系统优化机理的掌握。
内容概要:本文系统研究了单相逆变器闭环控制下的PWM调制模型,基于Simulink平台构建完整的逆变电路仿真系统,涵盖主电路拓扑、闭环控制器设计、脉宽调制信号生成及输出滤波等关键环节。通过引入比例积分(PI)反馈控制策略,实现对输出电压幅值与波形的精确调节,有效抑制负载扰动带来的影响,提升系统的动态响应能力与稳态精度。仿真过程详细展示了系统建模、参数整定及性能验证的全流程,重点分析了闭环控制在改善输出正弦波质量、降低谐波畸变率方面的优势,为电力电子逆变装置的研发与优化提供了可靠的理论支撑与实践参考。; 适合人群:具备电力电子技术、自动控制原理基础知识及相关仿真经验的高校研究生、科研人员,以及从事新能源发电、不间断电源(UPS)、微电网、电动汽车等领域的工程技术人员。; 使用场景及目标:①掌握单相逆变器闭环控制系统的设计与建模方法;②深入理解PWM技术与反馈控制在逆变系统中的协同工作机制;③通过Simulink仿真平台完成系统搭建与参数调试,服务于课程设计、毕业课题、科研项目或工业产品开发中的逆变器控制算法验证。; 阅读建议:建议结合经典控制理论与电力电子变换技术同步学习,动手复现仿真模型并尝试调整PI控制器参数、载波频率等关键变量,观察其对系统稳定性与输出性能的影响,从而深化对控制机理的理解,并为进一步研究并网逆变、多电平逆变等复杂系统打下坚实基础。

16,550

社区成员

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

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

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