2011-08-09 11 views
-1

を描画するために失敗した私は、リストコントロールのためのサムネイルを作成するために、folowコードを使用CListCtrlのとthumnailは

HDC hDC=::GetDC(hWnd); 
HDC pDC=::CreateCompatibleDC(hDC); 
HBITMAP bm=::CreateCompatibleBitmap(hDC,THUMBNAIL_W,THUMBNAIL_H); 
HBITMAP oldBmp=(HBITMAP)SelectObject(pDC,bm);   
img.StretchBlt(pDC,rcBorder); 
CBitmap bmp; 
bmp.Attach(bm); 
m_imgLst.Add(&bmp,RGB(0,0,0)); 

大きな画像は、それが

のCImageのIMGとしてのCImageに格納され、負荷です。

が、サムネイルが黒であるが、何も描かれていない
上記コード
img.StretchBlt(PDC、rcBorder)。 は何もしません。

答えて

2

これは不完全であまりよく言われていない質問です。 Windows API、MFC、およびGdiPlusの混合と照合は問題ありませんが、十分な関連コードや説明を与えずに誰でもできることは、あなたの問題を推測することです。

これは私の推測です。黒いビットマップの症状は通常、あなたのビット深度が間違っていたことを意味します。私はあなたがCImageで何をしているのか分かりませんが、上のコードはうまくいっていますが、呼び出されたAPIの成功の検証はありません。

私はさらにm_imgLstはおそらく間違いが別の場所で、あなたが今、追加しようとしている画像のための互換性のないビット深度や寸法で、そのオブジェクト上の.Createコールであった場合にはMFC CImageListオブジェクトであると仮定します。

返り値.Addをチェックすると、新しく挿入されたイメージのインデックスになるはずです。失敗した場合は-1になります。

+0

ありがとうございます、私の英語は実際にはあまり良くありません。私は眠くて、多くの情報を書くことができました。ゆっくりと説明してください。私はあなたが私に言ったことをテストし、それは正しくありません。 Add関数の戻り値は-1ではありません。そして、私のCreate関数はOninitialUpdateに隠れています**このようにm_imglst.Create(100,100、ILC_COLOR32,0,1); ** – Dalton

+0

私はあなたの問題が何であるかを推測し続けるつもりはありませんが、同様の問題に対して私がしたこと:http://stackoverflow.com/questions/4598872/creating-hbitmap-from-memory-buffer – AJG85

関連する問題