クライアント領域のコントロールが描画されない
WindowsXP / VC2005 / VC++ MFCにてダイヤログベースの画像ビューワの作成を行っています。
機能としては、独自形式のバイナリファイルをダイヤログへドラッグ&ドロップすることにより、
メモリに描画した画像をクライアント領域へ転送して表示します。
こちらが疑問点となるところなのですが、その際にもともと配置していた
エディットボックスやスピンボタンなどのコントロールが消えてしまいます。
(見えなくてもボタンを押すことはできるので描画の問題と思われます)
1.なぜこのようなことが起こるのでしょうか?
2・また、コントロールを消さないためにはどうすればよいのでしょうか?
上記に関してご回答いただけると幸いです。
個人的な考えとしては、
1.クライアント領域を描画する際にコントロールを消してしまっている
2.再描画することによりコントロールは表示される(但し問題点としてクライアント領域を書き換える際にちらつく)
です。
以下該当関数です
//------------------------------------------------------------------------------
void CTestBitBltDlg::OnDropFiles(HDROP hDropInfo)
{
char acFileName[256];
SHORT sRet;
memset(acFileName, 0, sizeof(acFileName));
DragQueryFile(hDropInfo, 0, acFileName, sizeof(acFileName));
memcpy( g_acSpriteFileName, acFileName, 256 - 1 );
CRect rc;
GetClientRect(&rc);
CClientDC dc(this);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bmp;
bmp.CreateCompatibleBitmap(&dc, rc.Width(), rc.Height());
CBitmap* pOldBmp = dcMem.SelectObject(&bmp);
dcMem.FillSolidRect(&rc, RGB(0xC0, 0xC0, 0xC0));
// 本関数にてメインとなるメモリDCへの描画をおこなってます
sRet = GetMemoryImage(g_acSpriteFileName, 0, &dcMem);
if( sRet == FALSE ){
GetDefaultImage(&dcMem);
}
dc.BitBlt(0, 0, rc.Width(), rc.Height(), &dcMem, 0, 0, SRCCOPY);
dcMem.SelectObject(pOldBmp);
//InvalidateRect(FALSE);
CDialog::OnDropFiles(hDropInfo);
}
//------------------------------------------------------------------------------
なお、OnEraseBkgnd関数においてはTRUEのみを返すようにしてます。
お礼
回答ありがとうございます。 無事、やりたい事ができました。 ShowWindow、 いい関数ですね。。