【環境:Win98,VC++6.0,MFC】
始めまして、VC++初心者です。
View初期表示前にメモリ上にビットマップを作成しておき、
そのビットマップをファイルに保存したいと考えています。
ビットマップを保存する際、ビットマップオブジェクトのポインタがうまく取得できません。
以下(1)のように作成したビットマップをGetCurrentBitmap()で取得はできないのでしょう
か?
(1)ビットマップ作成
void CPenDeviceView::OnInitialUpdate()
{
CClientDC dc(this) ;
if (m_dcPlot.GetSafeHdc() == NULL)
{
m_dcPlot.CreateCompatibleDC(&dc) ;
m_bmpPlot.CreateCompatibleBitmap(&dc, m_PicSize.cx, m_PicSize.cy) ;
m_pbmpOldPlot = m_dcPlot.SelectObject(&m_bmpPlot) ;
m_dcPlot.BitBlt( 0, 0, m_PicSize.cx, m_PicSize.cy, NULL, 0, 0, WHITENESS );
}
}
(2)ビットマップ保存
void CPenDeviceDoc::OnFileSaveAs()
{
CPenDeviceView *pView = (CPenDeviceView *)((CMainFrame*)AfxGetMainWnd());
SaveBmp( &(pView->m_dcPlot) );
}
void CPenDeviceDoc::SaveBmp(CDC* pDC)
{
BITMAP bmp;
CBitmap *pbmp;
try
{
pbmp = pDC->GetCurrentBitmap(); <-- ここがうまくいかず、
pbmp->GetBitmap( &bmp ); <-- ここでエラーが発生。
・・以下省略 ・・
}
}
>CPenDeviceView *pView = (CPenDeviceView *)((CMainFrame*)AfxGetMainWnd());
pViewが本当にビューへのポインタなのかをまず確認してください。
違っていた場合は、フレームウィンドウクラス(CFrameWnd)のメンバの中から、
ビューを取得する関数を探してみてください。
ビューの取得を以下のように変更したらうまくいきました。
ありがとうございました。
CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
CPenDeviceView *pView = (CPenDeviceView *) pFrame->GetActiveView();