• 締切済み

バックグラウンドカラーを変更したいのですが。。

VisualC++でプログラムを組んでいる者です。 ダイアログベース上に定義したコンボボックスとエディットボックスに対して、あるトリガーがひかれると、背景色を赤色に変更したいと思っているのですが、うまく出来ません。 CWnd::OnCtlColor関数を使用するべきなのかなとは思っているのですが、書き方が理解できてないです。 アドバイス宜しくお願いします。

みんなの回答

  • hyde-la
  • ベストアンサー率28% (42/146)
回答No.1

OnCtrlColorでOKです。 メンバにCBrushを持たせて、そのブラシを塗りつぶしたい色で 初期化してください。 CreateIndirect等が使えると思います。 あとは、そのブラシのGDIハンドルをreturnで返せばよいでしょう。 MSDNにも「メッセージ返送(Message refrection)」のところに 載ってると思います。 参考&工夫してください。

関連するQ&A

  • ボタンの表示の色、フォントを変更したい

    VC++でプログラミングしています。 MFCのダイアログベースのEXEを造っています。 ダイアログにはボタンとエディットボックスを貼り付けています。 私がやりたいのは以下のことです。 ・ボタンの色を設定したい ・ボタン、エディットボックスに表示する文字の色を設定したい ・ボタン、エディットボックスに表示する文字のフォント(サイズ)を設定したい プロパティでサイズ変更すると全体に反映されてしまうので、個々の コントロールについて制御したいと思っています。 ヘルプで調べて、それらしい関数を見つけるのですが使い方がわかりません。 VCを始めたばかりで、クラスの理解がまだ浅いです。。。 関数の説明は理解できても、「じゃあ、コードはどう書くの?」という状態です。 「○○ は ×× のメンバではありません」と、よく怒られてます。。。 識者の方、ご教授願います。 コードがどうなるのか知りたいので、簡単なサンプルコードがあると助かります。 また、質問ではないのですが、「この関数は○○をする」というのではなく、 「○○をするにはこの関数を使う」という様に調べられる、お勧めの書籍、 Webなどがありましたら教えてください。 今後の勉強に役立てたいと思っています。

  • VisualC++でRS232C経由のデータの送受信方法

    仕事でVisualC++でプログラムを作っているのですが、VC++は初心者なので解からない事がいっぱいです。 今作っているプログラムは、VisualC++でRS232Cを使って送られてくるデータをダイアログのエディットボックスに表示するというプログラムなんですけど、どうやってデータを受取るのかまたそのデータをどうやって表示するのかがまったく解からない状態です。 解かる方は教えて下さい。 よろしくお願いします。

  • クラスの扱いについて

    VCで簡単なプログラムを造っています。 ダイアログベースです。 エディットボックスへのアクセス方法がわかりません。 識者の方、ご教授願います。 簡単にソースを載せます。 以下は、ボタンを押した時に動作するルーチンです。 void CTestDialog::OnButton1() { CreateThread(, , Sub, , ,); } Sub() が作成されたスレッドで動作する関数です。 void Sub() { CString csText; csText.Format("てすと"); SetDlgItemText(IDC_EDIT1, csText); } IDC_EDIT1 が CTestDialogクラスのエディットボックスです。 Sub() の中でこのエディットボックスに書きたい。 Sub() を CTestDialogクラスとして定義するのか、または SetDlgItemText関数で IDC_EDIT1 が CTestDialogクラスであると 指定するのか、などわかりません。 どこに、どういう記述をすればいいか教えてください。

  • エディットボックスの処理で画面がちらつきます。

    VC++ 6.0 Win32APIにてダイアログベースのプログラムを作成しております。 ダイアログに18個のエディットボックスを配置しておりますが、そのエディットボックスのテキストを SetDlgItemText()を使って全て空欄にすると(第3引数に””を指定)画面がちらつきます。 同ダイアログ内のリストコントロールがダブルクリックされた際のイベントを拾ってエディットボックスクリアの処理を実行しているのですが、ちらつきを抑える手法はありますでしょうか?

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

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

  • シリアルポートにデータを送るプログラム

    VISUALC初心者です。実際Cも良く分かってないと思います。パソコンにも詳しくないです。 シリアルポートにデータを送るプログラムをVISUALCで作りたいんですが、何をやって良いかさっぱり分かりません。 仕様はダイアログベースで、ボタンを押すと、エディットボックスに書いたファイルパスのファイルのデータをRS232Cに送るということをやりたいのですが、全くもって分かりません。 ファイルの指定の仕方。 および一ビットずつシリアルポートに転送の仕方。 のすべてを教えてください。 以下を参考にしていますが、やっぱり良く分からないというのが現状です。 http://www2.muroran-it.ac.jp/circle/yume/serialport/index.html

  • VB6.0で、コンボボックスの背景を白色にしたい

    VB6.0で、Formのコントロールを使用せず、 CreateWindowEx関数を使って、コンボボックスを作成し、 (たしか、ウィンドウクラス名(PCTSTR pszClassName)に、 "COMBOBOX"を、セットしたら、コンボボックスが作成できたはず) コンボボックスの背景色(BackColor?)の色を、 設定したいのですが、その方法が分かりません。 あと、フォントも設定したいです。 プログラムの作り方を教えて下さい。

  • 別スレッドからメインダイアログのコントロールにアクセスする方法

    VC++2005 MFC WindowsXPを使用しています。 メインダイアログに作成したエディットボックスに フォーカスをセットしたいのですが、 別スレッドから行うにはどのようにすればよいのでしょうか? メインダイアログにあるボタンを押すと別スレッドの処理に入り、 その中でメインダイアログのコントロールを操作しようとしています。 //フォーカスをセット CWnd* MyEdit = ( CWnd* )this->GetDlgItem( IDC_EDIT1 ); MyEdit->SetFocus(); 宜しくお願い致します。

  • ドロップダウン エディット コンボボックスの使い方

    Excel for Mac 2011の開発にて 「ドロップダウン エディット コンボボックス」 を使用したいのですが、表示が灰色で選択できません。 「コンボボックス」 も試してみたのですが、入力方法がドラッグのみの対応だったので、 ドロップダウン形式のコンボボックスを使用したいと考えているのですが、 この機能を利用するにはどうすれば良いのでしょうか? 可能であればVBA上での関数名なども併せてご教示願えますと幸いです。 (通常のコンボボックスと同様に「ComboBox1」で良いのでしょうか?)

  • エディットボックス

    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 ; } で書き換えると古いテキストが残ったように表示されます(背景に色を指定すれば古いテキストは残らない)。 うまく表示させるにはどういった方法があるでしょうか? ご存知の方、よろしくお願いします。 ちなみにダイアログボックスにはビットマップが貼ってあります。

専門家に質問してみよう