ピクチャコントロールに重ねたテキストについて – プログラミング – Home

ピクチャコントロールに重ねたテキストに...
 
通知
すべてクリア

[解決済] ピクチャコントロールに重ねたテキストについて


COF
 COF
(@COF)
ゲスト
結合: 15年前
投稿: 53
Topic starter  

お世話になっております。
初歩的な質問かもしれませんが、ご教授ください。

ダイアログに、ピクチャコントロールを配置して、塗りつぶし、
その上にスタティックテキストで文字を表示させたいと思っています。

DialogのOnPaintで以下のようにしてピクチャコントロールを塗りつぶしていますが、
再描画された際に、重ねたテキストが見えなくなってしまいます。
テキストはOnCtlColor()で文字色を変える処理を行っています。
どうやって、再描画されてもテキストの表示を保つのでしょうか?

void CHogeDlg::OnPaint()
{
CPaintDC dc(this);

CRect rect;
GetDlgItem(IDC_STC1)->GetClientRect(&rect);
CDC* pdc = GetDlgItem(IDC_STC1)->GetDC();
pdc->FillSolidRect(rect, RGB(0,0,255));
}

環境は2003 MFCです。


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

それはピクチャコントロールを塗りつぶしていると言うより、ピクチャコントロールの
ある位置のダイアログを塗りつぶしているのです。
ピクチャコントロールの DC を取得して塗りつぶしてみては。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

って恥ずかしい。良く読まずに嘘言った。

スタティックがピクチャコントロールの子だったり兄弟だったりするなら、ピクチャコ
ントロールに WS_CLIPCHILDREN や WS_CLIPSIBLINGS をつけてみるとか。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

ピクチャコントロールもWM_CTLCOLORで塗りつぶせばどうでしょうか?
スタイルをビットマップか何かにしてタブオーダをピクチャコントロール→スタティック
にすればうまくいくはずです。

もっとも色を塗りつぶすだけならピクチャコントロールではなくてスタティックでも十分
でしょう。


返信引用
COF
 COF
(@COF)
ゲスト
結合: 15年前
投稿: 53
Topic starter  

aetos様、Blue様、ありがとうございます。

OnCtlColor()で塗りつぶすようにしたのですが、塗りつぶしがうまくできません。

HBRUSH CHogeDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
int iCtrlID = pWnd->GetDlgCtrlID();

switch(nCtlColor)
{
case CTLCOLOR_STATIC:
if(iCtrlID == IDC_STC1)
{
// 文字色
pDC->SetTextColor(RGB(255, 255, 255));
// 背景色
pDC->SetBkMode(TRANSPARENT); // 背景透過
hbr = static_cast<HBRUSH>(GetStockObject(NULL_BRUSH));
pDC->SetBkColor(RGB(0,0,255)); //青に塗りつぶし
}
break;
default:
break;
}

return hbr;
}

ピクチャコントロール(IDC_STC1)のスタイルをフレームとビットマップで試して
みましたが、だめでした。
なにか足りないところがあるでしょうか?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

塗りつぶすブラシを返さないと。
CBrushnのメンバ変数を用意して、

case IDC_STATIC1:
if (this->m_brush1.GetSafeHandle() == NULL) {
this->m_brush1.CreateSolidBrush(RGB(0, 0, 0xff));
}
pDC->SetBkMode(TRANSPARENT);
hbr = this->m_brush1;
break;

といった感じに。


返信引用
COF
 COF
(@COF)
ゲスト
結合: 15年前
投稿: 53
Topic starter  

Blue様、ありがとうございます。

おかげさまで、希望通りのことが実現できました。
お忙しい所ありがとうございました。助かりました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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