C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[71662] gdi와 gdi+로 Text 출력중 특정 폰트는 화면에 표시를 못하는 문제??
leo21c [leo21c] 3605 읽음    2014-08-13 18:55
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);
}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
71662 gdi와 gdi+로 Text 출력중 특정 폰트는 화면에 표시를 못하는 문제?? leo21c 3605 2014/08/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.