VC初心者です。
今CDialogクラスでダイアログを作成しているのですが,
ダイアログの背景色を設定することが出来ません。
CWinAppクラスだとSetDialogBkColorで設定できるらしいのですが,
CDialogでできる方法が有りましたらお教え下さい。
VC初心者です。
今CDialogクラスでダイアログを作成しているのですが,
ダイアログの背景色を設定することが出来ません。
CWinAppクラスだとSetDialogBkColorで設定できるらしいのですが,
CDialogでできる方法が有りましたらお教え下さい。
また色の設定なんですが色を定数で設定したいのですが、
RGB指定だと赤,青,緑の三色を指定しないといけないので,
定数の数が増えてソースが見にくくなってしまいます。
3色一度で指定できる方法があれば教えて下さい。
> CDialogでできる方法が有りましたらお教え下さい。
CDialogクラス内で記述できればOKでしょうか?
ChogeDialogクラスでWM_PAINTをオーバーライドします。
塗りにはCDC::FillSolodRect()関数を使います。
void CDlgTest01Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 描画用のデバイス コンテキスト
(省略)
}
else
{
// *** ここから追加
CRect rect;
GetClientRect(rect); // Dialogのクライアント領域を取得
CDC* pDC = GetDC();
pDC->FillSolidRect(rect, RGB(0, 128, 255)); // 適当な色
ReleaseDC(pDC);
// *** ここまで
CDialog::OnPaint();
}
}
> 3色一度で指定できる方法があれば教えて下さい。
マクロで定義するとか。
Bunさん、有難うございました。
何とかできそうです。
ゆあ様
読んでもらえるかな?
さっきのコードだと、再描画の時に不具合が発生することがあります。
他のウィンドウをダイアログに重ねたり、どかしたり試すと不具合が解ります。
修正は、下記のようにコードを追加してください。
OnPaintで一度だけ処理します。処理内容はダイアログのスタイルを変更します。
ダイアログを描画する時に、「子であるコントロールの部分は描画しない」というスタイルに変更しました。
void ChogeDlg::OnPaint()
{
static BOOL InitFlag = FALSE;
if (InitFlag == FALSE)
{
HWND hWnd = this->GetSafeHwnd();
if (hWnd != NULL)
{
InitFlag = TRUE;
// ダイアログのスタイルを取得
long lstyle = ::GetWindowLong(hWnd, GWL_STYLE);
// 子ウィンドウは描画しないように指示
lstyle |= WS_CLIPCHILDREN;
// 再設定
::SetWindowLong(hWnd, GWL_STYLE, lstyle);
}
}
if (IsIconic())
{
ここから先はさっき(上)の通り、そのままでOK
・
・
・
}
ブラシで書けるものならC***Dlg::OnCtlColorで
if(nCtlColor == CTLCOLOR_DLG)
のときお望みのブラシを返してやったほうがいいですかね。
CdS様
> ブラシで書けるものならC***Dlg::OnCtlColorで
> if(nCtlColor == CTLCOLOR_DLG)
> のときお望みのブラシを返してやったほうがいいですかね。
理由も書いて頂けると勉強になるのですけど?m(__)m