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で質問しましょう!
似たような質問が見つかりました
- オープンソース cssで中央寄せ 1 2023/05/19 06:25
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
MFCで画像を表示させているのですが、透過表示する方法がわかりません。
C言語・C++・C#
-
画面を強制的に再描画させる方法
C言語・C++・C#
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
-
4
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
5
【C++】関数ポインタの使い方
C言語・C++・C#
-
6
RGBのバイナリデータをCImageにコピー
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
大容量のメモリ確保をスワップ...
-
エクセルのメモリ使用状況/Appl...
-
Apacheでバーチャルホストの最...
-
変数をあなたの身近なものに例...
-
LoadLibraryしたらFreeLibrary
-
【C言語】再帰が時間がかかる...
-
ファイルマッピング関数で失敗
-
動的メモリとexit(C言語)
-
C言語で、メモリを解放しないで...
-
メモリのセグメント違反の解決...
-
closeとメモリの開放について
-
VBAの配列サイズとメモリに関して
-
C#におけるexeファイルのサイズ...
-
メモリが不足しています(VBA)
-
プログラム開発勉強専門のPC...
-
64bit C#アプリ メモリをたくさ...
-
メモリを解放しないとどうなる?
-
Macターミナルで実行中のプログ...
-
緯度、経度の 10進法と 60進法...
-
家電製品の電力周波数を変える機械
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語で、メモリを解放しないで...
-
VBAの配列サイズとメモリに関して
-
「ヒープサイズの設定」て何?
-
エクセルのメモリ使用状況/Appl...
-
エクセルVBA 大容量CSVファイル...
-
EXCEL-VBAにてADOのレコードセ...
-
バッチファイルでの実行EXEのメ...
-
メモリ不足
-
メモリのセグメント違反の解決...
-
メモリが不足しています(VBA)
-
【C言語】再帰が時間がかかる...
-
ファイルマッピング関数で失敗
-
C言語:関数のメモリ上でのサイ...
-
メモリの解放の仕方
-
VC++におけるメモリ使用量について
-
メモリの消費量について
-
Bitmapを重ね合わせる方法
-
メモリを解放しないとどうなる?
-
C#のOutOfMemoryException発生...
-
メモリの解放について VB6 VBA
おすすめ情報