📄 subject_29687.htm
字号:
<p>
序号:29687 发表者:cdx80 发表日期:2003-02-11 19:40:47
<br>主题:大虾大虾,究竟有没有给对话框设置背景图的简便方法啊?代码越短越好
<br>内容:内容同标题<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:upstream 回复日期:2003-02-11 22:22:32
<br>内容:通常是在OnPaint()里加入如下代码<BR><BR>void 你的对话框类::OnPaint() <BR>{<BR> if (IsIconic())<BR> {<BR> CPaintDC dc(this); // device context for painting<BR><BR> SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);<BR><BR> // Center icon in client rectangle<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> // Draw the icon<BR> dc.DrawIcon(x, y, m_hIcon);<BR> }<BR> else<BR> {<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_BMPBACK);//位图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>
回复者:cdx80 回复日期:2003-02-12 10:36:34
<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>
回复者:syosinsya 回复日期:2003-02-13 18:00:43
<br>内容:向upstream请教。<BR>您的这段程序主要是else{...}这部分画背景吧?<BR>我现在的一个程序也是在OnPaint()处用跟你的else{...}那部分大致相同的程序画背景(没有 if{...}那部分画icon的程序)。在背景上根据不同选择安放不同的按钮等,但前几天偶然发现了一个问题,在这个窗口显示的状态下启动了其他程序,比如附件中的计算器。计算器覆盖了对话框的一部分。当移动计算器时,背景中的按钮等就没有了。检查后发现好像是因为在OnPaint()中画背景给按钮等刷新没了。如果在OnPaint()中用Invalidate()可以保证按钮不丢失,但背景较大,造成画面闪烁特利害。没办法只好在程序中监测当前窗口是否有效,无效的话给它最小化。<BR>请问,有没有办法解决这个问题。<BR>谢谢!<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -