• 締切済み
  • すぐに回答を!

MFC FormViewの背景色

MFCで開発してます。 CFormViewのクライアント領域を4分割して、右上だけ背景色を他の領域とは違う色にしたいのですが、 InvalidateRect(NULL, TRUE)の後のOnEraseBkgnd()とOnDraw()で、FillSolidRect()で右上だけ塗りつぶしても色が変わりません。 何が原因と考えられるでしょうか? よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数1026
  • ありがとう数2

みんなの回答

  • 回答No.2

 こんばんは。  一つのCFormViewの中の右上と言う事でしょうか。  恐らく、OnEraseBkgnd()辺りが悪さをしているのではないでしょうか。  その他、座標計算が間違っている事も考えられます。  取り敢えずは、OnEraseBkgnd()を削って見ては如何でしょう。  以下はOnDraw()のみオーバーライドして確認しています。参考になれば。 void CMyFormView::OnDraw(CDC* pDC) { // TODO: ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。 RECT rc = {0}; //クライアント領域を取る this->GetClientRect(&rc); //座標を右上に設定 rc.left = rc.right / 2; rc.bottom/= 2; //緑色で塗ってみる pDC->FillSolidRect(&rc, 0xff00); }

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 最初はOnDraw()の中で塗りつぶしてたんですけど、うまくいかないので、 OnEraseBkgnd()をオーバーライドしてみました。 4分割でうまくいかないので、2分割でやってみると、これはうまくいきました。 FillSolidRect()に渡すパラメータがおかしいのかなぁ。 何度も見直したんですけど。。。 ちなみに塗りつぶす順番は、左上→右上→左下→右下です。 もう少し調べてみます。

関連するQ&A

  • 背景色がちゃんとでません

    スタイルシートで設定した背景色が特定のクライアントPC(WinNt IE4.0)で反映されません。WinNt IE4.0全てでダメなのかは分からないのですが、Win95、98のIE4,0、5は大丈夫なんですけど。おかしいクライアントPCの設定の問題かなと思ってIEのインタネットオプションの設定→全般→色 と ユーザ補助 のところは間違いなさそうなんですが、他になんでもいいので何か思い当たる原因があればぜひ教えてください。よろしくお願いします.

  • [C#]コントロールの背景色について

    VS.net C#でプログラムを作ったところ、windows2000のPCではフォーム/コントロールが一部黒く塗りつぶされて表示されました。 開発環境のwindowsXPでは問題ありませんでした。 これは、色の機種依存ということなのでしょうか? とりあえずコントロールの背景色をWindowsシステムカラーからwebカラーに変更したところ、メニューバー以外は正常に表示されるようになりましたが、メニューバーだけはプロパティの背景色だけでは直りません。 この問題については、コントロールのプロパティで背景色を変更する以外に、何か解決策があるのでしょうか? よろしくお願いします。

  • HTML背景色変更とGoogleMap表示設定

    例えば、以下のサイト(武蔵野市ホームページ)では背景色を変更できます。 http://www.city.musashino.lg.jp/shisetsu_annai/shisetsu_kosodate/index.html 背景色を白から他の色に変更してもGoogleMapは正常に表示されますが、正常に表示させるための特別な設定があるのでしょうか? 色を白以外に切り替えるとGoogleMapの領域が切替後の色になり地図表示されなくなる原因と対策について教えてください。

  • 回答No.1

>InvalidateRect(NULL, TRUE)の後のOnEraseBkgnd()とOnDraw()で、 >FillSolidRect()で右上だけ塗りつぶしても色が変わりません。 InvalidateRect()で無効化したウィンドウはOnPaint()で描画します。(言い換えれば、InvalidateRect()するとOnPaint()が発生し、OnPaint()の処理を書き換えずにデフォルトの処理のままにすると、デフォルトの背景しか描画されず、OnPaint()以外で行った描画はすべて「無かった事」になります) また、OnEraseBkgnd()は、ウィンドウをリサイズした際にしか呼ばれません。 さらに http://www.bnote.net/sdk_mfc/mfc1.shtml には 「SDIやMDIアプリケーションの描画処理は OnDraw() で行い(印刷や印刷プレビューも)。 ダイアログベースでは OnPaint()で描画処理を行うようです。 」 と書いてあります。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 参考にさせていただきます。

関連するQ&A

  • ペイントを使って背景色を変更する方法

     ダウンロードしたイラストや文字の素材の背景の色(地の色)を変更するために、素材のファイルをWindowsのペイントで開いてから、[塗りつぶし]機能を使用しました処、肉眼では区別する事が出来ない僅かな色調の違いにより、素材に肉薄した部分に、塗りつぶされずに元の背景色のままとなっている領域が残ってしまいました。  おそらく、色調の違いを決めるデジタルの刻み方を通常の256段階よりも、もっと粗く出来れば良いと思うのですが、その方法が判りません。  この様な僅かな色調の違いは無視して、塗りつぶされずに残る部分が無いようにしたいのですが、何か良い方法を御教え頂けませんでしょうか?

  • クライアント領域を再描画させない方法

    クライアント領域で左クリックを押したままマウスを移動させた時の処理 (WM_MOUSMOVE)として、マウスの位置情報を、 InvalidateRect(hWnd, NULL, FALSE); でWM_PAINTに送り、WM_PAINTで描画処理をさせます。 右クリックでの処理として、 case WM_RBUTTONDOWN:    InvalidateRect(NULL, NULL, TRUE);    return 0; とした時、WM_PAINTでは 右クリックによるWM_PAINTでは、クライアント領域を 再描画させない様にしたいのですが、 どのようにしたら良いのでしょうか? クライアント領域に描画されたのを再描画させないことで、 消したいのです。 MS VC++ & Win98 の環境で作成しています。

  • チェックボックスのテキストを背景に透過させるには?

    VC++6.0です。 hCheckWnd = CreateWindow("BUTTON","checkbox", WS_CHILD | WS_VISIBLE | BS_CHECKBOX, 0,0,100,50, hWnd,NULL,hInst,NULL); で作成したチェックボックスのテキストが背景色から浮いてしまい困っています。 背景色に透過させるか色を指定して背景色と同色にするか出来ればいいのですが方法がわからずにいます。 宜しくお願いします。

  • FC2ホームページの背景色が変わりません!

    FC2ホームページの背景色が変わりません! もう本当にわからないのでこちらで質問させて頂きます。 FC2にて今ホームページを作っているのですが、どんなにしても背景の色が変わらないのです。 画像を添付したページを作っていて背景の色を黒にしたいのですが、htmlで<body の後に色の指定をして、その後はちゃんと変わっているのです。ブラウザで確認してもちゃんと黒になっているんですが、ディレクトリに保存すると背景は変わらないままになっているのです・・・! 1日前に他の同じ様な画像ページを作っていた時はちゃんと黒になって保存もちゃんとできたのですが・・・ 色々検索もしてcssでも試してみましたが、それもやっぱり1回はちゃんと背景色変わるのですが、保存すると白くなってしまいました・・・。 なにか原因があるのでしょうか? とりあえずhtmlのせておきます・・・ <html dir="ltr"> <head> <title></title> </head> <body> <p style="text-align: center; "><span style="color: rgb(192, 192, 192); "><span style="font-size: smaller; ">タイトル</span></span></p> <p style="text-align: center; ">&nbsp;</p> <p style="text-align: center; "><span style="background-color: rgb(0, 0, 0); "><img width="400" height="400" alt="" src=画像のURL /></span></p> </body> </html> 上の<body の後にbgcolor="#000000"> とちゃんと記入するのですが、保存した後ソース見るとbgcolor="#000000"が消えているのです・・・ サイト作りは本当に初心者なので何か間違っているのかもしれません。 しかし原因が本当にわからないので・・・似た様な経験されてる方、なにかご存知な方いましたら回答お願い致します!

    • ベストアンサー
    • HTML
  • 閲覧時に背景色、文字色をcssで変更したい

    WindowsXP、Firefox3を使用しています。 白背景に黒文字という一般的なウェブページの配色はまぶしいので、 Stylishというアドオンを使ってcssで背景色、文字色を変更しようと思い、 以下のようなcssを作成しました。 ------------------------ここから body { color: #696969 !important; background-color: #dcdcdc !important; background-image:none !important; } td { color: #343434 !important; background-color: #d3d3d3 !important; background-image:none !important; } ------------------------ここまで しかし、これだと色が変更できない領域があります。 例えば、 http://www.yahoo.co.jp/  ……一番下?の背景色しか変わりません http://www.4gamer.net/   ……一切変化しません http://www.flay.com/    ……背景色は変わりますが、文字色が変わりません アドオンを使わず、userContent.cssを使う方法にしても結果は同じようです。 どのウェブページでも背景色と文字色を変更するには、どう記述すればよいのでしょうか?

  • Eclipseで修正したファイル名の背景色をつけるには?

    Eclipse3.4でjavaの開発をしています。 CVSでプロジェクトの共有をしていると 追加や変更したファイル名には「>」が付き、変更点が判りますが ファイル名の背景に色をつけている人を見かけました。 例) test ├─Hello.java └─>Test.java ※←の背景色を変えたい。 一目見て判りやすいなと思い、私も設定したいのですが Eclipseの設定なのか、pluginによるものなのか未だ分からず。 ご存知の方いらっしゃいませんか? ちなみにその人はもういらっしゃらないです。 ----------------- WindowsXP SP2 Professional Eclipse3.4 all-in-one java1.6

    • ベストアンサー
    • Java
  • PhotoshopCS2のウィンドウ背景色の変更方法

    初めて質問させていただきます。 PhotoshopCS2で画像を小さく表示して、ウィンドウだけ大きくしたときの画像以外の部分の背景色を変更したいのですが、方法がわかりません。 通常だとグレーで表示される領域だと思うのですが、私のは黒で表示されていています。作業がしづらい状況なので困っております。 わかりにくい文章で申し訳ないのですが、この部分の色(ウィンドウ背景色?)の変更方法を知っている方がおられましたら、お教え願いたいです。 よろしくお願い致します。

  • DataGridViewで指定列の背景色の変更

    いつもお世話になっております。 C#の開発環境で、「DataGridView」を使用しているのですが、指定した列の色を変更するプログラムを作成しています。 現在、フォーム上に配置したDataGridView「dgvTable」のセルの列の背景色を、 「更新」ボタン押して変更するプログラムを作成しています。 ソースは以下の通りです。 for( int i = 0; i < selectCols; i++) { dgvTable.Columns.Add("col",""); dgvTable.Columns[i].DefaultCellStyle.BackColor = Color.LightGreen; } このループで背景色を変更したつもりでしたが、反映されませんでした。 変更する列の数は変動するので、フォームのロードイベントで変更することができません。 どのようにコードを書けば、背景色が反映されるかをご教授願えないでしょうか? よろしくお願いします。

  • StyledDocumentの背景色の不具合

    標記の件、JTextPaneにDefaultStyledDocumentを設定して、テキスト編集環境を 構築していますが、デフォルトでのフォントの背景色が正しく取得できません。 フォントのデフォルトの背景色は見た目には白なのですが、 取得される背景色は黒(r=0,g=0,b=0,a=255)になってしまっています。 背景色を適当に設定すると、その部分の色は正しく反映されます。 マニュアルで背景色を黒く設定しているのか、無設定で背景色が黒として取得されて いるのかの判別方法がなく困っております。 以下、サンプルコードを示します。 対処法をご存知の方がおられましたら、よろしくお願いいたします。 import java.awt.Color; import javax.swing.JFrame; import javax.swing.JTextPane; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.DefaultStyledDocument; import javax.swing.text.MutableAttributeSet; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; import javax.swing.text.StyleContext; import javax.swing.text.StyledDocument; public class StyledDocumentText { public static void main(String[] args) { final StyledDocument document = new DefaultStyledDocument(new StyleContext()); JTextPane textPane = new JTextPane(document); textPane.addCaretListener( new CaretListener(){ public void caretUpdate(CaretEvent e) { // キャレット位置の背景色を取得し、コンソール出力 AttributeSet a = document.getCharacterElement(e.getDot()).getAttributes(); Color background = StyleConstants.getBackground(a); System.out.printf( " %s a=%d\n", background ,background.getAlpha() ); } } ); // テキスト挿入 try { document.insertString(0, "abcdefg", null); } catch (BadLocationException e) { e.printStackTrace(); } // マニュアルで背景色を設定 MutableAttributeSet attr = new SimpleAttributeSet(); StyleConstants.setBackground(attr, new Color(255,100,50,230) ); document.setCharacterAttributes( 2, 3, attr, false); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add( textPane ); frame.setSize( 300, 300 ); frame.setVisible( true ); } }

  • MFCダイアログベースでのボタン背景透過方法

    VC++初心者です。 MFCダイアログベースでボタンを描画したいのですが、 そのボタンの背景を透過(透明)にしたいのです。 環境はWinXP、VSC++2010です。 OnCtrlColor()関数でSetBkMode(TRANSPARENT)や brash.CreateStockObject(NULL_BRUSH)などを実装していますが、 背景は変わりません。 ちなみに、ダイアログにはbitmap画像を貼りつけています。 ボタンはCMFCButtonを使用しているので、 CMFCButtonの変数m_mfcBtnのメンバ(プロパティ?)の m_bTransparentをTrueにしてもダメでした。 なぜ背景が透過できないのかわかりません。 ご教授宜しくお願いします。