gdi+로 Text 출력을 하는데 특정 폰트에서는 화면에 출력이 안되는 현상이 있습니다.
문제가 있는 폰트는 여러개가 있지만 HY견고딕(HYGTRE.TTF)이라는 폰트가 있는데 이 폰트를 사용하면
?가 표시되지 않습니다.
당연히 트루타입 글꼴입니다. edit에 ?????????을 입력하고 출력을 하면 gdi+만 표시가 안됩니다.
GDI와 Direct2D (DirectWrite) API를 이용하면 정상적으로 화면에 표시가 됩니다.
MFC로도 만들어 봤는데 화면에 표시가 안되네요. 볼랜드의 문제는 아닌것으로 확인했습니다.
정말 신기합니다. 원인을 찾고 있는 중인데 혹시 경험이 있으신 분들은 답글 부탁드립니다.
혹시 몰라서 폰트도 첨부해서 올려봅니다.
1) header 내용
//---------------------------------------------------------------------------
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published: // IDE-managed Components
TImage *Image1;
TFontDialog *FontDialog1;
TButton *Button1;
TEdit *Edit1;
TButton *btnGDI;
TButton *btnGDIp;
TButton *btnImageApi;
TButton *btnClear;
void __fastcall Button1Click(TObject *Sender);
void __fastcall btnImageApiClick(TObject *Sender);
void __fastcall btnGDIClick(TObject *Sender);
void __fastcall btnGDIpClick(TObject *Sender);
void __fastcall FormDestroy(TObject *Sender);
void __fastcall btnClearClick(TObject *Sender);
private: // User declarations
ULONG_PTR gdp_token_; // using GDI+
public: // User declarations
__fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif
2) cpp 파일 내용
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "Unit2.h"
#include
#pragma link "gdiplus.lib"
namespace gdp = Gdiplus;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
gdp::GdiplusStartup(&gdp_token_, &gdp::GdiplusStartupInput(), NULL);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
FontDialog1->Execute();
Image1->Canvas->Font->Assign(FontDialog1->Font);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::btnImageApiClick(TObject *Sender)
{
Image1->Canvas->TextOut(100, 50, Edit1->Text);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::btnGDIClick(TObject *Sender)
{
HDC hDC = Image1->Canvas->Handle;
TextOut(hDC, 100, 100, Edit1->Text.w_str(), Edit1->Text.Length());
Image1->Invalidate();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::btnGDIpClick(TObject *Sender)
{
HDC hDC = Image1->Canvas->Handle;
gdp::Graphics graphics(hDC);
// Initialize arguments.
gdp::Font myFont(FontDialog1->Font->Name.w_str(), FontDialog1->Font->Size);
gdp::RectF layoutRect(100.0f, 150.0f, 200.0f, 300.f);
gdp::StringFormat format;
format.SetFormatFlags(gdp::StringFormatFlagsNoClip);
gdp::SolidBrush blackBrush(gdp::Color(255, 0, 0, 0));
// Draw string.
graphics.DrawString(
Edit1->Text.w_str(),
Edit1->Text.Length(),
&myFont,
layoutRect,
&format,
&blackBrush);
Image1->Invalidate();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormDestroy(TObject *Sender)
{
gdp::GdiplusShutdown(gdp_token_);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::btnClearClick(TObject *Sender)
{
TRect rect = TRect(0,0,Image1->Width, Image1->Height);
Image1->Canvas->Brush->Color = clWhite;
Image1->Canvas->FillRect(rect);
}
//---------------------------------------------------------------------------