各国版のWindowsでの英数表示について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
cattail
記事: 75
登録日時: 6年前

各国版のWindowsでの英数表示について

#1

投稿記事 by cattail » 4年前

いつもお世話になっております。
また教えて頂きたいのですが、
directxで以下のように半角英数のテキスト表示したとき、英語版windowsなどの各国版のwindowsでも正常に表示されるものでしょうか?
よろしくお願い致します。

コード:

 
D3DXCreateFont(pDevice,16,16,FW_REGULAR,NULL,FALSE,SHIFTJIS_CHARSET,
	OUT_DEFAULT_PRECIS,PROOF_QUALITY,FIXED_PITCH | FF_MODERN, "arial", &pFont );
char co[20];
sprintf_s(co,"ABCDEFG0123456",NULL);
RenderString(co,0,0);

cattail
記事: 75
登録日時: 6年前

Re: 各国版のWindowsでの英数表示について

#2

投稿記事 by cattail » 4年前

ネットで調べているのですが、
Tahoma、Microsoft Sans Serif、Arialであれば大丈夫というネット上での記述を見つけましたが、
Unicode、マルチバイト、どちらのコンパイルでも大丈夫なのでしょうか?

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: 各国版のWindowsでの英数表示について

#3

投稿記事 by YuO » 4年前

MSDN読むとGDIと同様の方法を使っていると思われるので,そういう仮定の上で。

文字集合の指定がSHIFTJIS_CHARSETですが,Arialを指定したいのであればCharSetの値を,
・SHIFTJIS_CHARSETではなくArial自身がサポートする言語,例えばANSI_CHARSETを指定する
・「気にしない」ことを意味するDEFAULT_CHARSETを指定する
などとした方がよいでしょう。
一応,公式資料ではCharSetは(GDIにおいてですが)不一致は最大のペナルティとされているので。
Windows Font Mapping

cattail
記事: 75
登録日時: 6年前

Re: 各国版のWindowsでの英数表示について

#4

投稿記事 by cattail » 4年前

ご返事ありがとうございます。
英字1byte文字はANSI_CHARSETかDEFAULT_CHARSETがいいようなので、
とりあえずANSI_CHARSETでやってみます。
GDIでCharSet不一致は最大のペナルティというのも全然知りませんでした。
でも、やってみるのはいいのですが、確認の方法が今は無いのです。
英語版Windows買って試してみようかな?

naohiro19
記事: 256
登録日時: 9年前
住所: 愛知県

Re: 各国版のWindowsでの英数表示について

#5

投稿記事 by naohiro19 » 4年前

CreateFont 関数の dwCharSet に HANGUL_CHARSET を指定し、lpszFace に TEXT("Gulim") を指定すれば、英語版でも日本語版でも韓国語を表示することができます。

cattail
記事: 75
登録日時: 6年前

Re: 各国版のWindowsでの英数表示について

#6

投稿記事 by cattail » 4年前

ご返事ありがとうございます。
参考にさせて頂きます。

全ての国の言語に対応できませんので、
共通語の英語で間に合わせたいです。
save、load、yes、noなど、簡単な単語が文字化けしなければいいかなと思っています。

cattail
記事: 75
登録日時: 6年前

Re: 各国版のWindowsでの英数表示について

#7

投稿記事 by cattail » 4年前

とりあえずArial + ANSI_CHARSETでやってみています。
これで解決とさせて頂きます。
ありがとうございました!

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: 各国版のWindowsでの英数表示について

#8

投稿記事 by YuO » 4年前

単純に文字化けしない,という点で言うと,CharSetに指定した文字コードを持つフォントの中から選ばれるため,そのようなフォントさえあれば文字化けしません。
ただし,SHIFTJIS_CHARSETにArialが対応していないため,Arialが使われない,ということになります。

以下のコードを実行すると,Arialという文字列が異なって表示されると思います。
これは,上部分はArialでないフォントが選択されたための結果です。

コード:

#include <Windows.h>

void OnPaint(::HWND hWnd)
{
	::PAINTSTRUCT ps;
	auto hdc = ::BeginPaint(hWnd, &ps);
	::LOGFONT lf1 = { 0 };
	lf1.lfHeight = 200;
	lf1.lfCharSet = SHIFTJIS_CHARSET;
	::lstrcpy(lf1.lfFaceName, TEXT("Arial"));
	::LOGFONT lf2 = { 0 };
	lf2.lfHeight = 200;
	lf2.lfCharSet = ANSI_CHARSET;
	::lstrcpy(lf2.lfFaceName, TEXT("Arial"));
	auto font1 = ::CreateFontIndirect(&lf1);
	auto font2 = ::CreateFontIndirect(&lf2);
	auto oldFont = ::SelectObject(hdc, font1);
	::TextOut(hdc, 0, 0, TEXT("Arial"), 5);
	::SelectObject(hdc, font2);
	::TextOut(hdc, 0, 200, TEXT("Arial"), 5);
	::SelectObject(hdc, oldFont);
	::DeleteObject(font1);
	::DeleteObject(font2);
	::EndPaint(hWnd, &ps);
}

::LRESULT CALLBACK WndProc(::HWND hWnd, ::UINT uMsg, ::WPARAM wParam, ::LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_CLOSE:
		::DestroyWindow(hWnd);
		return 0;
	case WM_DESTROY:
		::PostQuitMessage(0);
		return 0;
	case WM_PAINT:
		OnPaint(hWnd);
		return 0;
	}
	return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
}

int WINAPI WinMain(::HINSTANCE, ::HINSTANCE, ::LPSTR, int nCmdShow)
{
	::WNDCLASS wc = { 0 };
	wc.style = CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc = WndProc;
	wc.hIcon = ::LoadIcon(nullptr, IDI_APPLICATION);
	wc.hCursor = ::LoadCursor(nullptr, IDC_ARROW);
	wc.hbrBackground = reinterpret_cast<::HBRUSH>(COLOR_WINDOW + 1);
	wc.lpszClassName = TEXT("TestClass");
	auto atomValue = ::RegisterClass(&wc);

	auto hWnd = ::CreateWindow(reinterpret_cast<::LPCTSTR>(atomValue), TEXT("Test Window"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, nullptr, nullptr, nullptr, nullptr);

	::ShowWindow(hWnd, nCmdShow);

	::MSG msg;
	::BOOL result;
	while ((result = ::GetMessage(&msg, nullptr, 0, 0)) != 0 && result != -1)
	{
		::TranslateMessage(&msg);
		::DispatchMessage(&msg);
	}
	if (result == -1)
	{
		return ::GetLastError();
	}
	return msg.wParam;
}

cattail
記事: 75
登録日時: 6年前

Re: 各国版のWindowsでの英数表示について

#9

投稿記事 by cattail » 4年前

サンプルプログラムまで用意して頂いて恐縮です。
色々試しながら作っていきたいと思います。
ありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る