• ベストアンサー

BUTTON型のウィンドウに入力欄を作りたい。

Win32API初心者です。 灰色(BUTTON型?)のウィンドウにエディットボックスを入れたいのですが、 ウィンドウクラスの設定の仕方がよくわかりません。 CreateWindow()関数のlpClassNameにBUTTONとやらずにウィンドウクラスを自前で作ってIEのインターネットオプションを開いた時みたいなウィンドウにしたいのですがやり方がよくわかりません。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • uoot
  • ベストアンサー率75% (6/8)
回答No.3

エディットボックスコントロールをダイアログボックスではないウィンドウに配置したいということでしょうか。 ダイアログボックスに限らず、通常のウィンドウにも子ウィンドウとしてエディットボックスコントロールを配置することはもちろん可能です。必要になったタイミングでエディットボックスコントロールを作成することになります。ウィンドウに最初から表示させたいなら WM_CREATE メッセージ、ダイアログボックスなら WM_INITDIALOG メッセージの処理で行います。 エディットコントロールに 3D 表現の「枠」を付けるためには特殊なウィンドウクラスを使うわけではなく、拡張ウィンドウスタイルに WS_EX_CLIENTEDGE を指定します。 拡張ウィンドウクラスをウィンドウ作成時に指定するためには CreateWindow() ではなく CreateWindowEx() を使う必要があります。 API ということで MFC を使わない記述は次のようになると思います。 HWND hWndEdit = CreateWindowEx( WS_EX_CLIENTEDGE, // 拡張ウィンドウスタイル TEXT("Edit"), // ウィンドウクラス TEXT(""), // ウィンドウテキスト WS_CHILDWINDOW | WS_VISIBLE | ES_AUTOHSCROLL, // ウィンドウスタイル 10, 10, 150, 20, // 位置・サイズ hWnd, // 親ウィンドウのハンドル (HMENU)IDC_EDT_xxx, // コントロール ID hInst, // インスタンスハンドル NULL); // パラメータ

_yamamoto_
質問者

お礼

ありがとうございました。 非常に参考になりました。

その他の回答 (2)

  • uoot
  • ベストアンサー率75% (6/8)
回答No.2

灰色のウィンドウというのは、正しくは 3D 表現の表面色で表示されているウィンドウのことだと思います。このようなウィンドウで普通に思いつくのは「ダイアログボックス」です。 ダイアログボックスにエディットボックスを配置するには #1 さんの通りリソースエディタなどでダイアログボックステンプレートのリソースを用意するのが一般的です。ダイアログボックステンプレートリソース(または、ダイアログリソース)をダイアログボックスとして表示させるためには DialogBox() のほかに、 CreateDialog() と、それぞれのパラメータを渡せるバージョン DialogBoxParam() 、 CreateDialogParam() があります。 ちなみに、ダイアログボックステンプレートはメモリ上にゼロから作ることもできます。 Internet Explorer のインターネットオプションを開いたときのウィンドウだとすると、「プロパティシート」と呼ばれるものになってしまいますが、こちらは作成方法が通常のウィンドウと異なります。プロパティシートでは各タブページにダイアログボックスが表示されるようになっていますので、こちらもダイアログボックステンプレートを用意する必要があります。 プロパティシートの使用方法は各種ドキュメントを参照してください。 ダイアログボックスおよびプロパティシートのどちらも、新しいウィンドウクラスを作る必要はありません。

_yamamoto_
質問者

お礼

どうもありがとうございます。 ダイアログボックスを作らなければならないようですね。 例えばInternet Explorer のインターネットオプションを開いた時、”全般”のタブの欄にホームページのアドレスをエディットする場所がありますが3D表現で、くぼんだエディット欄になってますよね。 あれをウィンドウでやりたいのですができますか?

noname#30727
noname#30727
回答No.1

コンパイラが何かわかりませんが、リソースエディタなどでダイアログボックスを作成し、エディットボックスを貼り付けて、DialogBox 関数(マクロ)で表示させるのが一般的です。

_yamamoto_
質問者

お礼

返信遅くなり申し訳ありません。 コンパイラはVC++です。リソーススプリクトなるものを始めて知りました。 ありがとうございました。