刷新MainFrame背景窗口

副组长 2016-11-29 12:11:27
好久没来了,大家好!
问个问题。MFC多文档,带一些CDockablePane的浮动窗口。想在创建ChildFrame之前获得MainFrame的窗口范围画点东西,要不然一大片空白不好看。可是pMainFrame->GetClientRect()得到的是整个的MainFrame的客户区,也包括了浮动窗口和Bar等区域,怎么才能得到真正的空白部分区域的大小?
还有就是往MainFrame里画的东西,记得以前在OnEraeseBkgroud就可以,现在都被刷新掉了。应该在什么时间画?
...全文
575 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
副组长 2016-12-03
  • 打赏
  • 举报
回复
果不其然,就是一个函数OnEraseMDIClientBackground()搞定,还不用自己计算剩余的空白。 有pDC了,想画就画吧。一并谢谢大家!
副组长 2016-12-03
  • 打赏
  • 举报
回复
同学们不要争嘛! 不管是给出链接的还是具体代码的,都是好同学。对楼主都有参考意义。 来这儿问问题的好处就是可以节省自己的时间和精力,大家加油啊。 OnEraseMDIClientBackground() , 这里是问题所在喽。
lonelyhacker 2016-11-29
  • 打赏
  • 举报
回复
其实我是觉得没必要去算哪个真正的空白处,算出来绘制东西上去,你浮动窗口改变位置的时候呢?不也得重新绘制,总不能改变位置后,原来的位置不绘制吧,那样就会感觉不美观。。个人想法,不喜勿喷哦。

void CMainFrame::OnPaint()
{
	//CPaintDC dc(this); // device context for painting
	// TODO: Add your message handler code here
	// Do not call CMDIFrameWndEx::OnPaint() for painting messages
	CMDIFrameWnd::OnPaint();
	CRect rc;
	CDC dc;
	dc.m_hDC = ::GetDC(this->m_hWndMDIClient);
	CBrush br(RGB(100, 0, 100) );
	dc.SelectObject(&br);
	this->GetClientRect(&rc);
	dc.PatBlt(rc.left,rc.top,rc.Width(),rc.Height(),PATCOPY);
	ReleaseDC(&dc);
}

BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
	// TODO: Add your specialized code here and/or call the base class
	if( (pMsg->hwnd == m_hWndMDIClient) && (pMsg->message == WM_PAINT) )
		PostMessage(WM_PAINT);
	return CMDIFrameWndEx::PreTranslateMessage(pMsg);
}

BOOL CMainFrame::OnEraseMDIClientBackground( CDC *pDC )
{
	//CMDIFrameWnd::OnPaint();
	CRect rc;
	CDC dc;
	dc.m_hDC = ::GetDC(this->m_hWndMDIClient);
	CBrush br(RGB(100, 0, 100) );
	dc.SelectObject(&br);
	this->GetClientRect(&rc);
	dc.PatBlt(rc.left,rc.top,rc.Width(),rc.Height(),PATCOPY);
	ReleaseDC(&dc);
	return TRUE;
}
lonelyhacker 2016-11-29
  • 打赏
  • 举报
回复
BOOL CMainFrame::OnEraseMDIClientBackground( CDC *pDC ) 取代以前的OnEraeseBkgroud
lonelyhacker 2016-11-29
  • 打赏
  • 举报
回复
个人想法:因为不太清楚你要求,比如你在空白处绘制了东西上去,其他浮动窗口移动的时候呢?是否需要重新获取有效空白重新绘制呢?个人想法,未经过实践。
1.GetClientRect()获取整个窗口的客户区。然后获取其他窗口和BAR的区域,把窗口和BAR的区域去除,剩下的就是你所需要的空白处。
2.OnPaint()
void CMainFrame::OnPaint()
{
//CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Do not call CMDIFrameWndEx::OnPaint() for painting messages
CMDIFrameWnd::OnPaint();
CRect rc;
CDC dc;
dc.m_hDC = ::GetDC(this->m_hWndMDIClient);
CBrush br(RGB(100, 0, 100) );
dc.SelectObject(&br);
this->GetClientRect(&rc); //这里需要算你要显示的区域
dc.PatBlt(rc.left-50,rc.top-40,rc.Width()-200,rc.Height()-200,PATCOPY);
ReleaseDC(&dc);
}
3.在PreTranslateMessage中添加下列内容
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if( (pMsg->hwnd == m_hWndMDIClient) && (pMsg->message == WM_PAINT) )
PostMessage(WM_PAINT);
return CMDIFrameWndEx::PreTranslateMessage(pMsg);
}
孤客天涯 2016-11-29
  • 打赏
  • 举报
回复
重载 virtual BOOL OnEraseMDIClientBackground (CDC* pDC);
zengzhuan7760 2016-11-29
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
[quote=引用 5 楼 zengzhuan7760 的回复:] [quote=引用 4 楼 zhao4zhong1 的回复:] 仅供参考: Codejock.Xtreme.Toolkit.Pro.v15.3.1.Full.Source.Retail.Incl.Keymaker-ZWT.rar
这货又来灌水了[/quote] 如果谁真的逐个看过这里面的每行代码,我相信他就不会再问楼主所问的问题了。[/quote] 好比一个学生问老师问题,老师说你把书逐字逐句看一遍就不会有疑问了。那要老师 何用,师者,传达授业解惑。况且你根本不算老师,你可以不回答,我相信来CSDN问问题的人,都是经过自己 思索,还不得解决方法的人,渴望得到帮助的人。我满怀期待的等待答案,看到回答的人是你,我的心就凉了。 我就知道不会从你那里得到解决方案。请不要浪费CSDN的服务器存放你那几字节的无用陈述。 我来CSDN不太长时间,发现基本每个帖子你都回答,但你的回答全部解决不了问题。 我随便点了几个有你的回答,你自己看你都回答的什么玩意 这是什么,浙能解决什么。
引用
请牢记:源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要,重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。
这不是凑数是干啥
引用
空杯心态
谁知道这是什么鬼
引用
Codejock.Xtreme.Toolkit.Pro.v15.3.1.Full.Source.Retail.Incl.Keymaker-ZWT.rar
你好自为之吧
赵4老师 2016-11-29
  • 打赏
  • 举报
回复
引用 6 楼 zengzhuan7760 的回复:
[quote=引用 4 楼 zhao4zhong1 的回复:] 仅供参考: Codejock.Xtreme.Toolkit.Pro.v15.3.1.Full.Source.Retail.Incl.Keymaker-ZWT.rar
广海有个叫 源代码 的跟你一样一样的。[/quote] 那又能说明什么问题呢?
赵4老师 2016-11-29
  • 打赏
  • 举报
回复
引用 5 楼 zengzhuan7760 的回复:
[quote=引用 4 楼 zhao4zhong1 的回复:] 仅供参考: Codejock.Xtreme.Toolkit.Pro.v15.3.1.Full.Source.Retail.Incl.Keymaker-ZWT.rar
这货又来灌水了[/quote] 如果谁真的逐个看过这里面的每行代码,我相信他就不会再问楼主所问的问题了。
zengzhuan7760 2016-11-29
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
仅供参考: Codejock.Xtreme.Toolkit.Pro.v15.3.1.Full.Source.Retail.Incl.Keymaker-ZWT.rar
广海有个叫 源代码 的跟你一样一样的。
zengzhuan7760 2016-11-29
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
仅供参考: Codejock.Xtreme.Toolkit.Pro.v15.3.1.Full.Source.Retail.Incl.Keymaker-ZWT.rar
这货又来灌水了
赵4老师 2016-11-29
  • 打赏
  • 举报
回复
仅供参考: Codejock.Xtreme.Toolkit.Pro.v15.3.1.Full.Source.Retail.Incl.Keymaker-ZWT.rar
副组长 2016-11-29
  • 打赏
  • 举报
回复
没法确定除去浮动窗口以外剩下区域的大小。
副组长 2016-11-29
  • 打赏
  • 举报
回复
是的,以前的就是这个样子的,贴上一个Window。可是现在加上浮动窗口和RIBON BAR什么的,这个方法就不灵了呢?
1.本书附源代码共计381个,其运行环境如下: IE 5或更高版本 Mozilla Firefox 1.5.0.3或更高版本 服务器采用IIS5.1 或以上版本 数据库使用MS Access 2000以上 2.本书所附光盘实例代码: 第1章(\第1章) 查看1.2.htm中noscript显示效果的方法如下: 1.将该实例复制到C:\Inetpub\wwwroot下; 2.选择浏览器的“工具”-“安全”-“本地Intranet”-“自定义级别”-“活动脚本”中选用“禁用”单选框 3.在浏览器中输入下述地址:http://localhost/1.2.htm • 1.1.htm 多段代码相互调用 • 1.2.htm <script>与窗口打开 • 14.6.htm 窗口的打开和关闭 • 14.7.htm 安全关闭窗口 • 14.8.htm 窗口特征属性综合举例 • 14.9.htm 一个窗口写入的简单例子 • 14.10.htm 动态写入HTML代码 • 14.11.htm 窗口写入的应用示例 • 14.12.htm DOM窗口交互 • 14.13.htm 窗口方法测试 • 14.14.htm 用按钮载入页面 • 14.14.htm status属性 • 14.16.htm defaultStatus属性 • 14.17.htm 滚动的状态栏 • 14.18.htm 超时设定 • 14.19.htm onload事件 • 14.20.htm 模式窗口 • 14.21.htm 无模式窗口 • 14.22.htm 窗口应用举例 • 14.23.htm 全屏窗口 第15章(\第15章) 代码说明:本章部分代码使用了第10章、第19章几个文件,如果不能正常显示,则可能这些文件位置已改变。 • 15.1.htm 简单框架 • frames.htm 网页框架 • moreframes.htm 更多框架 • moreframes.htm 框架关联显示 • 15.5.htm 简单的框架网页 • 15.6.htm 内联框架 • 15.7.htm 简单的框架嵌套 • 15.8.htm 框架嵌套 • 15.9.htm 交叉框架通信 • input.htm 交叉框架通信的输入部分 • output.htm 交叉框架通信的输出部分 • 15.12.htm 嵌套框架交叉通信 • top.htm 嵌套框架交叉通信的上部框架 • bottom.htm 嵌套框架交叉通信的底部框架 • minput.htm 嵌套框架交叉通信的输入部分 • moutput.htm 嵌套框架交叉通信的输出部分 • stateframes.htm 状态框架集 • stateframe.htm 状态框架 • mainframe.htm 主框架 • mainframe2.htm 主框架之二 第16章(\第16章) • 16.1.htm 文档颜色属性应用 • 16.2.htm lastModified • 16.3.htm lastModified的返回值 • 16.4.htm document.location • 16.6.htm document.location的详细属性 • 16.6.htm 验证document.referrer • 16.7.htm 验证document.referrer • 16.8.htm document.write()与document.writeln() • 16.9.htm 字符串连接输出 • 16.10.htm document.close()和document.open() • 16.11.htm document.links[].href • 16.12.htm elements[] • 16.13.htm images[] • 16.14.htm document.getElementById() • 16.15.htm document.createElement() • 16.16.htm 设置表格属性 • 16.17.htm 显示表格属性 • 16.18.htm 操作表格元素 • 16.19.htm 插入和删除表元 • 16.20.htm 改变
的内容 • 16.21.htm 改变页面样式 • blue.css 16.21.htm用到的样式文件 • red.css 16.21.htm用到的样式文件 • green.css 16.21.htm用到的样式文件 第17章(\第17章) • 17.1.htm Form对象测试 • 17.2.htm 基本按钮 • 17.3.htm button按钮 • 17.4.htm 文本域 • 17.5.htm 文本区 • 17.6.htm 限制输入长度的文本区 • 17.7.htm 限制输入长度的文本区之二 • 17.8.htm 复选框与单选按钮 • 17.9.htm 验证输入内容是否为空 • 17.10.htm 验证输入内容是否为空 • 17.11.htm 混合表单验证 • 17.12.htm 按键屏蔽 • 17.13.htm 屏蔽表单域 • 17.14.htm 动态表单 第18章(\第18章) • 18.1.htm 复选框 • 18.2.htm 单选按钮 • 18.3.htm 复选框与单选按钮的组合使用 • 18.4.htm 使用elements[]数组 • 18.5.htm 选择控件 • 18.6.htm 多项选择控件 • 18.7.htm 级联选择控件 第19章(\第19章) • 19.1.htm 友情链接 • 19.2.htm 需要确认的友情链接 • 19.3.htm 渐显效果的下拉菜单 • 19.4.htm 模拟系统菜单 • 19.5.htm 图片显示窗口 • 19.6.htm 远程控制菜单 • 19.7.htm 滑动菜单 • 19.8.htm 左键弹出式菜单 • 19.9.htm 浮动菜单 • 19.10.htm 导航式菜单 第20章(\第20章) • 20.1.htm 显示浏览器名称与版本号 • 20.2.htm 显示浏览器名称(改进章) • 20.3.htm JavaScript支持检测1 • 20.4.htm JavaScript支持检测2 • 20.5.htm JavaScript对象检测 • 20.6.htm Screen对象 • 20.7.htm 获取浏览器窗口大小 • 20.8.htm 字号随浏览器窗口大小而改变 • 20.9.htm 对代码20.8的改写 • 20.10.htm 在网页中有选择地显示图片 • 20.11.htm 客户端性能检测 • 20.12.htm 浏览器按键模拟 • 20.13.htm 修改Mozilla用户主页 • 20.14.htm 修改IE用户主页 第21章(\第21章) • 21.1.htm 编码与解码 • 21.2.htm Cookie值被覆盖 • 21.3.htm Cookie分析 • 21.4.htm 用Cookie保存定制样式 • 21.5.htm DHTML行为 第22章(\第22章) • 22.1.htm 通过单击按钮来改变图像 • 22.2.htm 随机显示不同图像 • 22.3.htm 结构化图形控件 • 22.4.htm 图像定位示例 • 22.5.htm 在IE中拖动图像 • 22.6.htm 按钮翻转示例 • 22.7.htm 跟随屏幕移动的图片 • 22.8.htm 多幅图片滚动显示 • 22.9.htm 图片的左右循环飘动 • 22.10.htm 图片的渐隐渐显 • 22.11.htm 不停闪烁的图片 • 22.12.htm 图片倒映 第23章(\第23章) • 23.1.htm 简单过渡 • layerlib.js JavaScript外部文件 • 23.3.htm 目标翻转 • 23.4.htm 运动图像 • 23.5.htm 随机图像 • 23.6.htm 动画效果 • 23.7.htm Sequencer控件 • 23.8.htm Path控件 • 23.9.htm 永远居中的背景图片 • 23.10.htm 随机显示的背景图片 • 23.11.htm 垂直滚动公告板 • 23.12.htm 类似Flash的字幕效果 • 23.13.htm 地震效果 第24章(\第24章) • MyApplet.txt 简单的Java Applet源程序 • 24.2.htm 在JavaScript中访问Java Applet • 24.3.htm 简单的Flash插件 • 24.4.htm mimeTypes[]数组 • 24.5.htm 使用mimeTypes[]检测支持的媒体类型 • 24.6.htm 使用navigator.plugins[][]列举所有Flash MIME类型 • 24.7.htm 列举plugins[]数组的内容 • 24.8.htm 简单的Flash播放控制器 • 24.9.htm ActiveX控件示例 • 24.10.htm 使代码兼容多种浏览器 • 24.11.htm Flash 播放控制器(ActiveX) 第25章(\第25章) • 25.1.htm 单向通信中的Image • 25.2.htm JavaScript向服务器发送RPC • 25.3.htm 动态内容 • 25.4.htm 中的单词拼写检查 • 25.5.htm 内联框架 第26章(\第26章) 1.查看书中图26.9的效果的方法: 用记事本打开26.5.xml,找到第二行,内容如下: 将两端的去掉并保存该文档后,用IE打开,就可看到图26.9所示的效果。 2.查看书中图26.10的效果的方法: 用记事本打开26.5.xml,找到第3行,内容如下: 将两端的去掉并保存该文档后,用IE打开,就可看到图26.9所示的效果。 3.要查看书中图26.11的效果,须连接Internet。 • 26.1.xml XML文档的例子 • 26.2.xml 包含DTD及其实例的XML文档 • 26.3.xml 要转换的XML文档 • test.xsl 转换XML文档的模板文件 • 26.5.xml 更复杂的要转换的XML文档 • staff.xsl XSL样式表 • staff.css CSS样式表 • 26.8.xml 使用了MathML的XML文档 • 26.9.htm 显示XML文档根结点 • 26.10.htm 使用Jscript与DOM直接操作XML • 26.11.xml 使用Mozilla直接操作XML • 26.12.js 使用Mozilla直接操作XML用到的js文件 • 26.13.htm IE XML数据岛应用 • 26.14.htm IE XML数据岛 • 26.15.rss 简单的rss文件 • 26.16.htm 简单的rss阅读器 第28章(\第28章) • 28.1.htm 显示当前时间 • 28.2.htm 显示当前日期和星期 • 28.3.htm 显示日期、时间和星期 • 28.4.htm 分时段问候 • 28.5.htm 以数字图片来显示时间 • 28.6.htm 显示世界不同地区的当前时间 • 28.7.htm 总是悬浮的时钟 • 28.8.htm 简单的加减乘除运算 • 28.9.htm 能进行四则混合运算的计算器 • 28.10.htm 在表单中显示打字效果 • 28.11.htm 随页面刷新更换页面背景 • 28.12.htm 随页面刷新显示不同图片 第29章(\第29章) • 29.1.htm 汉诺塔问题求解 • 29.2.htm 位置固定的对联广告 • 29.3.htm 随页面滚动的对联广告 • 29.4.htm 循环滚动的多幅广告 • css.css 代码29.4用到的样式文件 • 29.6.htm 用JavaScript实现级联选择 • ajax_server.asp 使用ASP访问demo数据表 • ajax.htm 使用ajax实现级联选择 第30章(\第30章) 代码说明:本章实现了一个ASP留言板程序,程序需要在IIS环境下运行。 • index.asp 留言板主程序 • guestbook.mdb 留言板数据库程序 • images\ 留言板使用的图像文件目录

15,978

社区成员

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

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