ダイアログのサイズ変更による背景画像の拡大縮小 – プログラミング – Home

ダイアログのサイズ変更による背景画像の...
 
通知
すべてクリア

[解決済] ダイアログのサイズ変更による背景画像の拡大縮小


しげ
 しげ
(@しげ)
ゲスト
結合: 24年前
投稿: 21
Topic starter  

お世話になります。
VC6.0 MFC ダイアログベースにて作成しております。

BOOL CTESTDlg::OnInitDialog()
{
CDialog::OnInitDialog();

GetClientRect(&m_Rect);
m_bitmap.LoadBitmap(IDB_BITMAP2);

return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われません。
}

void CTESTDlg::OnPaint()
{
CPaintDC dc(this); // 描画用のデバイス コンテキスト
CDC dcImage;

if(!dcImage.CreateCompatibleDC(&dc))
return;

BITMAP bm;
m_bitmap.GetBitmap(&bm);//

CBitmap* pOldBitmap = dcImage.SelectObject(&m_bitmap);

int nWidth = m_Rect.right - m_Rect.left;
int nHeight = m_Rect.bottom - m_Rect.top;

dc.StretchBlt(0, 0, nWidth, nHeight, &dcImage, 0, 0, bm.bmWidth, bm.bmHeight,
SRCCOPY);

dcImage.SelectObject(&m_bitmap);

    CDialog::OnPaint();
}

上記の記述でビットマップを背景画像に設定しております。
質問は、ダイアログ右下をドラッグすることでサイズ変更したとき、
同時に背景画像もサイズが変更されるようにしたいのです。
OnSize内で何か記述が必要な気がするのですが。
検討がつかないため質問させて頂きました。

ご指導宜しくお願い致します。


引用未解決
トピックタグ
みい
 みい
(@みい)
ゲスト
結合: 22年前
投稿: 65
 

m_Rectに変更後のサイズをセット。


返信引用
しげ
 しげ
(@しげ)
ゲスト
結合: 24年前
投稿: 21
Topic starter  

みいさん、早速のご回答ありがとうございます。

OnSizeに、

GetClientRect(&m_Rect);

を入れてみました。

ダイアログ右下をドラッグしてサイズ変更してみましたが、
背景画像は拡大縮小してくれません。

さらにサイズを小さくして、そこから大きくすると
背景画像が欠けてしまいます。


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

タイプミスなら良いのですが、
StretchBltの後にあるSelectObjectは間違っていませんか?
m_bitmapを未選択状態にしたいのではないかと思うのですが、
このコードではそうなりません。

あと、デバッガで追って見ましたか?
OnSize内の挙動とか、OnPaint内での挙動とか。
変えてみて動作だけを見て判断しても
状況を正確につかめないと思うのですが。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

まず、m_Rectはメンバでなければなりません。
また、WM_SIZE後にWM_PAINTがこない場合は再描画を強制します

void OnSize(UINT nType, int cx, int cy){
GetClientRect( &m_Rect);
InvalidateRect( NULL, TRUE); // 強制
UpdateWindow();       // 再描画
ValidateRect( &m_Rect); // 次のWM_PAINTをキャンセル
}

あんまり処理が遅くなる場合で、WM_EXITSIZEMOVEが取れるのならば
そこでやってください。
OnPaintが来ているのにストレッチされない場合は
StretchBlt()まわりとm_Rectを疑ってみてはどうでしょう。


返信引用
しげ
 しげ
(@しげ)
ゲスト
結合: 24年前
投稿: 21
Topic starter  

PATIOさん
仲澤@失業者さん
ご回答ありがとうございます。

仲澤@失業者さんのやり方でうまく出来ました!

また、PATIOさん言うとおり、
デバッガでもっと詳しく中身を見ていく必要がありました。

ありがとうございました!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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