请教如何获取字体的点阵信息? 如上 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //it is bcb codeunsigned long __stdcall GetCHNFont( char * lpszOutString, char * lpszBuffer, char * lpszStringName, char * lpszFontName, int nHeight, int nWidth, bool ftbBold, bool ftbItalic, bool ftbUnderline, bool ftbStrikeOut, int nAngle )//根据输入的字串,取字符点阵,返回点阵的十六进制字串到缓冲区中{ return GetCHNFontEx( lpszOutString, lpszBuffer, lpszStringName, lpszFontName, nHeight, nWidth, ftbBold, ftbItalic, ftbUnderline, ftbStrikeOut, nAngle, 0,0,0,0,0 );}//---------------------------------------------------------------------------unsigned long __stdcall GetCHNFontEx( char * lpszOutString, char * lpszBuffer, char * lpszStringName, char * lpszFontName, int nHeight, int nWidth, bool ftbBold, bool ftbItalic, bool ftbUnderline, bool ftbStrikeOut, int nAngle, DWORD ftwCharSet, DWORD fdwOutputPrecision, DWORD fdwClipPrecision, DWORD fdwQuality, DWORD fdwPitchAndFamily )//根据输入的字串,取字符点阵,返回点阵的十六进制字串到缓冲区中{ if (lpszOutString==NULL || Trim((AnsiString)lpszOutString)=="") return 0; //空字串,返回 HDC hDC; HBITMAP hBitmap,hOldBMP; HFONT hFont,hOldFont; SIZE size1; if ((hDC=GetDC(0))==NULL) return 2; //不能取得DC句柄 if ((hDC=CreateCompatibleDC(hDC))==NULL) return 3; //不能建立内存图形设备CreateCompatibleDC if ((hFont=CreateFont( nHeight, nWidth, nAngle, nAngle, (ftbBold?700:0), ftbItalic, ftbUnderline, ftbStrikeOut, ftwCharSet, fdwOutputPrecision, fdwClipPrecision, fdwQuality, fdwPitchAndFamily, lpszFontName ))==NULL) return 1; //不能创建逻辑字体 if ((hOldFont=SelectObject(hDC,hFont))==NULL) return 1; GetTextExtentPoint32(hDC,lpszOutString,StrLen(lpszOutString),&size1); unsigned int nOneLineSize = (size1.cx/8+(size1.cx%8?1:0)); if (lpszBuffer==NULL) { //若缓冲区为空,返回所需缓冲区的大小 return (nOneLineSize * 2 * size1.cy + StrLen(lpszStringName) + Trim(IntToStr(nOneLineSize*size1.cy)).Length() + Trim(IntToStr(nOneLineSize)).Length() + 10 //"~DGR:,,," ); } if ((hBitmap=CreateCompatibleBitmap(hDC,size1.cx,size1.cy))==NULL) { //不能创建位图设备CreateCompatibleBitmap SelectObject(hDC,hOldFont); DeleteObject(hFont); DeleteDC(hDC); return 4; } if ((hOldBMP=SelectObject(hDC,hBitmap))==NULL) { SelectObject(hDC,hOldFont); DeleteObject(hBitmap); DeleteObject(hFont); DeleteDC(hDC); return 4; } SetBkColor(hDC,BackColor); SetTextColor(hDC,TextColor); FillRect(hDC,&Rect(0,0,size1.cx,size1.cy),0); //???? //BitBlt(GetDC(0),0,0,size1.cx,size1.cy,hDC,0,0,SRCCOPY); TextOut(hDC,0,0,lpszOutString,StrLen(lpszOutString)); //BitBlt(GetDC(0),0,0,size1.cx,size1.cy,hDC,0,0,SRCCOPY); //取点串点阵 unsigned char bits,k; char cHex[] = "0123456789ABCDEF"; char *lpBuffer = lpszBuffer; StrCopy(lpszBuffer, "~DGR:"); StrCat(lpszBuffer, lpszStringName); StrCat(lpszBuffer, (","+Trim(IntToStr(nOneLineSize*size1.cy))+","+Trim(IntToStr(nOneLineSize))+",").c_str()); lpBuffer += StrLen(lpszBuffer); for (int i=0;i<size1.cy;i++) { bits = 0; k = 0x80; for (int j=0;j<size1.cx;j++) { if (GetPixel(hDC,j,i)==TextColor) bits|=k; k>>=1; if (!k) { *lpBuffer++ = cHex[bits>>4]; *lpBuffer++ = cHex[bits&0xF]; bits = 0; k = 0x80; } } if (k && k<0x80) { *lpBuffer++= cHex[bits>>4]; *lpBuffer++ = cHex[bits&0xF]; } } *lpBuffer = 0; SelectObject(hDC,hOldBMP); SelectObject(hDC,hOldFont); DeleteObject(hBitmap); DeleteObject(hFont); DeleteDC(hDC); return (lpBuffer - lpszBuffer);}//---------------------------------------------------------------------------extern "C" __declspec(dllexport) unsigned long __stdcall GetBufferSize( char * lpszOutString, char * lpszStringName, char * lpszFontName, int nHeight, int nWidth, bool ftbBold, bool ftbItalic, bool ftbUnderline, bool ftbStrikeOut, int nAngle ){ return GetCHNFontEx( lpszOutString, NULL, lpszStringName, lpszFontName, nHeight, nWidth, ftbBold, ftbItalic, ftbUnderline, ftbStrikeOut, nAngle, 0,0,0,0,0 );}//---------------------------------------------------------------------------extern "C" __declspec(dllexport) unsigned long __stdcall GetBufferSizeEx( char * lpszOutString, char * lpszStringName, char * lpszFontName, int nHeight, int nWidth, bool ftbBold, bool ftbItalic, bool ftbUnderline, bool ftbStrikeOut, int nAngle, DWORD ftwCharSet, DWORD fdwOutputPrecision, DWORD fdwClipPrecision,DWORD fdwQuality, DWORD fdwPitchAndFamily ){ return GetCHNFontEx( lpszOutString, NULL, lpszStringName, lpszFontName, nHeight, nWidth, ftbBold, ftbItalic, ftbUnderline, ftbStrikeOut, nAngle, ftwCharSet, fdwOutputPrecision, fdwClipPrecision, fdwQuality, fdwPitchAndFamily );}//---------------------------------------------------------------------------unsigned int __stdcall Getversion(void){ return 1;} recvfrom收到数据,但严重延时。 CStatic控件窗口背景刷新问题 如何取得绘出的对象? 求,二值化图像的自动纠偏算法 Ping程序的错误!以及如何获取一个u_char型变量的低四位或是高四位!急 请问数学在写程序中真的很重要吗? 如何使devc++使用vc的winsock的库 谁知道双击标题栏的消息是什么?值是多少? 信号处理中的滤波问题 怎么把“0xBFFE”字符串转换为整型输出 关于CListCtrl 请教,xp下程序启动的时候报错failed to create empty document
unsigned long __stdcall GetCHNFont(
char * lpszOutString, char * lpszBuffer,
char * lpszStringName, char * lpszFontName,
int nHeight, int nWidth,
bool ftbBold, bool ftbItalic,
bool ftbUnderline, bool ftbStrikeOut,
int nAngle
)//根据输入的字串,取字符点阵,返回点阵的十六进制字串到缓冲区中
{
return GetCHNFontEx(
lpszOutString, lpszBuffer, lpszStringName, lpszFontName,
nHeight, nWidth, ftbBold, ftbItalic, ftbUnderline,
ftbStrikeOut, nAngle, 0,0,0,0,0
);
}
//---------------------------------------------------------------------------unsigned long __stdcall GetCHNFontEx(
char * lpszOutString, char * lpszBuffer,
char * lpszStringName, char * lpszFontName,
int nHeight, int nWidth,
bool ftbBold, bool ftbItalic,
bool ftbUnderline, bool ftbStrikeOut,
int nAngle, DWORD ftwCharSet,
DWORD fdwOutputPrecision, DWORD fdwClipPrecision,
DWORD fdwQuality, DWORD fdwPitchAndFamily
)//根据输入的字串,取字符点阵,返回点阵的十六进制字串到缓冲区中
{
if (lpszOutString==NULL || Trim((AnsiString)lpszOutString)=="") return 0; //空字串,返回 HDC hDC;
HBITMAP hBitmap,hOldBMP;
HFONT hFont,hOldFont;
SIZE size1; if ((hDC=GetDC(0))==NULL) return 2; //不能取得DC句柄
if ((hDC=CreateCompatibleDC(hDC))==NULL) return 3; //不能建立内存图形设备CreateCompatibleDC
if ((hFont=CreateFont(
nHeight, nWidth, nAngle, nAngle,
(ftbBold?700:0), ftbItalic, ftbUnderline, ftbStrikeOut,
ftwCharSet, fdwOutputPrecision, fdwClipPrecision,
fdwQuality, fdwPitchAndFamily, lpszFontName
))==NULL)
return 1; //不能创建逻辑字体
if ((hOldFont=SelectObject(hDC,hFont))==NULL) return 1; GetTextExtentPoint32(hDC,lpszOutString,StrLen(lpszOutString),&size1);
unsigned int nOneLineSize = (size1.cx/8+(size1.cx%8?1:0));
if (lpszBuffer==NULL)
{ //若缓冲区为空,返回所需缓冲区的大小
return (nOneLineSize * 2 * size1.cy + StrLen(lpszStringName) +
Trim(IntToStr(nOneLineSize*size1.cy)).Length() +
Trim(IntToStr(nOneLineSize)).Length() + 10 //"~DGR:,,,"
);
} if ((hBitmap=CreateCompatibleBitmap(hDC,size1.cx,size1.cy))==NULL)
{ //不能创建位图设备CreateCompatibleBitmap
SelectObject(hDC,hOldFont);
DeleteObject(hFont);
DeleteDC(hDC);
return 4;
}
if ((hOldBMP=SelectObject(hDC,hBitmap))==NULL)
{
SelectObject(hDC,hOldFont);
DeleteObject(hBitmap);
DeleteObject(hFont);
DeleteDC(hDC);
return 4;
} SetBkColor(hDC,BackColor);
SetTextColor(hDC,TextColor);
FillRect(hDC,&Rect(0,0,size1.cx,size1.cy),0); //????
//BitBlt(GetDC(0),0,0,size1.cx,size1.cy,hDC,0,0,SRCCOPY); TextOut(hDC,0,0,lpszOutString,StrLen(lpszOutString));
//BitBlt(GetDC(0),0,0,size1.cx,size1.cy,hDC,0,0,SRCCOPY); //取点串点阵
unsigned char bits,k;
char cHex[] = "0123456789ABCDEF";
char *lpBuffer = lpszBuffer;
StrCopy(lpszBuffer, "~DGR:");
StrCat(lpszBuffer, lpszStringName);
StrCat(lpszBuffer, (","+Trim(IntToStr(nOneLineSize*size1.cy))+","+Trim(IntToStr(nOneLineSize))+",").c_str());
lpBuffer += StrLen(lpszBuffer); for (int i=0;i<size1.cy;i++)
{
bits = 0;
k = 0x80;
for (int j=0;j<size1.cx;j++)
{
if (GetPixel(hDC,j,i)==TextColor) bits|=k;
k>>=1;
if (!k)
{
*lpBuffer++ = cHex[bits>>4];
*lpBuffer++ = cHex[bits&0xF];
bits = 0;
k = 0x80;
}
}
if (k && k<0x80)
{
*lpBuffer++= cHex[bits>>4];
*lpBuffer++ = cHex[bits&0xF];
}
}
*lpBuffer = 0; SelectObject(hDC,hOldBMP);
SelectObject(hDC,hOldFont);
DeleteObject(hBitmap);
DeleteObject(hFont);
DeleteDC(hDC); return (lpBuffer - lpszBuffer);
}
//---------------------------------------------------------------------------extern "C" __declspec(dllexport) unsigned long __stdcall GetBufferSize(
char * lpszOutString, char * lpszStringName, char * lpszFontName,
int nHeight, int nWidth, bool ftbBold,
bool ftbItalic, bool ftbUnderline, bool ftbStrikeOut,
int nAngle
)
{
return GetCHNFontEx(
lpszOutString, NULL, lpszStringName, lpszFontName,
nHeight, nWidth, ftbBold, ftbItalic, ftbUnderline,
ftbStrikeOut, nAngle, 0,0,0,0,0
);
}
//---------------------------------------------------------------------------extern "C" __declspec(dllexport) unsigned long __stdcall GetBufferSizeEx(
char * lpszOutString, char * lpszStringName, char * lpszFontName,
int nHeight, int nWidth, bool ftbBold,
bool ftbItalic, bool ftbUnderline, bool ftbStrikeOut,
int nAngle, DWORD ftwCharSet, DWORD fdwOutputPrecision,
DWORD fdwClipPrecision,DWORD fdwQuality, DWORD fdwPitchAndFamily
)
{
return GetCHNFontEx(
lpszOutString, NULL, lpszStringName, lpszFontName,
nHeight, nWidth, ftbBold, ftbItalic, ftbUnderline,
ftbStrikeOut, nAngle, ftwCharSet, fdwOutputPrecision,
fdwClipPrecision, fdwQuality, fdwPitchAndFamily
);
}
//---------------------------------------------------------------------------unsigned int __stdcall Getversion(void)
{
return 1;
}