2008年05月23日

文字数の取得

 今日もバイナリ表示エディットコントロールの続きをやりました。
 とりあえず、選択時のスクロール処理も終わり、何とか完成しました。
 結構いい感じに出来たのではないかと思います。

 早速このコントロールを「Exif読取り君」に適用してみました。
 他にバイナリ表示させるソフトとしては、「見比べ君2」があるのですが、これにこのコントロールを適用しようとすると、根本的な部分から大きく改良しなければならないし、特に重要でもない部分なので、このままにしておくことにしました。

 次に、昨日書いた「ファイル名変更君」の新リネーム方式ですが、今日ちょっとテストしてみると早速バグがありました。
 それは、Unicode版では問題なかったのですが、通常版(マルチバイト)で問題が出ました。
 具体的な内容は、文字数を数える時に、文字数ではなくバイト数で数えるようにしていたためでした。

 ここで、Unicode版や通常版(マルチバイト)について書くと、Unicodeは一文字を表わすのに常に2バイト使うのですが、マルチバイトは一般に半角文字と呼ばれるものを1バイトで表わし、全角文字と呼ばれるものを2バイトで表わすため、マルチバイト版のときにバイト数で文字を数えるようにすると、半角文字と全角文字が混ざったとききちんと処理出来なくなります。
 そのため、常にその辺は気をつけてコードを書いているのですが、今回はうっかり忘れてそのまま書いていました。

 さらに、ちょっと専門的なことを書くと、CStringを使いGetLength関数を使った時の戻り値はUnicodeとマルチバイトでは違ったりします。
 マルチバイトの場合はバイト数が返るのですが、Unicodeのときは文字数が返ってきます。
 という訳で、同一のコードを使い、両方を切り替えて使いたい場合は、
CString str;
int len = str.GetLength() * sizeof(TCHAR);
 とすると、どっちの場合でもきちんとバイト数[len]が得られます。
ランキングへ  posted by 遠雷 at 00:30 | コメント(0) | MFC

2008年05月03日

操作方法

 今日はサーバーダウンのため、いつもの時間に書けなかったので、あらかじめ書いておいたものを、今掲載しています。

 今日も昨日の続きでバイナリ表示エディットコントロールの作成をしました。
 今日は、選択処理とキー操作処理の部分をやりました。

 選択処理やキー操作についてですが、色々な動作について記述していると、「こんなやり方をするとこんな動作をするんだな」というものがいくつかありました。
 例えば、「Home」キーの場合、そのまま押せばカレットのある行の先頭へ移動しますが、「Ctrl」キーを押しながら押すとその文章の先頭へ移動します。
 さらに、これらを「Shift」キーを押しながらやると、元の位置から移動先まで選択状態に出来ます。
 「End」キーや十字キーなども同じような動作をし、「Shift」キーを押しながら移動すると、その分だけ選択状態に出来ます。

 前述の中でちょっと驚いたのが、「Shift」キーを押しながら「Ctrl」キーを押し、そのまま「Home」・「End」キーを押すと一気に選択出来るという操作方法です。
 キーを一度に3つ押す、という操作を今までやったことが無かったので、今回勉強になりました。

 今後の予定は、スクロール時の処理をやればとりあえず終わりで、あとは細かい修正などをやるだけになると思います。
 ちなみに、今作っているものは表示専用のもので、編集したり出来るようにしようとは考えていないです。
 編集したり出来るようにするには、ここからかなり大変そうなのでやりません。(´・ω・`)

 次に、今日の気になる検索フレーズですが、「2008 VC mfcが使えない」というのがありました。
 これは、恐らくExpress版を使ったのだと思います。
 2005からExpressは無料ですがMFCが使えず、Standard以上じゃないと使えません。
 それで、私はProfessionalを使っているのです。

 ちなみに、アカデミック版は中身がProfessionalなのでMFCが使えます。
 さらに、マイクロソフトのサイトからPro・Teamの試用版がダウンロードできるので、それを試してみて今後を決める、という方法もあります。
 私は最初乗り換える予定はなかったのですが、この試用版を試したばかりに・・・。
ランキングへ  posted by 遠雷 at 01:00 | コメント(0) | MFC