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

📄 subject_60422.htm

📁 vc
💻 HTM
字号:
<p>
序号:60422 发表者:robslove 发表日期:2003-11-13 13:05:06
<br>主题:关于闪烁的问题
<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>
回复者:robslove 回复日期:2003-11-13 13:32:08
<br>内容:这是实现的部分<BR>不知道哪写错了?<BR>------------------------<BR>void CTestDlg::OnPaint() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (IsIconic())<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPaintDC dc(this); // device context for painting<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Center icon in client rectangle<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int cxIcon = GetSystemMetrics(SM_CXICON);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int cyIcon = GetSystemMetrics(SM_CYICON);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CRect rect;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(&amp;rect);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int x = (rect.Width() - cxIcon + 1) / 2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int y = (rect.Height() - cyIcon + 1) / 2;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Draw the icon<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.DrawIcon(x, y, m_hIcon);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPaintDC dc(this); <BR>CRect rect;<BR>GetClientRect(&amp;rect);<BR><BR>CDC dcMemory;<BR>dcMemory.CreateCompatibleDC(&amp;dc);<BR>CBitmap bmp;<BR><BR><BR>bmp.LoadBitmap(IDB_BITMAP1);<BR>//这是网上实现的例子,<BR>//bmp.CreateCompatibleBitmap(&amp;dc,rect.Width(),rect.Height());<BR>//我把这里改成了读自己的bitmap<BR>dcMemory.SelectObject(&amp;bmp);<BR><BR>dc.BitBlt(0,0,rect.Width(),rect.Height(),&amp;dcMemory,i,m,SRCCOPY);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;CDialog::OnPaint();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<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>
回复者:robslove 回复日期:2003-11-13 23:19:18
<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>
回复者:菜鸟人飞 回复日期:2003-11-14 11:33:27
<br>内容:将OnEraseBkgnd函数默认生成的return CDialog::OnEraseBkgnd(pDC);这句注释掉或删掉,再加入return false;即可解决闪烁的问题。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:robslove 回复日期:2003-11-14 11:54:34
<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>
回复者:无情阁东雪 回复日期:2003-11-14 13:07:39
<br>内容:试了一下,还是有点闪,可能是间隔太短的原因吧<BR>不过你的程序有点小问题,<BR>else<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPaintDC dc(this); <BR>CRect rect;<BR>GetClientRect(&amp;rect);<BR><BR>CDC dcMemory;<BR>dcMemory.CreateCompatibleDC(&amp;dc);<BR>CBitmap bmp;<BR><BR><BR>bmp.LoadBitmap(IDB_BITMAP1);<BR>//这是网上实现的例子,<BR>//bmp.CreateCompatibleBitmap(&amp;dc,rect.Width(),rect.Height());<BR>//我把这里改成了读自己的bitmap<BR>dcMemory.SelectObject(&amp;bmp);<BR><BR>dc.BitBlt(0,0,rect.Width(),rect.Height(),&amp;dcMemory,i,m,SRCCOPY);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;CDialog::OnPaint();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>} <BR><BR><BR>else<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPaintDC dc(this); <BR>CRect rect;<BR>GetClientRect(&amp;rect);<BR><BR>CDC dcMemory;<BR>dcMemory.CreateCompatibleDC(&amp;dc);<BR>CBitmap bmp,*poldbmp;<BR><BR><BR>bmp.LoadBitmap(IDB_BITMAP1);<BR>//这是网上实现的例子,<BR>//bmp.CreateCompatibleBitmap(&amp;dc,rect.Width(),rect.Height());<BR>//我把这里改成了读自己的bitmap<BR>poldbmp = dcMemory.SelectObject(&amp;bmp);<BR><BR>dc.BitBlt(0,0,rect.Width(),rect.Height(),&amp;dcMemory,i,m,SRCCOPY);<BR><BR>bmp.DeleteObject();&nbsp;&nbsp;&nbsp;&nbsp;<BR>dcMemory.SelectObject(poldbmp);<BR>dcMemory.DeleteDC();<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;CDialog::OnPaint();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<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>
回复者:robslove 回复日期:2003-11-14 13:21:55
<br>内容:上面是用了双缓冲实现图片显示的<BR>不知道是否还是需要重载<BR>OnEraseBkgnd函数<BR>我认为没这个必要啊<BR><BR>还有顺便问一下OnEraseBkgnd重载的问题<BR>不知道是不是我理解错误<BR>如果需要实现OnEraseBkgnd重载<BR>在哪里重载?<BR>我的理解是自己用add member function...<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>
回复者:robslove 回复日期:2003-11-14 13:30:45
<br>内容:-引用“第5楼”所言<BR>-试了一下,还是有点闪,可能是间隔太短的原因吧&nbsp;&nbsp;不过你的程序有点小问题<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>
回复者:菜鸟人飞 回复日期:2003-11-14 14:06:18
<br>内容:&lt;BLOCKQUOTE&gt;引用“第6楼”所言<BR>&lt;Q&gt;上面是用了双缓冲实现图片显示的&nbsp;&nbsp;不知道是否还是需要重载&nbsp;&nbsp;OnEraseBkgnd函数&nbsp;&nbsp;我认为没这个必要啊&nbsp;&nbsp;&nbsp;&nbsp;还有顺便问一下OnEraseBkgnd重载的问题&nbsp;&nbsp;不知道是不是我理解错误&nbsp;&nbsp;如果需要实现OnEraseBkgnd重载&nbsp;&nbsp;在哪里重载?&nbsp;&nbsp;我的理解是自己用add member function...&nbsp;&nbsp;不过总感觉怪怪的,请指正,谢谢&lt;/Q&gt;&lt;/BLOCKQUOTE&gt;<BR>p j<BR><BR>我觉得问题就在OnEraseBkgnd函数这里就可以解决,我用上面我说的方法实现了不闪烁的,还有就是你加OnEraseBkgnd函数的方法是错的,要在类向导里加,试试,真的可以解决问题!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:robslove 回复日期:2003-11-14 15:40:37
<br>内容:晕死<BR>我就是找不到这个message啊<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>
回复者:robslove 回复日期:2003-11-14 16:30:54
<br>内容:感觉该是WM_ERASEBKGND消息<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>回复者:菜鸟人飞 回复日期:2003-11-14 17:22:55
<br>内容:在类向导中选择calss info选项卡,再在message filter中选择window,然后在MESSAGE中肯定就有上面那个消息了,你试试!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:robslove 回复日期:2003-11-14 17:34:13
<br>内容:谢谢<BR>看到了<BR>calss info选项卡还是第一次用到<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-11-14 17:37:39
<br>内容:to 菜鸟人飞:我也找了,没有WM_ERASEBKGND这个消息,呵呵不知道为什么。<BR>to robslove:我下了你的程序,你写的好乱哦~你的timer我一直没弄懂什么意思~我试了怎么不闪啊?我改了一下你看看。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:robslove 回复日期:2003-11-14 17:48:08
<br>内容:上面的代码我也只是写来测试的<BR>timer里面设置的i,m是个全局变量<BR>用来<BR>dc.BitBlt(0,0,rect.Width(),rect.Height(),&amp;dcMemory,i,m,SRCCOPY);<BR>传递里面一副位图的显示坐标<BR>即左上我们定为(0,0)<BR>我们可以从(i,m)开始显示<BR>上面的部分就可以去掉了<BR>你全该成了0,0<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>
回复者:120 回复日期:2003-11-14 20:57:20
<br>内容:我是这样写的<BR>我以前用CDC 与pCPaintDC dc(this);相相结合总是会非法操作<BR> <BR>后来改为内存与前台获取设备全部用 CDC<BR><BR><BR><BR>void CTestDlg::OnPaint() <BR>{<BR><BR>else<BR>{<BR>CDC *pDC=GetDC();<BR>CDC memdc;<BR>CBitmap m_bitmap;<BR>HBITMAP hBitmap = (HBITMAP) LoadImage(NULL,bitmapstr, IMAGE_BITMAP,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0, 0, LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; m_bitmap.Attach(hBitmap);&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; BITMAP bm;<BR>&nbsp;&nbsp;&nbsp;&nbsp; m_bitmap.GetBitmap(&amp;bm);&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>if (!memdc.CreateCompatibleDC(pDC))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>{&nbsp;&nbsp;&nbsp;&nbsp;CBitmap* pOldBitmap = memdc.SelectObject(&amp;m_bitmap);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &amp;memdc, 0, 0, SRCCOPY);<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>
回复者:菜鸟人飞 回复日期:2003-11-15 11:56:43
<br>内容:to robslove:具体的功能我也不是很清楚,但好像是有点类似于过滤MESSAGE的情况,具 体的意思你再查查相关的资料吧!<BR>to 撒达姆的大表弟:你再看看吧,我觉得应该会有的,我自己装的是VC6.0,不知道会不会是版本的问题。<BR>to 120:你的代码我不是很懂,可解释一下吗,谢谢!
<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 + -