Windows API - Win32
一组适用于桌面和服务器应用程序的核心 Windows 应用程序编程接口 (API)。 以前称为 Win32 API。
131 个问题
使用GDI+绘制透明的,细小的虚线,然后绘制透明图片,当两者相交的时候,打印为XPS,效果不对。
上面为在窗口绘制的正确的效果,下面为打印为xps时有问题的效果:
关键代码如下:
/*
尝试了几个改动,任意一个改动,都可以使得问题不重现:
1. 把画笔大小改大
2. 把画笔颜色的透明度去掉
3. 错开矩形和图片,不要交叉
*/
void Draw(HDC hdc)
{
Graphics graphics(hdc);
// Draw a semi-transparent red dashed rectangle
Pen pen(Color(128, 255, 0, 0), 1);
pen.SetDashStyle(DashStyleDash);
graphics.DrawRectangle(&pen, 50, 50, 200, 100);
// Load image from file
Bitmap* pBmp = Bitmap::FromFile(L"text.png", 0);
if (pBmp)
{
int format = pBmp->GetPixelFormat();
graphics.DrawImage(pBmp, 150, 10, pBmp->GetWidth(), pBmp->GetHeight());
delete pBmp;
pBmp = NULL;
}
}
void userPrinterPrint()
{
PRINTDLG pd;
ZeroMemory(&pd, sizeof(pd));
pd.lStructSize = sizeof(pd);
pd.Flags = PD_RETURNDC;
pd.hwndOwner = NULL;
if (PrintDlg(&pd))
{
HDC hdcPrinter = pd.hDC;
DOCINFO di;
ZeroMemory(&di, sizeof(di));
di.cbSize = sizeof(di);
di.lpszDocName = TEXT("GDI+ Print Document");
if (StartDoc(hdcPrinter, &di) > 0)
{
if (StartPage(hdcPrinter) > 0)
{
Draw(hdcPrinter);
EndPage(hdcPrinter);
}
EndDoc(hdcPrinter);
}
DeleteDC(hdcPrinter);
}
}