エディットボックス内に入力されている文字のバイト数取得について

解決


さち  2006-02-15 15:22:27  No: 60722  IP: [192.*.*.*]

お世話になります。
質問は件名の通りなのですが、
エディットボックスに入力された文字のバイト数が取得したいのですが、
どうすればいいのでしょうか?

例えば、エディットボックス内に「aあ」と入力されていた場合、
「3」を返したいのですが…

初歩的な質問で申し訳ありません。どうかよろしくお願いいたします。

VC++.NET  WindowsXP  MFC使用

編集 削除
επιστημη  2006-02-15 15:26:12  No: 60723  IP: [192.*.*.*]

GetWindowTextLength

編集 削除
さち  2006-02-15 16:07:09  No: 60724  IP: [192.*.*.*]

GetWindowTextLengthを使ってみたのですが、やはり文字数しか取れていませんでした…

編集 削除
επιστημη  2006-02-15 16:10:41  No: 60725  IP: [192.*.*.*]

コンパイル時にUNICODEになってませんか?
UNICODEなら半角/全角を問わず1文字=1wordです(一般に)。

編集 削除
επιστημη  2006-02-15 16:15:53  No: 60726  IP: [192.*.*.*]

で、GetWindowTextLengthA ではいかがでしょ?

編集 削除
みい  2006-02-15 16:26:30  No: 60727  IP: [192.*.*.*]

GetDlgItemTextの戻り値とか。

編集 削除
さち  2006-02-15 16:27:11  No: 60728  IP: [192.*.*.*]

UNICODEにしてました。。

GetWindowTextLengthAについて調べて使ってみようと思います。
なかなか検索に引っかかってくれませんが…orz

編集 削除
επιστημη  2006-02-15 16:32:38  No: 60729  IP: [192.*.*.*]

> GetDlgItemTextの戻り値とか。

こいつには文字列を受け取るバッファを渡さななりませんが、
その大きさを決めるのに文字列のサイズが必要で…堂堂巡りです。
加えてこいつの戻り値は TCHAR 単位なので UNICODE だと文字数が返ります。

編集 削除
みい  2006-02-15 16:42:06  No: 60730  IP: [192.*.*.*]

> > GetDlgItemTextの戻り値とか。
> こいつには文字列を受け取るバッファを渡さななりませんが、
> その大きさを決めるのに文字列のサイズが必要で…堂堂巡りです。
CWndクラスのだったらCString型で渡せませんでしたっけ。
取ってきた文字列に対してGetLengthだとどうなるんでしょ?
(なんか今日は頭が朦朧としてます。もしかして花粉症デビュー!?きゃーっ)

編集 削除
επιστημη  2006-02-15 16:52:23  No: 60731  IP: [192.*.*.*]

> 取ってきた文字列に対してGetLengthだとどうなるんでしょ?

UNICODEモードではCString自体がTCHARベースなので、やはり文字数となります。

編集 削除
D  2006-02-15 18:02:24  No: 60732  IP: [192.*.*.*]

文字列にWideCharToMultiByteを、バイト数指定0でかけた戻り値でいいかと。
戻り値-1かも知れませんが、そこは動かしてみれば分かると思います。


MSDN引用
cchMultiByte に 0 を指定して関数が成功すると、変換後の文字列を受け取るために必要なバッファのサイズ(バイト数)が返ります。

編集 削除
さち  2006-02-17 16:45:49  No: 60733  IP: [192.*.*.*]

みなさんいろいろありがとうございました。
なんとかできたので、解決にさせていただきます。

編集 削除