• ベストアンサー

エディットボックスの色変更について(初心者です)

はじめまして、xuanといいます。 VC++を使っているのですが、エディットボックスを読取専用にすると自動的に色が灰色っぽくなってしまいますけれども、こちらを元のように白色に変更するにはどうすればいいのでしょうか? とりあえずctlColor()を使えば出来るらしいということは分かったのですが、他に何をすればいいのかということが良く分かりません。 よろしければ、細かい部分まで教えていただきたいのですが…。 お手数ですが、よろしくお願いします。

  • xuan
  • お礼率100% (30/30)

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

  • ベストアンサー
回答No.2

横槍回答っす。 ES_READONLYは関数じゃなくて、スタイル設定用のマクロです。 Create関数を自作するんじゃなくて、 Createを呼ぶときdwStyleにES_READONLYを指定すれば (スタイルがそれだけじゃマズイけど)、読み取り専用になります。 RECTはただの構造体です。 名前のとおり長方形を表し、left、top、right、bottomの四つの要素を持ちます。 この場合はウィンドウの大きさを指定するためにウィンドウの座標を スクリーン座標で代入すればいいんではないかと思います。 あ、RECT&の&は「参照」ですよ、念のため。 >私はプロパティの方で読取専用に MFC(ですよね?)はよく判らないのでこの部分が掴めませんが… クラスウィザードでOnCtlColorStaticみたいなメッセージハンドラを作って、 そのなかに if(HWND(lParam) == hEdit) return (LRESULT)GetStockObject(WHITE_BRUSH); に相当するコードを書けばオッケなのではないかと。

xuan
質問者

お礼

回答ありがとうございます。 なるほど、そういう意味だったのですか…。どうも、何を見てもどういう意味なのか良く分からなかったのです。 プログラムは(という言い方をして良いのかどうかよく分かりませんが)確かにMFCです。 この質問をした当時はMFCという種類があって、他の種類があるとは知らなかったものですから…。 本当にありがとうございました。 参考にさせていただいて、また頑張ってみようと思います!

その他の回答 (1)

  • A__
  • ベストアンサー率47% (22/46)
回答No.1

ES_READONLY であれば EDIT でも WM_CTLCOLORSTATIC が発生。  case WM_CTLCOLORSTATIC:   if(HWND(lParam) == hEdit)    return (LRESULT)GetStockObject(WHITE_BRUSH);  break;

xuan
質問者

お礼

返事の方遅れてしまい、申し訳ありませんでした。 こちらの方を見させていただきまして、しばらく自分でやってみようと思ったのですが、分からない部分が出てきてしまいましたので、よろしければ教えていただきたいのですが…。 ES_READONRYの意味がどうしてもよくわからないのです。 私はプロパティの方で読取専用に設定したのですが、読取専用にした地点でこのような関数が出来ているのでしょうか? ヘルプで見てみたところ、ES_READONLYの参照のところにCEdit::Createとあり、そこに BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID ); を使うというようなことがあったのですが、これを参考に自分で作ればよいのでしょうか? ただ、これを使ってみようと思ったもののrectの意味がよく分からないのです。 お手数ですが、よろしければお願いします。

関連するQ&A

  • エディットボックス

    VC++、APIでwindowsプログラムを書いています。ダイアログボックスで質問があります。 case WM_INITDIALOG: SetDlgItemText(hDlg, IDC_EDIT1, "0"); return TRUE; で読み取り専用エディットボックス内に初期値を書き case WM_CTLCOLORSTATIC: { HDC hdc = (HDC)wParam ; SetTextColor( hdc, RGB( 255, 255, 255)) ;// 白色 SetBkMode(hdc, TRANSPARENT); // 背景を透過 return (BOOL)(HBRUSH)GetStockObject(NULL_BRUSH) ; } でダイアログボックス内のスタティックテキストと読み取り専用エディットボックスの背景を同時に透過させているのですが、エディットボックス内の文字を void ddd( HWND hDlg, int xxx) { char ttt[100]; sprintf(ttt,"%d",xxx); SetDlgItemText(hDlg, IDC_EDIT1, ttt); return ; } で書き換えると古いテキストが残ったように表示されます(背景に色を指定すれば古いテキストは残らない)。 うまく表示させるにはどういった方法があるでしょうか? ご存知の方、よろしくお願いします。 ちなみにダイアログボックスにはビットマップが貼ってあります。

  • VC++のエディットボックスの非表示

    VC++で、ダイアログを作りました。 エディットボックスを置いているのですが、 このエディットボックスは始めは非表示(入力を受け付けない)にするため、 このエディットボックスのプロパティにある "Disable"をtrueにして"Visible"もtrueにしました。 そこまではよかったのですが、 「入力」ボタンを押すと、エディットボックスが白く表示され、入力を受け付けるというようにしたいのですが、 エディットボックスのプロパティを変更する関数というのはあるのでしょうか? いろいろ検索などをしているのですが、方法がわかりません。よろしくお願いします。

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

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

  • エディットボックスのカーソルが表示されない

    長いこと悩んでいますが、解決出来ないでいます。 お知恵を拝借したいと思います。 VC5.0, SDK, WinXPでの開発を行っています。 今、リストビューで直接書き込みをさせる為に、 リストビューのクリックされた位置にエディットボックスをかぶせて表示させてあたかも直接編集させているように見せています。 実際のエディットボックスの表示や書き込み等はうまく行っているのですが、表示したエディットボックスにSetFocusをしても、カーソルが表示される場合とされない場合が出てきています。 親画面を表示し、最初にリストビューをクリックした時のエディットボックスにはきちんとカーソルが表示されます。 しかし、2度目以降はまったくカーソルが表示されません。 ただ、フォーカスはあたっているのか、文字入力は正しく行われます。 また、エディットボックスでリターンキーを押されたタイミングでエディットボックスを破棄し、リストビューに文字列を反映させているのですが、このリターンキー押下後にエディットボックスを表示させた時はカーソルも表示されます。 エディットボックスの破棄には、上記リターンキーもしくはエディットボックスからフォーカスが無くなった時に行っているので、 この時の破棄のタイミング等の問題でカーソルが出たり出なかったりしているのだろうと色々調べているのですが、どうしても分かりません。 実際エディットボックスにフォーカスが当たっていればカーソルは自動的に出るものだと思っていたのですが、出ないという現象は何に問題があるのでしょうか? エディットボックス有効処理 Show( SW_SHOW ); BringWindowToTop( hwnd ); SetFocus( hwnd ); エディットボックス破棄(無効)処理 Show( SW_HIDE ); アドバイスを宜しくお願い致します。

  • エディットボックス内でキー押されたときのメッセージ

    VC++6.0です。 メインウインドウ内のエディットボックス(一行)で、特定のキー入力を検知したいのですが、どのようにすればよいでしょうか。 mfcは使ってません。 //ウインドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {  switch( message )  {   case WM_CREATE:    //エディットボックスを作成    CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT","",          WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL,          0,0,2000, 20, hWnd, (HMENU)IDC_EDIT, g_hInst, NULL );    break;   case WM_COMMAND:    //エディットボックス内の変更はEN_CHANGEで受け取れるが、    //キーコードは送られてこない    break;  } }

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

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

  • VC++6.0 エディットボックス、スピンコントロールについての質問

    VC++中の下ぐらいの技術者です。 エディットボックスにfloat型のメンバ変数を関連付けて使っています。 しかし、実際に値を打ち込むときに小数点、つまり「.」キーを押すと、 エディットボックス内でカーソルが先頭に戻ってしまいます。 これは直せませんか? また、スピンをエディットボックスのタブオーダーの次に配置し、プロパティのスタイルで 「自動関連付け」と「数値の自動表示」にチェックを入れたら、 そのコントロールが配置されたダイアログを表示するとエラーで表示できません。 これらの原因、解決方法の分かる方ご教授お願いします。

  • エディットボックスの非表示方法

     はじめまして。  プログラミング初心者です。  エディットボックスの非表示方法について教えてください。  現在、MFCによる、スケジュール管理システムを作成中です。クライアント/サーバ型で行っています。  クライアントの画面において、スケジュールを見ることが可能です。ただ、変更や追加などを行うときは、ID、パスワードを入力してログインする必要があります。  そのログイン方法は、スケジュールを見る画面にIDとパスワードのエディットボックスがありますので、そこに入力し、サーバでID、パスのチェックを行い一致すると、ログイン状態になり、ログオフボタンが表示されます。  しかし、IDとパスのエディットボックスは表示されたままになります。  その表示を非表示に切り替えたいのですがどのようにしたらいいのかわかりません。  開発環境は、Windows2000およびWindowsNTです。  ツールはVC++6.0です。  よろしくお願いします。

  • 同じエディットボックスへのDrag&Drop(VC++/MFC)

    同じエディットボックスへのDrag&Drop(VC++/MFC) 同じエディットボックスへDrag&Dropすると テキストが消えてしまう現象に悩んでいます。 現在、 下記のサイト http://www.softist.com/programming/dandd/dandd.htm のサンプルプログラムを参考に コントロール間のDrag&Dropの仕方を学習しています。 このサンプルではエディットボックス間で文字列のコピーができるようになっていますが、 私がほしい機能は文字列の移動です。 そこで、サンプルのEditForDD.cppの DROPEFFECT DropEffect = OleDataSrc.DoDragDrop(DROPEFFECT_COPY); の下に、 if(DropEffect == DROPEFFECT_COPY) this->SetWindowTextA(""); という一文を加えて、Drag&Dropする際にDrag元のテキストを削除するようにしました。 その結果、異なるエディットボックス間での移動は可能になりましたが、 Drag元のエディットボックスにテキストを戻そうとすると テキストが消えてしまいまうようになってしまいました。 このように同じエディットボックスにDrag&Dropをしても テキストが消えないようにする方法をご存じの方はいらっしゃいませんでしょうか? なお、開発環境は以下の通りです。 開発環境:Visual Studio 2005 Standard Edition 利用言語:VC++/MFC OS:Windows XP よろしくお願いいたします。

  • VC++2010 ボタンなどのレイアウト大きさ変更

    VC++2010のMFCで現在開発しているんですが、 ボタン、スタティックテキスト、エディットボックスの文字の大きさを変更したいんですが どのようにすればいいかわかりません。よろしくお願いします。 またステータスバーに色を付けたいんですがどのようにすれば色を付けることができますか? よろしくお願いします。

専門家に質問してみよう