C++ 在POS打印机上打印条形码字体

C++ 在POS打印机上打印条形码字体,c++,barcode,gdi,C++,Barcode,Gdi,我正在尝试使用CreateFont加载代码128字体,以便可以在纸条上输出条形码。CreateFont没有返回NULL,但似乎找不到正确的字体,并且在将代码打印为纯文本时正在加载其他内容 这是条形码功能 void EpicSlipPrinter::addBarcode ( const QString& text ) { HFONT tempFont = CreateFont ( 60 , 0 , 0 , 0 , 0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , L

我正在尝试使用CreateFont加载代码128字体,以便可以在纸条上输出条形码。CreateFont没有返回NULL,但似乎找不到正确的字体,并且在将代码打印为纯文本时正在加载其他内容

这是条形码功能

void EpicSlipPrinter::addBarcode ( const QString& text )
{
  HFONT tempFont = CreateFont ( 60 , 0 , 0 , 0 , 0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , L"Code 128" );
  oFont = (HFONT)SelectObject ( mPrinterHandle , tempFont );

  INT ixPosition = iPaperWidth / 2;

  SIZE sz = getTextDimensions ( text , 3 , 3 , 600 , 0 , 0 );

  SetTextAlign ( mPrinterHandle , TA_CENTER );

  TextOut ( mPrinterHandle , ixPosition , iyPosition , text , text.length () );

  SelectObject ( mPrinterHandle , oFont );
  DeleteObject( tempFont );
}
text参数绝对正确,因此我认为CreateFont无法找到指定的字体,并且默认为其他字体。字体加载正确,可以从Windows应用程序中选择,如果我在Word中键入代码,则可以从扫描仪中读取条形码


我的问题是,是否有人知道CreateFont为什么不加载代码128,或者我是否缺少另一个问题?

您为fdwCharSet指定了0,它对应于ANSI_字符集,因此字体映射程序正在寻找支持当前代码页的内容。尝试使用SYMBOL_字符集来处理这些特殊字体。

只要我活着,我就永远不会理解微软的字体映射器。字体名称应该是最重要的输入,但事实并非如此。@Mark Ransom:始终使用字体名称的问题在于,在其他脚本中打印文本时,无法获得字体链接。较新的API,如DirectWrite,似乎完全避免了这种字符集遗留内容。尽管它与文档不太一致,但我认为您可以始终使用默认字符集,这似乎为字体名称提供了先例。(它适用于Marlett和我尝试过的其他专业符号字体。我没有代码128。)您好,很抱歉延迟接受正确答案。使用SYMBOL_字符集有效,我尝试了DEFAULT_字符集,但我一定是因为某种原因错过了SYMBOL的存在。谢谢我刚刚看到这篇古老的文章,它在字体映射器为候选字体评分时使用的惩罚末尾有一个表格。请注意,字符集的重量比面名称重得多。