我正在尝试制作一个允许用户更改背景的Paint程序,而前景色(用于绘图形状)始终是黑色的。 现在,当用户更改背景颜色时,HBRUSH会使用所选颜色绘制整个窗口,从而清除所有绘制的形状。 为了解决这个问题,我做了3个步骤(注意问题出在第三步):
以下是我执行第三步的步骤:
void loadAfterBackcolorChanged(HDC hdc){
ULONG_PTR m_gdiplusToken;
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
Graphics graphics(hdc);
wchar_t* filePathString = new wchar_t[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, TEMP_FILE.c_str(), -1, filePathString, 4096);
Image image(filePathString);
Gdiplus::ImageAttributes imAtt;
imAtt.SetColorKey(
Color(1, 1, 1),
Color(255, 255, 255),
ColorAdjustTypeBitmap);
graphics.DrawImage(
&image,
Rect(0, 0, image.GetWidth(), image.GetHeight()), // dest rect
0, 0, image.GetWidth(), image.GetHeight(), // source rect
UnitPixel,
&imAtt);
}
不幸的是,结果是它只考虑白色透明。这意味着如果背景为白色(这是最初的backColor),它可以很好地工作。因此,用户只能成功更改一次backColor!
如果有人能提供帮助,我将不胜感激。