📄 subject_36194.htm
字号:
<p>
序号:36194 发表者:凌仕晓 发表日期:2003-04-12 22:11:23
<br>主题:关于重绘窗口的问题
<br>内容:我在对话框(设为无边框)的OnPaint()函数里加载了一个位图作背景,运行没问题,但运行时如果把别的程序窗口在我的对话框前来回移动几下,对话框中的一部分就可能看不见,有时是只有背景图,有时只有按钮,而背景成了灰色,但如果在任务栏上把程序切换两下就没事了,是不是在特定的时候要重绘窗体,如果是要在什么消息产生时重绘?
<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-12 22:32:52
<br>内容:Can you give me your code?
<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-12 22:49:19
<br>内容:你应该重载WM_ERASEBKGROUND消息(OnEraseBackground()?不知是不是这么写),在这个消息中加载图像,就不会出现你所说的情况了.如要其背景不闪烁,可以在这个消息中利用GetClipBox()来确定重画大小,只刷新这一部分.
<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-12 23:19:47
<br>内容:主要就是这个函数,其它地方跟一般没有区别<BR><BR>void Exam::OnPaint()<BR>{<BR> if (IsIconic())<BR> {<BR> CPaintDC dc(this); // 用于绘制的设备上下文<BR><BR> SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);<BR><BR> // 使图标在工作矩形中居中<BR> int cxIcon = GetSystemMetrics(SM_CXICON);<BR> int cyIcon = GetSystemMetrics(SM_CYICON);<BR> CRect rect;<BR> GetClientRect(&rect);<BR> int x = (rect.Width() - cxIcon + 1) / 2;<BR> int y = (rect.Height() - cyIcon + 1) / 2;<BR><BR> // 绘制图标<BR> //dc.DrawIcon(x, y, m_hIcon);<BR> }<BR> else<BR> { CRect rect;<BR> GetClientRect(&rect);<BR> CDC memDC;<BR> CDC* pDC;<BR> pDC = GetDC();<BR> CBitmap bitmap;<BR> CBitmap* pOldBitmap;<BR> BITMAP hBitmap; <BR> bitmap.LoadBitmap(IDB_BITMAP5);//位图ID<BR> memDC.CreateCompatibleDC(pDC);<BR> pOldBitmap = memDC.SelectObject(&bitmap);<BR> bitmap.GetBitmap(&hBitmap);<BR> CSize size(hBitmap.bmWidth,hBitmap.bmHeight);// = bitmap.GetBitmapDimension();<BR> pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,size.cx,size.cy,SRCCOPY);<BR> memDC.SelectObject(pOldBitmap);<BR> ReleaseDC(pDC);<BR> CDialog::OnPaint();<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-13 17:47:26
<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>
回复者:tiger_bai 回复日期:2003-04-13 19:21:33
<br>内容:BITMAP 这个结构你没添加!
<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>回复者:小年 回复日期:2003-04-13 21:12:42
<br>内容:重载WM_ERASEBKGRND<BR>BOOL CPOPDlg::OnEraseBkgnd(CDC* pDC) <BR>{<BR> CRect rect;<BR> GetClientRect(&rect);<BR> CDC memDC;<BR> CBitmap bitmap;<BR> CBitmap* pOldBitmap;<BR> BITMAP hBitmap; <BR> bitmap.LoadBitmap(IDB_BITMAP5);//位图ID<BR> memDC.CreateCompatibleDC(pDC);<BR> pOldBitmap = memDC.SelectObject(&bitmap);<BR> bitmap.GetBitmap(&hBitmap);<BR> CSize size(hBitmap.bmWidth,hBitmap.bmHeight);// = bitmap.GetBitmapDimension();<BR> pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,size.cx,size.cy,SRCCOPY);<BR> memDC.SelectObject(pOldBitmap);<BR> ReleaseDC(pDC);<BR><BR> return true;<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-13 21:49:44
<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-13 22:02:44
<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-13 23:09:32
<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-14 15:10:02
<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-14 15:17:05
<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-14 16:43:17
<br>内容:我再把问题说一遍,就是用了位图作对话框背景后,当在运行期间,如果有其它的窗体在前面移动,就会使对话框中的部分东西不可见(有时是背景部分变成默认的灰色,有时是背景位图把控件给盖掉了),经大家改进后,位图一直在上面,但控件部分还是有时不可见,大家再分析一下. VC.net WindowsXP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -