お世話になります。
質問は件名の通りなのですが、
エディットボックスに入力された文字のバイト数が取得したいのですが、
どうすればいいのでしょうか?
例えば、エディットボックス内に「aあ」と入力されていた場合、
「3」を返したいのですが…
初歩的な質問で申し訳ありません。どうかよろしくお願いいたします。
VC++.NET WindowsXP MFC使用
GetWindowTextLength
編集 削除GetWindowTextLengthを使ってみたのですが、やはり文字数しか取れていませんでした…
編集 削除コンパイル時にUNICODEになってませんか?
UNICODEなら半角/全角を問わず1文字=1wordです(一般に)。
で、GetWindowTextLengthA ではいかがでしょ?
編集 削除GetDlgItemTextの戻り値とか。
編集 削除UNICODEにしてました。。
GetWindowTextLengthAについて調べて使ってみようと思います。
なかなか検索に引っかかってくれませんが…orz
> GetDlgItemTextの戻り値とか。
こいつには文字列を受け取るバッファを渡さななりませんが、
その大きさを決めるのに文字列のサイズが必要で…堂堂巡りです。
加えてこいつの戻り値は TCHAR 単位なので UNICODE だと文字数が返ります。
> > GetDlgItemTextの戻り値とか。
> こいつには文字列を受け取るバッファを渡さななりませんが、
> その大きさを決めるのに文字列のサイズが必要で…堂堂巡りです。
CWndクラスのだったらCString型で渡せませんでしたっけ。
取ってきた文字列に対してGetLengthだとどうなるんでしょ?
(なんか今日は頭が朦朧としてます。もしかして花粉症デビュー!?きゃーっ)
> 取ってきた文字列に対してGetLengthだとどうなるんでしょ?
UNICODEモードではCString自体がTCHARベースなので、やはり文字数となります。
文字列にWideCharToMultiByteを、バイト数指定0でかけた戻り値でいいかと。
戻り値-1かも知れませんが、そこは動かしてみれば分かると思います。
MSDN引用
cchMultiByte に 0 を指定して関数が成功すると、変換後の文字列を受け取るために必要なバッファのサイズ(バイト数)が返ります。
みなさんいろいろありがとうございました。
なんとかできたので、解決にさせていただきます。