MFC プログラムで画像を描いてイメージリストに追加するサンプル

//	日の丸を作成
//	メモリ上にデバイス独立ビットマップを(DIB)作成する。
		ZeroMemory(&bmp,sizeof(bmp));
		bmp.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
		bmp.bmiHeader.biBitCount=32;
		bmp.bmiHeader.biPlanes=1;
		bmp.bmiHeader.biWidth=IMAGE_WIDTH;
		bmp.bmiHeader.biHeight=-IMAGE_HIGHT;
		hbitmap=CreateDIBSection(NULL,&bmp,DIB_RGB_COLORS,NULL , NULL,0);
//	画面と互換性のあるデバイスコンテキストを作成
		img_hdc=CreateCompatibleDC(hdc);
		SelectObject(img_hdc , hbitmap);
		ReleaseDC(hWnd,hdc);

		HPEN hPen,hOldPen;
		hPen=CreatePen(PS_SOLID, 2, RGB(255,255,255) );
		hOldPen=(HPEN__ *)SelectObject(img_hdc, hPen);

		hBrush =CreateSolidBrush(RGB(255,255,255));
		hOldBrush = (HBRUSH__ *)SelectObject(img_hdc, hBrush);

		Rectangle(img_hdc , 0,0,IMAGE_WIDTH-1,IMAGE_HIGHT-1);

		hPen=CreatePen(PS_SOLID, 2, RGB(255,0,0) );
		SelectObject(img_hdc, hPen);

		hBrush =CreateSolidBrush(RGB(255,0,0));
		SelectObject(img_hdc, hBrush);

		Ellipse(img_hdc,IMAGE_WIDTH/2-16,IMAGE_HIGHT/2-16,IMAGE_WIDTH/2+16,IMAGE_HIGHT/2+16);
		SelectObject(img_hdc, hOldBrush);
		DeleteObject(hBrush);
		SelectObject(img_hdc, hOldPen);
		DeleteObject(hPen);
// イメージリストに登録する前にデバイスコンテキストを削除しなければならない
//	削除しないと真っ黒な画像が表示されるだけである。
		DeleteDC(img_hdc);
		ImageList_AddMasked(hImg ,hbitmap,RGB(255,255,255));
		DeleteObject(hbitmap);

ネタ元