CreateCompatibleDCを初期化時にしたい(MFC)
MFCでJPEG画像を表示するプログラムを OnPaint() の中に書いていたのですが・・・
:
bool m_bImageMemDCInit;
CImage m_Image;
CBitmap *m_pImageBitmap;
CDC m_ImageMemDC;
:
:
void CChildView::OnPaint()
{
CPaintDC dc(this);
if(!m_bImageMemDCInit){
m_bImageMemDCInit = true;
// イメージをロード
m_Image.Load("test.jpg");
m_pImageBitmap = CBitmap::FromHandle(m_Image);
m_ImageMemDC.CreateCompatibleDC(&dc);
m_ImageMemDC.SelectObject(m_pImageBitmap);
}
// 描画
dc.BitBlt(0, 0, 256, 256, &m_ImageMemDC, 0, 0, SRCCOPY);
}
このように、Load や CreateCompatibleDC などの初期化にあたる処理を、起動時に1度しか処理しないように書いています。
しかし、このプログラムではあまりに汚い。どうにかして PreCreateWindow などの初期化関数内に書きたいのですが、CreateCompatibleDC 関数で CPaintDC* を渡す必要があるので、OnPaint 関数内に書かざるを得ないのです。
(Loadだけなら初期化関数内に移せるのですが・・・)
いっそ CreateCompatibleDC を再描画のたびに呼んでもいいのでは? と思い、やってみると異常終了してしまいました。
また、CPaintDC dc(this); を PreCreateWindow 関数内に書いても異常終了しました。
どなたかスマートな方法をご存知でしたら、ご指導願います m(_ _)m
お礼
ありがとうございます EnableWindow(GetDlgItem(hDlg,idButton),flag) かんな感じでしょうか? この場合視覚的にボタンが無効になったように見えるのでしょうか? また視覚的にボタンが無効に見えるような関数、マクロはあるのでしょうか?
補足
いま試してみた所できました ありがとうございます お礼の件も解決しました