为什么下面的代码的结果导致文字输出两边,我只用了一次drawtext(“自己喜欢什么”),结果却输出两词(输出两个“自己喜欢什么”),不知怎么搞得,请高手指教!谢谢
BITMAPINFO bminfo;
bminfo.bmiHeader.biWidth = nWidth;
bminfo.bmiHeader.biHeight = nHeight;
bminfo.bmiHeader.biBitCount = 8;//16Bit DIB
bminfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bminfo.bmiHeader.biClrImportant = 0;
bminfo.bmiHeader.biClrUsed = 0;
bminfo.bmiHeader.biCompression = 0;//BI_RGB;//5-5-5格式,如果是5-6-5,则为BI_BITFIELDS
bminfo.bmiHeader.biPlanes = 1;
bminfo.bmiHeader.biXPelsPerMeter = 0;
bminfo.bmiHeader.biYPelsPerMeter = 0;
bminfo.bmiHeader.biSizeImage = 0;
//构造5-5-5掩码,如果是5-6-5,则为:0xF800、0x07E0、0x001F
//bminfo.bmiColors[0].rgbBlue = 0;
//bminfo.bmiColors[0].rgbGreen = 0x7C;
//bminfo.bmiColors[0].rgbRed = 0;
// bminfo.bmiColors[0].rgbReserved = 0;
//bminfo.bmiColors[1].rgbBlue = 0xE0;
//bminfo.bmiColors[1].rgbGreen = 0x03;
//bminfo.bmiColors[1].rgbRed = 0;
//bminfo.bmiColors[1].rgbReserved = 0;
//bminfo.bmiColors[2].rgbBlue = 0x1F;
//bminfo.bmiColors[2].rgbGreen = 0;
//bminfo.bmiColors[2].rgbRed = 0;
//bminfo.bmiColors[2].rgbReserved = 0;
void *pImage = NULL;
//Create a hbitmap
HBITMAP hBitmap = CreateDIBSection(pDC->m_hDC,(CONST BITMAPINFO *)
&bminfo,DIB_RGB_COLORS,
&pImage,NULL,0);
//假如你的数据已经是位图格式则如下:
WORD m_nBytesPerLine = bminfo.bmiHeader.biWidth;//计算行字节
//4字节对齐
if(m_nBytesPerLine % 4 != 0)
m_nBytesPerLine = (m_nBytesPerLine / 4 + 1) * 4;
DWORD dwLen = m_nBytesPerLine * bminfo.bmiHeader.biHeight;
memcpy(pImage,pBits,dwLen);
//now ok.draw it..
//CDC *pDC1 = ::GetDC(NULL);
CDC *m_pMemDC = new CDC;
m_pMemDC->CreateCompatibleDC(pDC);
CBitmap *m_pBitmap = new CBitmap;
m_pBitmap->Attach(hBitmap);
CBitmap *pOldBitmap = (CBitmap *)m_pMemDC->SelectObject(m_pBitmap);
m_pMemDC->SetBkMode(TRANSPARENT);
//
//choose the font
m_pMemDC->SetTextColor(RGB(255,255,255));
CFont m_Font;
LOGFONT* m_pLF;
m_pLF=(LOGFONT*)calloc(1,sizeof(LOGFONT));
strncpy(m_pLF->lfFaceName,"Times New Roman",31);
m_pLF->lfHeight=64;
m_pLF->lfWeight=600;
m_pLF->lfItalic=0;
m_pLF->lfUnderline=0;
m_Font.CreateFontIndirect(m_pLF);
//select the font in the dc
//CDC dc;
//dc.Attach(TmpDC);
CFont* pOldFont=NULL;
if (m_Font.m_hObject)
pOldFont = m_pMemDC->SelectObject(&m_Font);
else
m_pMemDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT));
//Set text color
//dc.SetTextColor(RGB(60,120,240));
//Set text position;
RECT pos = {40,40,500,500};
//draw the text
m_pMemDC->SetBkMode(TRANSPARENT);
//m_pMemDC->DrawText("Test",4,&pos,DT_CALCRECT);
m_pMemDC->DrawText("自己喜欢什么",20,&pos,DT_TOP ); //font->GetLogFont(&logfont);
free(m_pLF); //m_pMemDC->SelectObject(pOld);
//m_pMemDC->SetTextColor(old);
memcpy(pBits,pImage,dwLen);
m_pMemDC->SelectObject(pOldBitmap);
delete m_pMemDC;
m_pBitmap->Detach();
delete m_pBitmap;
//ReleaseDC(NULL,pDC);
//最后,把HBITMAP del掉
DeleteObject(hBitmap);
return true;
BITMAPINFO bminfo;
bminfo.bmiHeader.biWidth = nWidth;
bminfo.bmiHeader.biHeight = nHeight;
bminfo.bmiHeader.biBitCount = 8;//16Bit DIB
bminfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bminfo.bmiHeader.biClrImportant = 0;
bminfo.bmiHeader.biClrUsed = 0;
bminfo.bmiHeader.biCompression = 0;//BI_RGB;//5-5-5格式,如果是5-6-5,则为BI_BITFIELDS
bminfo.bmiHeader.biPlanes = 1;
bminfo.bmiHeader.biXPelsPerMeter = 0;
bminfo.bmiHeader.biYPelsPerMeter = 0;
bminfo.bmiHeader.biSizeImage = 0;
//构造5-5-5掩码,如果是5-6-5,则为:0xF800、0x07E0、0x001F
//bminfo.bmiColors[0].rgbBlue = 0;
//bminfo.bmiColors[0].rgbGreen = 0x7C;
//bminfo.bmiColors[0].rgbRed = 0;
// bminfo.bmiColors[0].rgbReserved = 0;
//bminfo.bmiColors[1].rgbBlue = 0xE0;
//bminfo.bmiColors[1].rgbGreen = 0x03;
//bminfo.bmiColors[1].rgbRed = 0;
//bminfo.bmiColors[1].rgbReserved = 0;
//bminfo.bmiColors[2].rgbBlue = 0x1F;
//bminfo.bmiColors[2].rgbGreen = 0;
//bminfo.bmiColors[2].rgbRed = 0;
//bminfo.bmiColors[2].rgbReserved = 0;
void *pImage = NULL;
//Create a hbitmap
HBITMAP hBitmap = CreateDIBSection(pDC->m_hDC,(CONST BITMAPINFO *)
&bminfo,DIB_RGB_COLORS,
&pImage,NULL,0);
//假如你的数据已经是位图格式则如下:
WORD m_nBytesPerLine = bminfo.bmiHeader.biWidth;//计算行字节
//4字节对齐
if(m_nBytesPerLine % 4 != 0)
m_nBytesPerLine = (m_nBytesPerLine / 4 + 1) * 4;
DWORD dwLen = m_nBytesPerLine * bminfo.bmiHeader.biHeight;
memcpy(pImage,pBits,dwLen);
//now ok.draw it..
//CDC *pDC1 = ::GetDC(NULL);
CDC *m_pMemDC = new CDC;
m_pMemDC->CreateCompatibleDC(pDC);
CBitmap *m_pBitmap = new CBitmap;
m_pBitmap->Attach(hBitmap);
CBitmap *pOldBitmap = (CBitmap *)m_pMemDC->SelectObject(m_pBitmap);
m_pMemDC->SetBkMode(TRANSPARENT);
//
//choose the font
m_pMemDC->SetTextColor(RGB(255,255,255));
CFont m_Font;
LOGFONT* m_pLF;
m_pLF=(LOGFONT*)calloc(1,sizeof(LOGFONT));
strncpy(m_pLF->lfFaceName,"Times New Roman",31);
m_pLF->lfHeight=64;
m_pLF->lfWeight=600;
m_pLF->lfItalic=0;
m_pLF->lfUnderline=0;
m_Font.CreateFontIndirect(m_pLF);
//select the font in the dc
//CDC dc;
//dc.Attach(TmpDC);
CFont* pOldFont=NULL;
if (m_Font.m_hObject)
pOldFont = m_pMemDC->SelectObject(&m_Font);
else
m_pMemDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT));
//Set text color
//dc.SetTextColor(RGB(60,120,240));
//Set text position;
RECT pos = {40,40,500,500};
//draw the text
m_pMemDC->SetBkMode(TRANSPARENT);
//m_pMemDC->DrawText("Test",4,&pos,DT_CALCRECT);
m_pMemDC->DrawText("自己喜欢什么",20,&pos,DT_TOP ); //font->GetLogFont(&logfont);
free(m_pLF); //m_pMemDC->SelectObject(pOld);
//m_pMemDC->SetTextColor(old);
memcpy(pBits,pImage,dwLen);
m_pMemDC->SelectObject(pOldBitmap);
delete m_pMemDC;
m_pBitmap->Detach();
delete m_pBitmap;
//ReleaseDC(NULL,pDC);
//最后,把HBITMAP del掉
DeleteObject(hBitmap);
return true;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货