📄 subject_36568.htm
字号:
<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> CMDIClientWindow m_wndMDIClient;<BR>2.在主窗口的OnCreateClient中添加如下代码:<BR> if (CMDIFrameWnd::OnCreateClient(lpcs, pContext))<BR> {<BR> m_wndMDIClient.SubclassWindow(m_hWndMDIClient);<BR> return TRUE; <BR> }<BR> return FALSE;<BR> 其中,lpcs和pContext是OnCreateClient函数的参数,m_hWndMDIClient就是隐藏的子窗口<BR> 的句柄。<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>// CPaintDC dc(this); // device context for painting<BR>//******增加代码头******<BR>/*<BR> CMDIFrameWnd::OnPaint(); <BR><BR> CRect rc;<BR><BR> CDC dc;<BR><BR> dc.m_hDC=::GetDC(this->m_hWndMDIClient); <BR><BR> CBrush br(RGB(120,200,40));<BR> dc.SelectObject(&br);<BR><BR> GetClientRect(&rc);<BR><BR> <BR><BR> dc.PatBlt(rc.left,rc.top,rc.Width(),rc.Height(),PATCOPY);<BR><BR> ReleaseDC(&dc);<BR>*/<BR>//******增加代码头******<BR>CBitmap 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->m_hWndMDIClient); <BR><BR>memdc.CreateCompatibleDC(&dc);<BR><BR>memdc.SelectObject(&bmp);<BR><BR>GetClientRect(&rc) ;<BR><BR>dc.BitBlt(rc.top,rc.left,rc.Width(),rc.Height()<BR><BR>,&memdc,rc.top,rc.left,SRCCOPY);<BR><BR>ReleaseDC(&memdc);<BR><BR>ReleaseDC(&dc);<BR><BR>//******增加代码尾******<BR><BR><BR><BR><BR>//******增加代码尾******<BR><BR> <BR> // TODO: Add your message handler code here<BR><BR> // Do not call CMDIFrameWnd::OnPaint() for painting messages<BR>}<BR><BR>BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) <BR>{<BR> if(pMsg->hwnd==m_hWndMDIClient && pMsg->message==WM_PAINT) <BR> PostMessage(WM_PAINT); <BR> 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> CMDIClient m_mdiclient;<BR>2.在重载CMDIClient的OnEraseBkgnd函数<BR>BOOL CMdiClient::OnEraseBkgnd(CDC* pDC) <BR>{<BR> // TODO: Add your message handler code here and/or call default<BR><BR> CWnd::OnEraseBkgnd(pDC);<BR> CBitmap* background;//背景<BR> background->LoadBitmap(IDB_BITMAP1);<BR> CBitmap* oldbmp;<BR> CRect rect ;<BR> GetClientRect(&rect);<BR> CDC dc;<BR> dc.CreateCompatibleDC(pDC);<BR> oldbmp=dc.SelectObject(background);<BR> BITMAP bm;<BR> background->GetBitmap(&bm);<BR> pDC->StretchBlt(0,0,rect.right-rect.left,rect.bottom-rect.top,&dc,<BR> 0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);<BR> dc.SelectObject(oldbmp);<BR> return TRUE;<BR>}<BR>3.在mdi主窗口的oncreate里加一句SubclassWindow<BR>int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)<BR>{ <BR> if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)<BR> return -1;<BR> 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 + -