win7 透明成效 字体移动
win7 透明效果 字体移动
先帖点代码,也都是网上当的
[code=C/C++][/code]
//----------------------
// OnEraseBkgnd的处理
.......
GetClientRect ( &rcClient );
rcText = rcClient;
if(IsCompositionEnabled())
{
pDC->FillSolidRect ( &rcClient, RGB(0,0,0) );
bDrawFlag = FALSE;
int cx = rcText.right - rcText.left;
int cy = rcText.bottom - rcText.top;
// 设置一个我们将绘制的内存DC和位图
dcMem.CreateCompatibleDC (pDC);
dib.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
dib.bmiHeader.biWidth = cx;
dib.bmiHeader.biHeight = -cy;
dib.bmiHeader.biPlanes = 1;
dib.bmiHeader.biBitCount = 32;
dib.bmiHeader.biCompression = BI_RGB;
hBitmap = CreateDIBSection (pDC->m_hDC,&dib,DIB_RGB_COLORS,NULL,NULL,0);
if(hBitmap)
{
nCount += 1;
//BeginPath(pDC->m_hDC);
// 设置DC
hOldBitmap = (HBITMAP)SelectObject(dcMem.m_hDC,hBitmap);
hOldFont = (HFONT)dcMem.SelectObject(m_font );
dcMem.SetBkMode ( TRANSPARENT );
// 绘制文本
dto.dwFlags = DTT_COMPOSITED|DTT_GLOWSIZE|DTT_TEXTCOLOR|DT_RTLREADING;
// 字体发光大小
dto.iGlowSize = 10;
dto.crText = RGB(255,0,0);
rcText2 = rcText;
hRet = DrawThemeTextEx(m_hTheme, dcMem, 0, 0, CT2CW(_T("测试应用程序")), -1,
DT_SINGLELINE|DT_CENTER|DT_BOTTOM|DT_NOPREFIX|DT_NOCLIP|DT_WORD_ELLIPSIS,
&rcText2, &dto );
// 将文本绘制到屏幕上。
BitBlt ( pDC->m_hDC, rcText.left, rcText.top,cx, cy, dcMem, 0, 0, SRCCOPY );
//EndPath(pDC->m_hDC);
dcMem.SelectObject(hOldBitmap);
dcMem.SelectObject(hOldFont);
DeleteObject(hBitmap);
dcMem.DeleteDC();
}
}
.......
现在界面能显示透明效果,字体及位置(中间)也显示正常
但在改变窗口大小时,文字并不移动,很是怪??
测试:在窗口大小改变时擦除背景率很高,怀疑像素更新得太快,,,
求助于大侠能否有解决之策,实现像word2010标题栏上字体总是在中间的效果
------解决方案--------------------
你没有用双缓存
------解决方案--------------------
你没有CreateCompatibleBitmap
先帖点代码,也都是网上当的
[code=C/C++][/code]
//----------------------
// OnEraseBkgnd的处理
.......
GetClientRect ( &rcClient );
rcText = rcClient;
if(IsCompositionEnabled())
{
pDC->FillSolidRect ( &rcClient, RGB(0,0,0) );
bDrawFlag = FALSE;
int cx = rcText.right - rcText.left;
int cy = rcText.bottom - rcText.top;
// 设置一个我们将绘制的内存DC和位图
dcMem.CreateCompatibleDC (pDC);
dib.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
dib.bmiHeader.biWidth = cx;
dib.bmiHeader.biHeight = -cy;
dib.bmiHeader.biPlanes = 1;
dib.bmiHeader.biBitCount = 32;
dib.bmiHeader.biCompression = BI_RGB;
hBitmap = CreateDIBSection (pDC->m_hDC,&dib,DIB_RGB_COLORS,NULL,NULL,0);
if(hBitmap)
{
nCount += 1;
//BeginPath(pDC->m_hDC);
// 设置DC
hOldBitmap = (HBITMAP)SelectObject(dcMem.m_hDC,hBitmap);
hOldFont = (HFONT)dcMem.SelectObject(m_font );
dcMem.SetBkMode ( TRANSPARENT );
// 绘制文本
dto.dwFlags = DTT_COMPOSITED|DTT_GLOWSIZE|DTT_TEXTCOLOR|DT_RTLREADING;
// 字体发光大小
dto.iGlowSize = 10;
dto.crText = RGB(255,0,0);
rcText2 = rcText;
hRet = DrawThemeTextEx(m_hTheme, dcMem, 0, 0, CT2CW(_T("测试应用程序")), -1,
DT_SINGLELINE|DT_CENTER|DT_BOTTOM|DT_NOPREFIX|DT_NOCLIP|DT_WORD_ELLIPSIS,
&rcText2, &dto );
// 将文本绘制到屏幕上。
BitBlt ( pDC->m_hDC, rcText.left, rcText.top,cx, cy, dcMem, 0, 0, SRCCOPY );
//EndPath(pDC->m_hDC);
dcMem.SelectObject(hOldBitmap);
dcMem.SelectObject(hOldFont);
DeleteObject(hBitmap);
dcMem.DeleteDC();
}
}
.......
现在界面能显示透明效果,字体及位置(中间)也显示正常
但在改变窗口大小时,文字并不移动,很是怪??
测试:在窗口大小改变时擦除背景率很高,怀疑像素更新得太快,,,
求助于大侠能否有解决之策,实现像word2010标题栏上字体总是在中间的效果
------解决方案--------------------
你没有用双缓存
------解决方案--------------------
你没有CreateCompatibleBitmap