ダイアログの色を取得したい – プログラミング – Home

ダイアログの色を取得したい
 
通知
すべてクリア

[解決済] ダイアログの色を取得したい


あすか
 あすか
(@あすか)
ゲスト
結合: 17年前
投稿: 9
Topic starter  

はじめまして。
早速質問させていただきます。

OS:Windows2000 XP
VC6でダイアログベースです。

タイトルの通り、ダイアログの色を取得したいのですが、
方法を教えてください。
エディットボックスをダイアログと同じ色にしたいのです。

OnInitDialog()で
CWindowDC dc(this);
COLORREF a = dc.GetBkColor();
m_brEdit.CreateSolidBrush( a );

HBRUSH CIRUDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: この位置で DC のアトリビュートを変更してください
switch( pWnd->GetDlgCtrlID())
{
// エディットボックス
case IDC_EDIT:
return (HBRUSH) m_brEdit; // 背景色ブラシ
default:
break;
}

// TODO: デフォルトのブラシが望みのものでない場合には、違うブラシを返してください
return hbr;
}

上記のようにやってみましたが、出来ませんでした。
よろしくお願いいたします。


引用未解決
トピックタグ
Kerry
 Kerry
(@Kerry)
ゲスト
結合: 20年前
投稿: 192
 

// エディットボックス
case IDC_EDIT:
pDC->SetBkColor(GetSysColor(COLOR_BTNFACE));
return (HBRUSH)(COLOR_BTNFACE + 1); // 背景色ブラシ

これで実現できると思います。
エディットの場合、背景ブラシだけでなくテキストの背景色も設定して
やる必要があったと思います。


返信引用
あすか
 あすか
(@あすか)
ゲスト
結合: 17年前
投稿: 9
Topic starter  

Kerryさんありがとうございます。

教えていただいた通りにしましたところ、
無事に、ダイアログの背景色と同じ色にすることが出来ました。

pDC->SetBkColor(GetSysColor(COLOR_BTNFACE));

こちらは、ダイアログの色背景色を取得して、
エディットボックスのテキストが書かれる背景色として
セットしているのは理解できたのですが、

return (HBRUSH)(COLOR_BTNFACE + 1); // 背景色ブラシ

こちらの、(COLOR_BTNFACE + 1)は、ブラシの色を返せばよいのですよね?
この「+1」は、何でしょうか?
教えていただけると嬉しいです。


返信引用
金魚ちゃん
 金魚ちゃん
(@金魚ちゃん)
ゲスト
結合: 16年前
投稿: 52
 

>こちらの、(COLOR_BTNFACE + 1)は、ブラシの色を返せばよいのですよね?
>この「+1」は、何でしょうか?
return (HBRUSH)GetSysColorBrush( COLOR_BTNFACE ); // 背景色ブラシ
と同じです。

COLOR_BTNFACE などの定数は 0 から始まっています。
でも 0 を返すと NULL_BRUSH を意味してしまうので +1 にする仕組みです。
Windows 内部でシステムカラーのブラシは COLOR_BTNFACE などの定数に
+1 した値になっているのでしょう。きっと。

なお、質問にある[ダイアログの色を取得したい]とはどんな意味ですか?
ファイルなどのプロパティでエディットボックスが使ってあり、
背景もダイアログの色と合わせたいだけなら ES_READONLY スタイルを
付ければ良いんじゃない。


返信引用
あすか
 あすか
(@あすか)
ゲスト
結合: 17年前
投稿: 9
Topic starter  

金魚ちゃんさん、ありがとうございます。

+1の意味は理解できました。

「ダイアログの色を取得したい」というのは、
エディットボックスの入力部分の色と、
ダイアログの背景色と合わせたかったので、
ダイアログのCDCから背景色を取得して、
エディットボックスの背景色にセットすればよいと考えたので、
「ダイアログの色を取得したい」となりました。

後、すみません、「ファイルなどのプロパティ」の意味が
分からないのですが、ES_READONLY スタイルだと、
入力も出来なくなるのですよね?
色は、ダイアログと同じにしたいのですが、
入力は可能としたいのです。
(的を得ない返答でしたらすみません)


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

> 分からないのですが、ES_READONLY スタイルだと、
> 入力も出来なくなるのですよね?
> 色は、ダイアログと同じにしたいのですが、
> 入力は可能としたいのです。

ちょっと気になったので。
基本的なWindowsのインターフェイスでは
入力可能なエディットボックスの背景色をダイアログの背景色と
同じにはしないと思うので何も知らない人が見たら入力できない
エディットボックスかと勘違いしそうですね。
リーズナブルな理由があってやっているなら良いと思うのですが、
単なるデザイン的な話ならあんまりやらない方が良いような気はします。
まあ、したら駄目って話ではないのですけれど、
ユーザーフレンドリーでないような気がしたので書いてみました。


返信引用
あすか
 あすか
(@あすか)
ゲスト
結合: 17年前
投稿: 9
Topic starter  

PATIOさん、ありがとうございます。

> 基本的なWindowsのインターフェイスでは
> 入力可能なエディットボックスの背景色をダイアログの背景色と
> 同じにはしないと思うので何も知らない人が見たら入力できない
> エディットボックスかと勘違いしそうですね。

おっしゃる通りだと私も感じました。
今、既存のVBで作成されたソフトをVCに置き換えています。
元々のものがそうなっていて、私もソースを見るまで、
そこに入力できるのを気づきませんでした。
同じ物をということなので、色を付けたいと相談させていただきました。

皆さん色々ありがとうございます。


返信引用
あすか
 あすか
(@あすか)
ゲスト
結合: 17年前
投稿: 9
Topic starter  

皆さんありがとうございました。

pDC->SetBkColor(GetSysColor(COLOR_BTNFACE));
return (HBRUSH)(COLOR_BTNFACE + 1); // 背景色ブラシ

で問題は解決いたしました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました