📄 subject_60422.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> 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> CPaintDC dc(this); <BR>CRect rect;<BR>GetClientRect(&rect);<BR><BR>CDC dcMemory;<BR>dcMemory.CreateCompatibleDC(&dc);<BR>CBitmap bmp;<BR><BR><BR>bmp.LoadBitmap(IDB_BITMAP1);<BR>//这是网上实现的例子,<BR>//bmp.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());<BR>//我把这里改成了读自己的bitmap<BR>dcMemory.SelectObject(&bmp);<BR><BR>dc.BitBlt(0,0,rect.Width(),rect.Height(),&dcMemory,i,m,SRCCOPY);<BR><BR> // CDialog::OnPaint();<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-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> {<BR> CPaintDC dc(this); <BR>CRect rect;<BR>GetClientRect(&rect);<BR><BR>CDC dcMemory;<BR>dcMemory.CreateCompatibleDC(&dc);<BR>CBitmap bmp;<BR><BR><BR>bmp.LoadBitmap(IDB_BITMAP1);<BR>//这是网上实现的例子,<BR>//bmp.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());<BR>//我把这里改成了读自己的bitmap<BR>dcMemory.SelectObject(&bmp);<BR><BR>dc.BitBlt(0,0,rect.Width(),rect.Height(),&dcMemory,i,m,SRCCOPY);<BR><BR> // CDialog::OnPaint();<BR> }<BR>} <BR><BR><BR>else<BR> {<BR> CPaintDC dc(this); <BR>CRect rect;<BR>GetClientRect(&rect);<BR><BR>CDC dcMemory;<BR>dcMemory.CreateCompatibleDC(&dc);<BR>CBitmap bmp,*poldbmp;<BR><BR><BR>bmp.LoadBitmap(IDB_BITMAP1);<BR>//这是网上实现的例子,<BR>//bmp.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());<BR>//我把这里改成了读自己的bitmap<BR>poldbmp = dcMemory.SelectObject(&bmp);<BR><BR>dc.BitBlt(0,0,rect.Width(),rect.Height(),&dcMemory,i,m,SRCCOPY);<BR><BR>bmp.DeleteObject(); <BR>dcMemory.SelectObject(poldbmp);<BR>dcMemory.DeleteDC();<BR> // CDialog::OnPaint();<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 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>-试了一下,还是有点闪,可能是间隔太短的原因吧 不过你的程序有点小问题<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>内容:<BLOCKQUOTE>引用“第6楼”所言<BR><Q>上面是用了双缓冲实现图片显示的 不知道是否还是需要重载 OnEraseBkgnd函数 我认为没这个必要啊 还有顺便问一下OnEraseBkgnd重载的问题 不知道是不是我理解错误 如果需要实现OnEraseBkgnd重载 在哪里重载? 我的理解是自己用add member function... 不过总感觉怪怪的,请指正,谢谢</Q></BLOCKQUOTE><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(),&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> 0, 0, LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE);<BR> <BR> m_bitmap.Attach(hBitmap); <BR> BITMAP bm;<BR> m_bitmap.GetBitmap(&bm); <BR> <BR>if (!memdc.CreateCompatibleDC(pDC))<BR> return;<BR> <BR>{ CBitmap* pOldBitmap = memdc.SelectObject(&m_bitmap);<BR><BR> pDC->BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &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 + -