• ベストアンサー

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

uootの回答

  • ベストアンサー
  • 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_
質問者

お礼

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

関連するQ&A

  • VC++でウィンドウを作る場合・・・

    えっと、VC++初心者です。 VC++でウィンドウを作るのに色んな方法があるようですが、 WIN32APIの Create関数(CreateEX関数含む)と CreateWindow関数(CreateWindowEX関数含む)の 使い分けの違いがよく分かりません。 どういったときにどちらを使うのがよいのでしょうか? どうぞ宜しくお願いします。

  • CreateWindow で作ったウィンドウが白いんですが

    VC++ 6.0 で CreateWindow で作ったウィンドウが 白いんですが、これを、メッセージボックスと同じ色(鉛色?)にするにはどうしたらいんでしょうか。 あるいは、その逆、チェックボックス等に付属するテキスト文字の背景を白くできればそれでもかまいません。 (デフォルトで灰色なので)                  ↓ CreateWindow("BUTTON", "このテキスト背景が灰色",        WS_CHILD | WS_VISIBLE |        BS_AUTOCHECKBOX,        Window_Width,        Window_Height,        NULL,        NULL,        hWnd,        NULL);

  • Win32APIを始めたのですが・・・。

    Window Handleについての質問です。Win32APIではCreateWindow()でチェックボックスを作ることが出来るのですが、 C++でプログラミングしていたところ、困ったことになりました。 まず、クラスのメンバーとしてHWND m_Hwndを宣言し、メンバー関数(CreateChk())において m_Hwnd = CreateWindow(...)とし、WM_CREATEのメッセージ処理内で関数CreateChk()を呼び出して チェックボックスを作るようにしたのですが、WM_CREATEのメッセージ処理を終えると同時にm_Hwndの内容が意味を持たないものに 変わってしまい、チェックボックスの状態を利用することが出来ません。 変数の寿命に関係したものだとは思うのですが、クラスを用いたオブジェクト指向プログラミングも始めたばかりでよくわかりません。 どなたか対処方法をご存知でないでしょうか?

  • ExcelVBAでAPIを使って外部ウインドウのエディットテキストを取得する方法

    ●やりたいこと ExcelVBAで、APIを実行し、外部ソフトのウィンドウに含まれている エディットテキストを取得して、セルに出力したい 使用する関数・宣言、できればコードを教えていただけませんでしょうか。 イメージはこちらをご参考いただけると幸いです。 ​http://situmon-img.blogspot.com/2008/08/1.html​ 変数hwindowに親ウィンドウのハンドルが取得されています。 エディットボックスのハンドル、IDは分かりません。 エディットボックスのハンドルを取得し、 分かっているクラス・ハンドルの文字列を取得 といった流れになるのではと思っております。 変数にさえ文字列が取得できれば、 当然ですが、Range("B2")=変数 で大丈夫です。 変数は、ひとつを使いまわしで構いません。 変数をエディットテキストの数だけ用意しても構いません。

  • 進行状況表示のウィンドウ

    進行状況表示のウィンドウ ソフトの中である程度時間のかかる処理をしている間、ソフトが固まったように見えるのを防ぐために、進行状況を表示する小さなダイアログボックスを作ろうと思いました。 そして、新しいウィンドウを作る方法は、ダイアログのリソースを作っておいてDialogBox()関数でそれを呼び出すか、ウィンドウクラスを登録してCreateWindow()関数でウィンドウを作る方法と二通りあると思いますが、どちらが向いていますか?? 作るウィンドウには進行状況の%表示とキャンセルボタンを作るだけのモーダルなもので、「時間のかかる処理」は_beginthreadex()関数で別スレッドを立てて行う予定です。 環境は、Visual C++ 2008 のWin32アプリです。

  • Win32 API エディットボックス内文字列の色変更

    Win32 APIについて質問です。 (Microsoft Visual Studio .NET 2002、XP、API) エディットコントロールに表示されている文字列の 色(またはフォント)を変更したいと思っています。 エディットボックスに「0」という数字を入力し その後「更新ボタン」をクリックすると、「0」の 文字色が赤色(または赤太文字)へ変更される という具合です。 Win32 APIを始めて間もない者(Cも始めて間もないです) なので、かなり苦戦しております。 「SendMessage() 」みたいな関数を使用しエディット ボックスのハンドルへメッセージを送ることで 実現させるのかなぁ程度しか理解しておりません。 ご存じの方すいませんがよろしくお願いします。

  • ウィンドウクラスの指定について

    いつもお世話になっていますGedankenです。 ウィンドウズプログラムについて素朴な質問があります。 Win32 API プログラミング(C言語)ではRegisterClass などで登録した ウィンドウクラスをCreateWindow を使う時"文字列"で指定すると思いますが なぜそんなに回りくどいことをするのでしょうか。 普通に考えれば構造体へのポインタなどで指定した方がスマートだと 思うのですが、どうなのでしょうか。 多分ちゃんとした理由があると思いますが、そこについて解説お願いします。 よろしくお願いします。

  • エディットボックスに入力されている文字列が、スペースだけで構成されているかどうか。

    VC++6.0・Win32APIを用いて、ウィンドウズアプリケーションを作成しています。 エディットボックスに入力されている文字列が、スペース(全角スペース又は半角スペース)のみ (それらの組み合わせでも構わない)で構成されているかどうかを判別するアルゴリズムを教えてください。 ヒントでも構いません。 エディットボックスの作成や、そこからの文字列の取得については理解しています。 あっ、でもよく考えてみたらエディットボックスかどうかは関係ないですね(^_^;) 『ある文字列が・・・』で十分ですね。 お手数をお掛けしますが、よろしくお願いいたします。

  • リストビューの選択状態を取得するメッセージはありますか?

    リストビューが選択状態(1行が青色や灰色の背景になる状態)にあって、エディットボックスが空欄では無いときに、 あるボタンを有効にするという処理をしたいと思っています。 リストビューが選択されていることを教えてくれるメッセージがあれば、教えてください。よろしくお願いします。 環境:Win32 API, VC++6.0

  • VC6でエディットボックスの扱いについて

    エディットボックスに複数行のメッセージを送りたいのですが、SetDlgItemText関数を使うと、いつも同じところから文字が出力されてしまうので,うまく行きません。 ちなみに、MFCは使わず、WindowsのAPIでコードを打っています。 どなたか解決方法をご存知の方いらしましたら、宜しくお願いします。