ページ 1 / 1
Win32 api のプログラムについて質問があります
Posted: 2012年12月25日(火) 21:24
by SantaxPro
こんにちわ
質問おねがいします
Win32 apiって文字列を扱うときになぜ
TEXT("")の中に入れるようにしたりT("")のなかに入れたりしなければいけないのでしょうか?
また二次配列をつかうときはどのように記述すればいいのでしょうか?
頭の悪い質問してすみません
Re: Win32 api のプログラムについて質問があります
Posted: 2012年12月25日(火) 21:38
by softya(ソフト屋)
SantaxPro さんが書きました:Win32 apiって文字列を扱うときになぜ
TEXT("")の中に入れるようにしたりT("")のなかに入れたりしなければいけないのでしょうか?
TEXT()と_T()はマクロで、VC++文字コードの切り替えに対応するために存在します。
文字コードは、UNICODEとマルチバイト文字があるのですが、どちらにも対応できる様にするためのマクロなんですね。
まぁ、Windowsの日本語の歴史と関係するんですが初めマルチバイト文字(Sjis)があって、後からUNICODEが出てきたので両対応にしたと言うわけです。
Windows 95/98/Meにはマルチバイト文字しか使えません。
SantaxPro さんが書きました:また二次配列をつかうときはどのように記述すればいいのでしょうか?
頭の悪い質問してすみません
これはC言語の文法の話でしょうか?
状況が良く分かりません。
Re: Win32 api のプログラムについて質問があります
Posted: 2012年12月25日(火) 23:55
by ISLe
SantaxPro さんが書きました:Win32 apiって文字列を扱うときになぜ
TEXT("")の中に入れるようにしたりT("")のなかに入れたりしなければいけないのでしょうか?
TEXT,_Tマクロの使用目的は既に回答されていますが、使わなければいけない、ということはありません。
ANSI版のWin32 APIを使えば入れなくてもかまいません。
むしろ、プロジェクトがUnicode文字セットを使う設定になっていて、ANSI版のWin32 APIの引数でTEXTマクロを使うと、コンパイルエラーになります。
Re: Win32 api のプログラムについて質問があります
Posted: 2012年12月26日(水) 02:34
by YuO
ISLe さんが書きました:ANSI版のWin32 APIを使えば入れなくてもかまいません。
むしろ、プロジェクトがUnicode文字セットを使う設定になっていて、ANSI版のWin32 APIの引数でTEXTマクロを使うと、コンパイルエラーになります。
Unicode版を明示的に使う場合でもTEXTマクロは不要ですね。
- ANSI版 (CreateWindowExAなど) を明示的に使う場合は,標準文字列を使う
コード:
CreateWindowExA(0, "EDIT", .... )
- Unicode版 (CreateWindowExWなど) を明示的に使う場合は,ワイド文字列を使う
コード:
CreateWindowExW(0, L"EDIT", .... )
- ANSI/Unicode共通コード版 (CreateWindowExなど) を使う場合は,TEXTマクロを使う
コード:
CreateWindowEx(0, TEXT("EDIT"), .... )
Re: Win32 api のプログラムについて質問があります
Posted: 2012年12月26日(水) 07:44
by SantaxPro
回答ありがとうございます 返信遅くなってすみません
使う目的はわかりました
二個目の質問は コンソールアプリケーションでの
str[3][10] = ("林檎","ゴリラ","ラッパ"
"パンツ", "釣り", "リンパ球"
"ウサギ", "義理", "利子");
を
static LPCTSTR str[3][10] = TEXT("林檎","ゴリラ","ラッパ"
"パンツ", "釣り", "リンパ球"
"ウサギ", "義理", "利子"););
みたいになのを
両方に対応できるように_T("")とかTEXT("")とかを使って書くにはどうしたらいいんでしょうか?
Re: Win32 api のプログラムについて質問があります
Posted: 2012年12月26日(水) 09:49
by YuO
SantaxPro さんが書きました:str[3][10] = ("林檎","ゴリラ","ラッパ"
"パンツ", "釣り", "リンパ球"
"ウサギ", "義理", "利子");
を
static LPCTSTR str[3][10] = TEXT("林檎","ゴリラ","ラッパ"
"パンツ", "釣り", "リンパ球"
"ウサギ", "義理", "利子"););
みたいになのを
両方に対応できるように_T("")とかTEXT("")とかを使って書くにはどうしたらいいんでしょうか?
TEXTマクロや_Tマクロは,文字列単位で使います。
つまり,
コード:
{ TEXT("林檎"), TEXT("ゴリラ"), ... }
のように使う必要があります。
Re: Win32 api のプログラムについて質問があります
Posted: 2012年12月26日(水) 22:42
by SantaxPro
また返信遅くなってすみません
理解できましたありがとうございました