双缓冲显示问题(高分!)(急求!)
SIZE n_size;
GetTextExtentExPoint(hDC,_T("中"),_tcslen(_T("中")),NULL,NULL,NULL,&n_size);
n_hight = 11*n_size.cy;
MoveRect.top = 0;
MoveRect.left = 0;
MoveRect.right = 300;
MoveRect.bottom = 300;
nDC = CreateCompatibleDC(hDC);
n_map = CreateCompatibleBitmap(nDC, 300, 300);
SelectObject(nDC,&n_map);
::FillRect(nDC,&MoveRect,hbrush);
if(!g_nTimeGet->allData[DataNum].nameData.empty())
{
for(int i = 0; i<= DataNum; i++)
{
DrawText(nDC, (LPCTSTR)g_nTimeGet->UTF8ToUnicode(g_nTimeGet->allData[i].nameData).c_str(), -1, &MoveRect, DT_LEFT);
switch(g_nTimeGet->allData[i].colorType)
{
case 1:
SetTextColor(hDC, RGB(255,0,0));
break;
case 2:
SetTextColor(hDC, RGB(0,255,0));
break;
default:
break;
}
MoveRect.left = 92;
DrawText(nDC, (LPCTSTR)g_nTimeGet->UTF8ToUnicode(g_nTimeGet->allData[i].newData).c_str(), -1, &MoveRect, DT_LEFT);
MoveRect.left += 60;
wsprintf(szTextBuffer, TEXT("%s%\r\n%"), (LPCTSTR)g_nTimeGet->UTF8ToUnicode(g_nTimeGet->allData[i].changeData).c_str());
DrawText(nDC, szTextBuffer, -1, &MoveRect, DT_LEFT);
}
BitBlt(hDC, 60, 30, 300 , 300, nDC, 0, 0, SRCCOPY);
DeleteDC(nDC);
}
上面代码是我实现往屏幕上显示文字的,虽然已经画到屏幕上,可不知道为什么,只是一个点而已啊!!不知道错在哪了,改了很多次,都没行!!
希望高手指点,给高分!
GetTextExtentExPoint(hDC,_T("中"),_tcslen(_T("中")),NULL,NULL,NULL,&n_size);
n_hight = 11*n_size.cy;
MoveRect.top = 0;
MoveRect.left = 0;
MoveRect.right = 300;
MoveRect.bottom = 300;
nDC = CreateCompatibleDC(hDC);
n_map = CreateCompatibleBitmap(nDC, 300, 300);
SelectObject(nDC,&n_map);
::FillRect(nDC,&MoveRect,hbrush);
if(!g_nTimeGet->allData[DataNum].nameData.empty())
{
for(int i = 0; i<= DataNum; i++)
{
DrawText(nDC, (LPCTSTR)g_nTimeGet->UTF8ToUnicode(g_nTimeGet->allData[i].nameData).c_str(), -1, &MoveRect, DT_LEFT);
switch(g_nTimeGet->allData[i].colorType)
{
case 1:
SetTextColor(hDC, RGB(255,0,0));
break;
case 2:
SetTextColor(hDC, RGB(0,255,0));
break;
default:
break;
}
MoveRect.left = 92;
DrawText(nDC, (LPCTSTR)g_nTimeGet->UTF8ToUnicode(g_nTimeGet->allData[i].newData).c_str(), -1, &MoveRect, DT_LEFT);
MoveRect.left += 60;
wsprintf(szTextBuffer, TEXT("%s%\r\n%"), (LPCTSTR)g_nTimeGet->UTF8ToUnicode(g_nTimeGet->allData[i].changeData).c_str());
DrawText(nDC, szTextBuffer, -1, &MoveRect, DT_LEFT);
}
BitBlt(hDC, 60, 30, 300 , 300, nDC, 0, 0, SRCCOPY);
DeleteDC(nDC);
}
上面代码是我实现往屏幕上显示文字的,虽然已经画到屏幕上,可不知道为什么,只是一个点而已啊!!不知道错在哪了,改了很多次,都没行!!
希望高手指点,给高分!
...全文
相关推荐
MFC双缓冲画图实时显示
双缓冲画图是一种优化图形绘制的技术,它主要用于解决在窗口或控件中进行连续动画绘制时可能出现的闪烁问题。
Halcon+C#避坑指南:HSmartWindowControl鼠标缩放卡顿?试试这个双缓冲优化方案
本文针对Halcon的HSmartWindowControl控件在C# WinForm应用中显示高分辨率图像时,进行鼠标定点缩放操作出现卡顿和撕裂的问题,深入剖析了其默认绘制机制的瓶颈。通过引入自定义双缓冲控件和区域重绘策略,有效解决了性能问题,显著提升了缩放流畅度与显示帧率,为工业视觉等高性能图像显示场景提供了实用的优化方案。
双缓冲显示位图 解决刷新时的闪烁问题
为了解决这个问题,引入了双缓冲技术。双缓冲的基本原理是使用两个独立的内存区域,即后台缓冲区和前台缓冲区。后台缓冲区用于绘制新的图像,而前台缓冲区则负责显示。
用双缓冲的方式显示
为了改善这一情况,开发者通常会采用一种名为“双缓冲”(Double Buffering)的技术来解决图像显示过程中的闪烁问题。
vc 图片显示源码,双缓冲实现
在计算机编程领域,尤其是涉及到图形用户界面(GUI)开发时,"双缓冲"技术是一种常见的优化手段,用于解决图像更新时出现的闪烁问题。


界面
