怎样使页面刷新无刷新感,请详细一点,最好有简单的原代码!

climber 2000-03-22 04:37:00
怎样使页面刷新无刷新感,请详细一点,最好有简单的原代码!
...全文
100 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Janven 2000-03-22
  • 打赏
  • 举报
回复
这是我的一段解决图象处理闪烁的代码,希望你能有所收获。与gzhxie的原理是一样,只不过是VB的。由于是处理完后统一显示,故闪烁的问题也就不存在了。你刚学VB吧?有可能这种方法不适合你的。注意我上一篇的话吧。

Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long
Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hDC As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Declare Function DeleteDC Lib "gdi32" (ByVal hDC As Long) As Long
Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long

Dim w As Integer, h As Integer
Dim bm As BITMAP, hBitmap As Long
Dim hMemDC As Long, hMemDcTemp As Long

GetObject hBmp, LenB(bm), bm
w = bm.bmWidth
h = bm.bmHeight

hMemDC = CreateCompatibleDC(hDC)
hBitmap = CreateCompatibleBitmap(hDC, w, h)
SelectObject hMemDC, hBitmap
BitBlt hMemDC, 0, 0, w, h, hDC, 0, 0, vbSrcCopy 拷贝到hMemDC中进行处理

’添加所需图形处理的代码(一般都是用BitBlt函数的操作)

DeleteDC hMemDcTemp
BitBlt hDC, 0, 0, w, h, hMemDC, 0, 0, vbSrcCopy ’拷贝到显示区

DeleteDC hMemDC
DeleteObject hBitmap
End Sub

Janven 2000-03-22
  • 打赏
  • 举报
回复
掌握一个原则,就是大范围不一致的刷新不免有闪烁(例如依次刷新一些Label,如果能够同时刷新即可避免)。尤其以窗体背景为图片为甚。将窗体的AutoRedraw属性置成false可以减少划线等情况的闪烁。
Gzhxie 2000-03-22
  • 打赏
  • 举报
回复
先把要显示的东东写在memDC中,再拷贝到显示区,例:
CBitmap Membitmap; // Offscreen bitmap
CBitmap* pOldBitmap; // bitmap originally found in CMemDC
CDC * pMemDC, dc; // Saves CDC passed in constructor
CRect Memrect; // Rectangle of drawing area.
BOOL bMemDC; // TRUE if CDC really is a Memory DC.

pMemDC = &dc;
pOldBitmap = NULL;
bMemDC = !pDC->IsPrinting();

if (bMemDC) // Create a Memory DC
{
pDC->GetClipBox(&Memrect);
if(Memrect.IsRectEmpty()) return;
pMemDC->CreateCompatibleDC(pDC);
Membitmap.CreateCompatibleBitmap(pDC,
Memrect.Width(), Memrect.Height());
pOldBitmap = pMemDC->SelectObject(&Membitmap);
pMemDC->SetWindowOrg(Memrect.left, Memrect.top);
CBrush aBrush(GetDocument()->m_BackColor);
pMemDC->FillRect( &Memrect , &aBrush);
pMemDC->SelectObject(::GetStockObject(NULL_BRUSH));

}
if (bMemDC)//draw material rect,HW
{
//往这里输出东东,用pMemDC。

}

if (bMemDC)
{
// Copy the offscreen bitmap onto the screen.
pDC->BitBlt(Memrect.left, Memrect.top, Memrect.Width(), Memrect.Height(),
pMemDC, Memrect.left, Memrect.top, SRCCOPY);
//Swap back the original bitmap.
pMemDC->SelectObject(pOldBitmap);
}

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧