Win32 api のプログラムについて質問があります

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

Win32 api のプログラムについて質問があります

#1

投稿記事 by SantaxPro » 11年前

こんにちわ
質問おねがいします

Win32 apiって文字列を扱うときになぜ
TEXT("")の中に入れるようにしたりT("")のなかに入れたりしなければいけないのでしょうか?

また二次配列をつかうときはどのように記述すればいいのでしょうか?
頭の悪い質問してすみません

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: Win32 api のプログラムについて質問があります

#2

投稿記事 by softya(ソフト屋) » 11年前

SantaxPro さんが書きました:Win32 apiって文字列を扱うときになぜ
TEXT("")の中に入れるようにしたりT("")のなかに入れたりしなければいけないのでしょうか?
TEXT()と_T()はマクロで、VC++文字コードの切り替えに対応するために存在します。
文字コードは、UNICODEとマルチバイト文字があるのですが、どちらにも対応できる様にするためのマクロなんですね。
まぁ、Windowsの日本語の歴史と関係するんですが初めマルチバイト文字(Sjis)があって、後からUNICODEが出てきたので両対応にしたと言うわけです。
Windows 95/98/Meにはマルチバイト文字しか使えません。
SantaxPro さんが書きました:また二次配列をつかうときはどのように記述すればいいのでしょうか?
頭の悪い質問してすみません
これはC言語の文法の話でしょうか?
状況が良く分かりません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: Win32 api のプログラムについて質問があります

#3

投稿記事 by ISLe » 11年前

SantaxPro さんが書きました:Win32 apiって文字列を扱うときになぜ
TEXT("")の中に入れるようにしたりT("")のなかに入れたりしなければいけないのでしょうか?
TEXT,_Tマクロの使用目的は既に回答されていますが、使わなければいけない、ということはありません。

ANSI版のWin32 APIを使えば入れなくてもかまいません。
むしろ、プロジェクトがUnicode文字セットを使う設定になっていて、ANSI版のWin32 APIの引数でTEXTマクロを使うと、コンパイルエラーになります。

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

Re: Win32 api のプログラムについて質問があります

#4

投稿記事 by YuO » 11年前

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"), .... )

SantaxPro
記事: 14
登録日時: 11年前

Re: Win32 api のプログラムについて質問があります

#5

投稿記事 by SantaxPro » 11年前

回答ありがとうございます 返信遅くなってすみません

使う目的はわかりました
二個目の質問は コンソールアプリケーションでの

str[3][10] = ("林檎","ゴリラ","ラッパ"
"パンツ", "釣り", "リンパ球"
"ウサギ", "義理", "利子");


static LPCTSTR str[3][10] = TEXT("林檎","ゴリラ","ラッパ"
       "パンツ", "釣り", "リンパ球"
       "ウサギ", "義理", "利子"););

みたいになのを
両方に対応できるように_T("")とかTEXT("")とかを使って書くにはどうしたらいいんでしょうか?

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

Re: Win32 api のプログラムについて質問があります

#6

投稿記事 by YuO » 11年前

SantaxPro さんが書きました:str[3][10] = ("林檎","ゴリラ","ラッパ"
"パンツ", "釣り", "リンパ球"
"ウサギ", "義理", "利子");


static LPCTSTR str[3][10] = TEXT("林檎","ゴリラ","ラッパ"
       "パンツ", "釣り", "リンパ球"
       "ウサギ", "義理", "利子"););

みたいになのを
両方に対応できるように_T("")とかTEXT("")とかを使って書くにはどうしたらいいんでしょうか?
TEXTマクロや_Tマクロは,文字列単位で使います。
つまり,

コード:

{ TEXT("林檎"), TEXT("ゴリラ"), ... }
のように使う必要があります。

SantaxPro
記事: 14
登録日時: 11年前

Re: Win32 api のプログラムについて質問があります

#7

投稿記事 by SantaxPro » 11年前

また返信遅くなってすみません
理解できましたありがとうございました

閉鎖

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