⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_36568.htm

📁 一些关于vc的问答
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<p>
序号:36568 发表者:凉风有讯 发表日期:2003-04-16 19:54:58
<br>主题:请问在多文档MFC中,主窗口的背景能否换成BMP图
<br>内容:在多文档的MFC中,主窗口的灰色背景过于单调,现在我想把一幅bmp图设为背景,不知道能不能实现。在其子窗口的背景可以在CMyView::OnDraw(CDC* pDC)中实现,不知道主窗口中该如何实现。请高手指点。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:擎天柱 回复日期:2003-04-16 20:36:04
<br>内容:CFrameWnd::OnPaint()
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:万能万万不能 回复日期:2003-04-16 20:54:20
<br>内容:主框架客户区域可以用位图.<BR><BR>但是确实比较麻烦,与其他的窗口不一样.我以前试过,但具体忘了.<BR><BR>网上可以搜索到.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:wowow 回复日期:2003-04-17 08:42:19
<br>内容:MDI主窗口的背景实际上被它的一个子窗口覆盖,而该子窗口一般对你而言是不可见的,要改变主窗口背景的话,就要改变该覆盖子窗口的背景。<BR>1.从CWnd中派生一个窗口,假设为CMDIClientWindow,在MDI主窗口头文件中定义该窗口:<BR>&nbsp;&nbsp;CMDIClientWindow m_wndMDIClient;<BR>2.在主窗口的OnCreateClient中添加如下代码:<BR>&nbsp;&nbsp;if (CMDIFrameWnd::OnCreateClient(lpcs, pContext))<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_wndMDIClient.SubclassWindow(m_hWndMDIClient);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return TRUE; <BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;其中,lpcs和pContext是OnCreateClient函数的参数,m_hWndMDIClient就是隐藏的子窗口<BR>&nbsp;&nbsp;的句柄。<BR>3.在你派生的窗口中的OnPaint中画你的位图吧。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:凉风有讯 回复日期:2003-04-18 08:15:52
<br>内容:wowow兄,俺照你的方法编译的时候出了N多的问题。可能是哪个地方我没弄好。你能不能附个实例给我,最简单的就行。麻烦你了。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wowow 回复日期:2003-04-18 09:42:19
<br>内容:别急,一步一步来,我在线上等你。<BR>先执行1,编译通过后,转入2,编译通过后再转入3。<BR>编译出错后,把错误码告诉我。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:drugbird 回复日期:2003-04-18 12:07:22
<br>内容:我用这招也老错。不是编译错,是运行时的异常,去掉SublclassWindow那句就没错了,不过也没用了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wowow 回复日期:2003-04-18 13:22:48
<br>内容:药鸟(戴了面具,搞不清楚性别,^_^),我的一点问题都没有,把你的source贴上来看看?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:万能万万不能 回复日期:2003-04-18 14:09:43
<br>内容:IDB_BITMAP1位图自己画.<BR><BR>void CMainFrame::OnPaint() <BR>{<BR>//&nbsp;&nbsp;&nbsp;&nbsp;CPaintDC dc(this); // device context for painting<BR>//******增加代码头******<BR>/*<BR>&nbsp;&nbsp;&nbsp;&nbsp;CMDIFrameWnd::OnPaint(); <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CRect rc;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CDC dc;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;dc.m_hDC=::GetDC(this-&gt;m_hWndMDIClient); <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CBrush br(RGB(120,200,40));<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc.SelectObject(&amp;br);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(&amp;rc);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;dc.PatBlt(rc.left,rc.top,rc.Width(),rc.Height(),PATCOPY);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;ReleaseDC(&amp;dc);<BR>*/<BR>//******增加代码头******<BR>CBitmap&nbsp;&nbsp;&nbsp;&nbsp; bmp;<BR>bmp.LoadBitmap(IDB_BITMAP1);<BR><BR>CMDIFrameWnd::OnPaint();<BR><BR>CRect rc,memrc;<BR><BR>CDC dc,memdc;<BR><BR>dc.m_hDC=::GetDC(this-&gt;m_hWndMDIClient); <BR><BR>memdc.CreateCompatibleDC(&amp;dc);<BR><BR>memdc.SelectObject(&amp;bmp);<BR><BR>GetClientRect(&amp;rc) ;<BR><BR>dc.BitBlt(rc.top,rc.left,rc.Width(),rc.Height()<BR><BR>,&amp;memdc,rc.top,rc.left,SRCCOPY);<BR><BR>ReleaseDC(&amp;memdc);<BR><BR>ReleaseDC(&amp;dc);<BR><BR>//******增加代码尾******<BR><BR><BR><BR><BR>//******增加代码尾******<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Add your message handler code here<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// Do not call CMDIFrameWnd::OnPaint() for painting messages<BR>}<BR><BR>BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(pMsg-&gt;hwnd==m_hWndMDIClient &amp;&amp; pMsg-&gt;message==WM_PAINT) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostMessage(WM_PAINT);&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;return CMDIFrameWnd::PreTranslateMessage(pMsg);<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:drugbird 回复日期:2003-04-18 19:09:08
<br>内容:to wowow:看到鸟还不知道性别?:)<BR>1.从CWnd中派生一个窗口,假设为CMDIClient,在MDI主窗口头文件中定义该窗口:<BR>&nbsp;&nbsp;CMDIClient m_mdiclient;<BR>2.在重载CMDIClient的OnEraseBkgnd函数<BR>BOOL CMdiClient::OnEraseBkgnd(CDC* pDC) <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Add your message handler code here and/or call default<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp; CWnd::OnEraseBkgnd(pDC);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CBitmap* background;//背景<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background-&gt;LoadBitmap(IDB_BITMAP1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CBitmap* oldbmp;<BR>&nbsp;&nbsp;&nbsp;&nbsp; CRect rect ;<BR>&nbsp;&nbsp;&nbsp;&nbsp; GetClientRect(&amp;rect);<BR>&nbsp;&nbsp;&nbsp;&nbsp; CDC dc;<BR>&nbsp;&nbsp;&nbsp;&nbsp; dc.CreateCompatibleDC(pDC);<BR>&nbsp;&nbsp;&nbsp;&nbsp; oldbmp=dc.SelectObject(background);<BR>&nbsp;&nbsp;&nbsp;&nbsp; BITMAP bm;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background-&gt;GetBitmap(&amp;bm);<BR>&nbsp;&nbsp;&nbsp;&nbsp; pDC-&gt;StretchBlt(0,0,rect.right-rect.left,rect.bottom-rect.top,&amp;dc,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.SelectObject(oldbmp);<BR>&nbsp;&nbsp;&nbsp;&nbsp; return TRUE;<BR>}<BR>3.在mdi主窗口的oncreate里加一句SubclassWindow<BR>int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)<BR>{&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_mdiclient.SubclassWindow(m_hWndMDIClient);<BR>...<BR>}<BR>给看看,谢了先
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:凉风有讯 回复日期:2003-04-19 09:31:05
<br>内容:wowow,抱歉,昨天留下问题就下线了。没想到你那么快就有回复了。:)让你久等了。先是第一步,出现syntax error : missing ';' before identifier 'm_wndMDIClient'应该是在头文件定义的时候出的问题。在头文件里定义窗口我还是第一次遇到。可能是犯了很傻的mistakes,各位兄弟别笑话我哦:(<BR>万能万万不能 你的代码我尝试了,只是在运行的时候出了点错误。但是我已经看到了背景里的图片。能不能再给点程序思想给我啊。从程序看你也是修改了那个隐藏的子窗口,但是你好象并没有派生一个新的窗口就实现了功能。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:drugbird 回复日期:2003-04-19 10:41:00
<br>内容:wowow 你还是mail个例子,省事<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:凉风有讯 回复日期:2003-04-19 11:18:05
<br>内容:drugbird 尝试一下 万能万万不能 的代码,看看你那有没有问题。有空的话指点一下我,在头文件里怎么定义窗口。谢谢哦!还有,你是双子座的吗?用这个头像。。。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wowow 回复日期:2003-04-20 21:20:29
<br>内容:to nczw:<BR>定义m_wndMDIClient,你必须在头文件中include你的派生类的头文件,从你反馈的错误来看,你漏掉了一个";".<BR>万能万万不能的代码意思也是操纵隐藏子窗口的OnPaint,只不过他直接在MDI主窗口的OnPaint操纵隐藏子窗口的OnPaint;我不认为这是一个好的想法,这种做法增加了程序的复杂性,而且破坏了对象的封装性.<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -