xianglitian请进,我用了你的自适应对话框

wzuxian2012 2012-07-14 05:30:11



你好,我用了你的开源代码,非常感谢,但是发现,对于如下情况,不会使用,

我这个界面有3个控件,2个按钮,放在最下面,编辑框放上面。


代码为:
	

//设置控件适配
MakeCtrlFit(GetDlgItem(IDC_EDIT1), 100, NOMOVE, ZOOMXY);
MakeCtrlFit(GetDlgItem(IDOK), 100, MOVEX);
MakeCtrlFit(GetDlgItem(IDCANCEL), 100, MOVEX);


这个代码,当对话框最大话的时候,按钮消失,我百思不得其解。

你有好法子,达到我想要的效果嘛

按钮不需要放大缩小,只需要水平移动,所以用MOVEX是对的的。



...全文
385 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyqok 2012-07-16
  • 打赏
  • 举报
回复
首先感谢xianglitian老师的无私奉献。

(1)我复现了你遇到的问题,这确实有一个bug。

快速反复拖动窗口改变,反复改变窗口大小,就会复现这个问题。
(2)你已经找到了解决问题的方法,但是你还是有点糊涂,不是很清楚,OnPaint 和 OnSize的调用的顺序,以及产生这个问题的原因。问题是拖动的太快了,期间会出现消息来不及相应的情况,强制每次大小改变后都重绘一下窗口。

你错误的代码:
void CAutoFitDlg::OnSize(UINT nType, int cx, int cy)
{
...省略...
Invalidate();
CDialog::OnSize(nType, cx, cy);
}
//正确的代码
void CAutoFitDlg::OnSize(UINT nType, int cx, int cy)
{
...省略...
CDialog::OnSize(nType, cx, cy);
//墨者勤奋:加上解决快速水平拖动改变窗口大小时候不能及时刷新的bug
Invalidate();
}
wzuxian2012 2012-07-16
  • 打赏
  • 举报
回复
请教一下,为什么放在那里不行呢

我昨天找到一个法子解决了,

是在OnSize里对每一个控件进行 GetDlgItem(id)->Invalidate();

但是依然放在CDialog::OnSize();上面,

确实解决了这个难题、


[Quote=引用 17 楼 的回复:]
首先感谢xianglitian老师的无私奉献。

(1)我复现了你遇到的问题,这确实有一个bug。

快速反复拖动窗口改变,反复改变窗口大小,就会复现这个问题。
(2)你已经找到了解决问题的方法,但是你还是有点糊涂,不是很清楚,OnPaint 和 OnSize的调用的顺序,以及产生这个问题的原因。问题是拖动的太快了,期间会出现消息来不及相应的情况,强制每次大小改变后都重绘一下窗口。

……
[/Quote]
wzuxian2012 2012-07-16
  • 打赏
  • 举报
回复
确实有顺序有关系, 非常感谢你及各位回帖,祝你们工作顺利啊

呵呵


[Quote=引用 17 楼 的回复:]
首先感谢xianglitian老师的无私奉献。

(1)我复现了你遇到的问题,这确实有一个bug。

快速反复拖动窗口改变,反复改变窗口大小,就会复现这个问题。
(2)你已经找到了解决问题的方法,但是你还是有点糊涂,不是很清楚,OnPaint 和 OnSize的调用的顺序,以及产生这个问题的原因。问题是拖动的太快了,期间会出现消息来不及相应的情况,强制每次大小改变后都重绘一下窗口。

……
[/Quote]
XNightSky 2012-07-16
  • 打赏
  • 举报
回复
好帖子,收藏
Ginie 2012-07-16
  • 打赏
  • 举报
回复
刚看到你的留言,我下了向大哥的代码测试,用的2008,反复拖拉和最大最小化,并没有出现那个BUG,好奇怪
wzuxian2012 2012-07-15
  • 打赏
  • 举报
回复
他的是2005啊,

晕啊,打不开了,顶多能看看代码,移植可耗时间呢


[Quote=引用 15 楼 的回复:]

我试试看,(我用 xp vc6)。
[/Quote]
schlafenhamster 2012-07-15
  • 打赏
  • 举报
回复
我试试看,(我用 xp vc6)。
wzuxian2012 2012-07-15
  • 打赏
  • 举报
回复
wzuxian2012@126.com

这是我的邮箱
wzuxian2012 2012-07-15
  • 打赏
  • 举报
回复
我目前遇到2个问题



1.解决 最上面,第三个按钮 遮挡第四个按钮的问题

2. 取消,确定这个2个按钮,我希望实现的是 取消按钮放到最下面的最左边

确定放到最下面的最右边,

可是按照他的文章里的说法,怎么改变参数难以实现


[Quote=引用 12 楼 的回复:]

你还在代码,代码就是他的,在他博客,我发链接给你啊

http://blog.csdn.net/xianglitian/article/details/5667015

这是博客,有讲解



这是代码

http://download.csdn.net/detail/xianglitian/2425531



谢谢你了啊

引用 11 楼 的回复:

你……
[/Quote]
wzuxian2012 2012-07-15
  • 打赏
  • 举报
回复
你还在代码,代码就是他的,在他博客,我发链接给你啊

http://blog.csdn.net/xianglitian/article/details/5667015

这是博客,有讲解



这是代码

http://download.csdn.net/detail/xianglitian/2425531



谢谢你了啊

[Quote=引用 11 楼 的回复:]

你的代码能上传吗?
[/Quote]
schlafenhamster 2012-07-15
  • 打赏
  • 举报
回复
你的代码能上传吗?
schlafenhamster 2012-07-15
  • 打赏
  • 举报
回复
我试试看
wzuxian2012 2012-07-15
  • 打赏
  • 举报
回复
晕,

我已经在

OnSize里

我在OnSize中


// 把控件移动到新位置
pWndCtrl->MoveWindow(nLeft, nTop, nWidth, nHeight);
}
}
Invalidate(); //加了这一句了,算是强制刷新吧,结果也不行
CDialog::OnSize(nType, cx, cy);
}

真不知道往哪里添加了
?
向立天 2012-07-15
  • 打赏
  • 举报
回复
你这个问题我遇到过
你强制刷新一下试试
wzuxian2012 2012-07-15
  • 打赏
  • 举报
回复
你好,在本帖子中,我第二次提问,问的是 向立天前辈的 新推荐的文章,并非老版本

代码下载后,用vs2010编译一遍,然后程序开出现 按钮被遮挡的问题,我很是奇怪



[Quote=引用 6 楼 的回复:]

你看看‘向立天’推荐的文章,再说吧
[/Quote]
schlafenhamster 2012-07-15
  • 打赏
  • 举报
回复
你看看‘向立天’推荐的文章,再说吧
wzuxian2012 2012-07-15
  • 打赏
  • 举报
回复
非常感谢你的热心帮助



你好,这是你的代码,

最上面有4个按钮,

中间有4个编辑框

最下面有2个按钮(IDOK, IDCANCEL)



//适配控件
MakeCtrlFit(GetDlgItem(IDC_BUTTON2), 33);
MakeCtrlFit(GetDlgItem(IDC_BUTTON3), 66);
MakeCtrlFit(GetDlgItem(IDC_BUTTON4), 100);

MakeCtrlFit(GetDlgItem(IDC_EDIT1), 0, 0, 50, 50);
MakeCtrlFit(GetDlgItem(IDC_EDIT2), 50, 0, 50, 50);
MakeCtrlFit(GetDlgItem(IDC_EDIT3), 0, 50, 50, 50);
MakeCtrlFit(GetDlgItem(IDC_EDIT4), 50, 50, 50, 50);

//MakeCtrlFit(GetDlgItem(IDOK), 100, 100);
MakeCtrlFit(GetDlgItem(IDOK), 0); //你的博客上面有留言,如何计算,你提供了一段话,说:如果不移动,那么就是0,我把这个值改成0后
//移动且移动到编辑框了。 郁闷死了。

MakeCtrlFit(GetDlgItem(IDCANCEL), 0);

第二个问题:我发现最上面的第三个按钮 有时候会遮挡第四个按钮。 我听人在你博客说,需要调用OnPaint进行重回,

我在OnSize中


// 把控件移动到新位置
pWndCtrl->MoveWindow(nLeft, nTop, nWidth, nHeight);
}
}
Invalidate(); //主要这里,已经重绘了,结果还是会有阴影。
CDialog::OnSize(nType, cx, cy);
}

真不知道如何解决这些问题了



这是图片,我的一个截图,没覆盖所有问题





[Quote=引用 4 楼 的回复:]

不好意思
最近比较忙
没及时看到这个帖子
你采用的是比较老的方法吧
你看看这篇文章
http://blog.csdn.net/xianglitian/article/details/5667015
[/Quote]
向立天 2012-07-15
  • 打赏
  • 举报
回复
不好意思
最近比较忙
没及时看到这个帖子
你采用的是比较老的方法吧
你看看这篇文章
http://blog.csdn.net/xianglitian/article/details/5667015
wzuxian2012 2012-07-14
  • 打赏
  • 举报
回复
坐等大牛解释,谢谢了

15,979

社区成员

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

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