4

次のコードを使用して、CImageList に画像を追加しています。

CImageList ImageList;

ImageList.Create(64, 64, ILC_COLOR32, 0, 1);

      Find image path and load image . . .
HBITMAP hBitmap = LoadBitmapFromFile(finder.GetFilePath(), NULL, 64, 64);

int nImage = ImageList.Add(CBitmap::FromHandle(hBitmap), RGB(0,0,0));

HBITMAP LoadBitmapFromFile(const char* pszFilePath, HDC hDC, long lMaxHeight, long lMaxWidth)
{
    // Macro that MFC needs to manage its state within a DLL
    AFX_MANAGE_STATE(AfxGetStaticModuleState())

    // The item object which will be used to read in the file
    CxImage image;
    // Load the image from the file
    if(image.Load(pszFilePath))
    {
        ResizeImage(image, lMaxHeight, lMaxWidth);

        // Get a handle to a bitmap version of the image which the given DC can use
        return image.MakeBitmap(hDC);
    }
    return NULL;
}

void ResizeImage(CxImage& image, long lMaxHeight, long lMaxWidth)
{
    const DWORD ulImgHeight = image.GetHeight();
    const DWORD ulImgWidth = image.GetWidth();

    long nHeightDif = ulImgHeight - lMaxHeight;
    long nWidthDif = ulImgWidth - lMaxWidth;
    if(nHeightDif > 0 || nWidthDif > 0)
    {
        double rScaleFactor = 1.0;
        if(nHeightDif > nWidthDif)
            rScaleFactor = (double)lMaxHeight / (double)ulImgHeight;
        else
            rScaleFactor = (double)lMaxWidth / (double)ulImgWidth;

        long nNewHeight = (long)(ulImgHeight * rScaleFactor);
        long nNewWidth = (long)(ulImgWidth * rScaleFactor);

        image.Resample2(nNewWidth, nNewHeight);
    }
}

Add メソッドは画像を追加するように見えますが、新しい画像に対して同じインデックス値を繰り返し返します。イメージ リストがリスト ボックスに表示されると、追加されたすべてのイメージに対して同じイメージが表示され、同じインデックスが返されますが、リストのイメージの下に表示されるファイル名は正しいです。

wnat がまったく役に立たないことを確認するために、いくつかのことを試しました。この問題は、画像のサイズや形状 (高さ対幅) とは関係がないようです。画像コントロールに画像を表示することで、画像が読み込まれる HBITMAP に正しい画像が添付されていることを確認しましたが、リスト コントロールの画像は正しくありません。

次を使用して画像を追加する場合:

int nImage = ImageList.Add(CBitmap::FromHandle(hBitmap), (CBitmap *)NULL);

複製されたイメージはロードされません。反復インデックスの代わりに、Add は -1 を返します。CImageList のエラーに関するドキュメントが見つかりません。何が起こっているのか知っている人はいますか?

4

0 に答える 0