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

解決


さち  2006-02-16 00:22:27  No: 60722

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

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

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

VC++.NET  WindowsXP  MFC使用


επιστημη  2006-02-16 00:26:12  No: 60723

GetWindowTextLength


さち  2006-02-16 01:07:09  No: 60724

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


επιστημη  2006-02-16 01:10:41  No: 60725

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


επιστημη  2006-02-16 01:15:53  No: 60726

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


みい  2006-02-16 01:26:30  No: 60727

GetDlgItemTextの戻り値とか。


さち  2006-02-16 01:27:11  No: 60728

UNICODEにしてました。。

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


επιστημη  2006-02-16 01:32:38  No: 60729

> GetDlgItemTextの戻り値とか。

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


みい  2006-02-16 01:42:06  No: 60730

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


επιστημη  2006-02-16 01:52:23  No: 60731

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

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


D  2006-02-16 03:02:24  No: 60732

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

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


さち  2006-02-18 01:45:49  No: 60733

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加