
CImage::ReleaseDC()のエラーで困っています。
ウインドウ上に複数の画像を表示し、それぞれ配置や大きさを
マウスのD&Dで変えられるようなアプリを作っています。
Visual Studio 2005 C++, MFC
画像はCImageクラスのm_ImageへLoadしてあります。
GetDCでハンドルを取得しているので、ReleaseDCにて開放を
行っていますが、そこで下のエラーになります。
[Second Chance Assertion Failed: File c:\program files\microsoft visual studio 8\vc\atlmfc\include\atlimage.h, Line 1217]
何か解決のヒントになる事がありましたら教えてください。
void CImageButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
(前略)
//ウィンドウDC互換Bitmap作成
CBitmap Bmp;
Bmp.CreateCompatibleBitmap(pDC, nWidth, nHeight);
//メモリDC作成
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
//メモリDCにBitmap選択
MemDC.SelectObject(&Bmp);
//メモリDCにストレッチ描画
MemDC.SetStretchBltMode(HALFTONE);
CDC* pImgDC = CDC::FromHandle(pBtnInfo->m_Image.GetDC());
HDC hImgDC = pImgDC->m_hDC;
pBtnInfo->m_Image.StretchBlt(MemDC.m_hDC, 0, 0, nWidth, nHeight, SRCCOPY);
pBtnInfo->m_Image.ReleaseDC();
(中略)
//四角形を描画
CPen focusPen(PS_DOT, nPenWidth, RGB(nR, nG, nB));
CPen* OldPen = MemDC.SelectObject(&focusPen);
MemDC.MoveTo(btnRect.left, btnRect.top);
MemDC.LineTo(btnRect.left, btnRect.bottom);
MemDC.LineTo(btnRect.right, btnRect.bottom);
MemDC.LineTo(btnRect.right, btnRect.top);
MemDC.LineTo(btnRect.left, btnRect.top);
MemDC.SelectObject(OldPen);
//メモリDCからウィンドウDCにビット転送
pDC->BitBlt(0, 0, nWidth, nHeight, &MemDC, 0 ,0, SRCCOPY);
(後略)

A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
(Press Retry to debug the application) って書いてありますから、「再試行(R)」を押してデバッグしましょう。
ソースついてますから、デバッグし放題ですよ。
atlimage.h を読む限り、CImage::ReleaseDC() のアサーションは
hBitmap = HBITMAP( ::SelectObject( m_hDC, m_hOldBitmap ) );
ATLASSERT( hBitmap == m_hBitmap );
で、hBitmap と m_hBitmap が同じじゃなきょダメよ、と言っているので、
GetDC() で m_hDC、m_hOldBitmap がセットされた以降、ReleaseDC() されるまでの間に
値がどの時点で変わっているのかを追っかけていけば、問題の箇所が分かるのでは、と…
当方、DC まわりはサッパリ分からんので、あんまりヘルプできません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAの配列サイズとメモリに関して
-
メモリが不足しています(VBA)
-
「ヒープサイズの設定」て何?
-
メモリの解放の仕方
-
組み込み系でのmallocについて
-
メモリのセグメント違反の解決...
-
こんなメッセージがでます
-
C++のCopyFileでメモリが増える
-
エクセルVBA 大容量CSVファイル...
-
ExcelのVBAでメモリ解放できない
-
C言語初心者です。debug assert...
-
VC++6.0 異常終了の調査方法
-
closeとメモリの開放について
-
エクセルのメモリ使用状況/Appl...
-
EXCEL-VBAにてADOのレコードセ...
-
JavaのStringの最大文字列長
-
FindFirstFile ハンドル開放
-
移動可能メモリ
-
C,C++プログラムの強制終了時の...
-
ゲームプログラミングのマップ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語で、メモリを解放しないで...
-
Access Violationについて
-
VBAの配列サイズとメモリに関して
-
メモリのセグメント違反の解決...
-
メモリが不足しています(VBA)
-
メモリ不足
-
大容量のメモリ確保をスワップ...
-
ファイルマッピング関数で失敗
-
PC-98で拡張メモリを使え...
-
エラーについて
-
「ヒープサイズの設定」て何?
-
エクセルのメモリ使用状況/Appl...
-
C言語における再帰呼び出しの...
-
オフスクリーンサーフェスへの...
-
1ページに収まるオブジェクト...
-
新規購入PCのスペックについて...
-
4GB搭載したマシンのメモリ情...
-
組み込み系でのmallocについて
-
ルネサスマイコン(R8C) ビルド...
-
Visual Basic Net2003
おすすめ情報