2003-08-03

プロパティシート上の複数行エディットコントロール(TX-C)

ダイアログでプロパティシートを作成して、そこに複数行表示のエディットコントロールを配置しようとするとうまくいきません。結局VCの掲示板に投げてしまいました。

プロパティシート上の複数行エディットコントロール – 作ろうTX-C
http://www.villagecenter.co.jp/cgi-bin/tx-c.cgi?L=3121&X=1

エディットコントロールにフォーカスがある状態でESCキー押すとプロパティページ全体が真っ白に破棄されるし、そもそもダイアログの初期化じたいもうまくいってないような感じ。以下のようなコードで確認できます。

#include <windows.h>

void main(TX *text)
{
    HDIALOG hdBase = dialog("Test");
    HDIALOG hd = dialog("Page");
    DTRECT r;
    dialogGetPos(hd, &r);
    r.cx = 40 * DTCX;
    r.cy = 8 * DTCY;
    __dialogAddItem(hd, "Edit", "Hello, world.", 100, &r,
        WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL);
    dialogAddPage(hdBase, hd);
    dialogOpen(hdBase);
}
ダイアログ出現時(この時点ですでに変)。
[ダイアログ出現時のスクリーンショット]
ESCキーを押すと真っ白けになる。
[ESCキーを押したときのスクリーンショット]

「ES_MULTILINE」と適当なキーワードを混ぜてググってみたところ、唯一関係あるとおぼしきことを書いてるのがCodeGuruというサイトでのリストビュー(笑)の使い方の解説記事。

ListView Control – Table of Contents
http://www.codeguru.com/listview/multiline_edit_subitems.shtml

(記事のタイトル付けが変なような気もしますがそれはおいとくとして、)掲載されているサンプルコードに “Strange but true:” という前振りで “If the edit control has ES_MULTILINE and ESC is pressed the parent is destroyed if the message is dispatched.” などというコメントが書かれています。もっともこれはリストビューのアイテムの編集についてのVC++によるコーディングを説明している記事なので、あんまり関係ないような気もしますが、ほかに近いことを言っているページが見つからなかったのでいちおうメモ。

さて、TX-CにはdialogEditWzというAPIがあるのになんでエディットコントロールなのかと訝しむ人もいるかもしれませんが、じつは(ES_READONLYと併用して)内容をコピーできる読み取り専用のテキストを付けようとしていたのでした。だめならあきらめてStaticコントロールにすると。

しかし、なんかこのままわかんないのも癪だなあ。