我有一个问题,我进行了修复以允许打印充满洪水的对象...
所以,完整的故事是我们使用的是 windows GDI FloodFill 功能,我们注意到它在打印机上不起作用,所以我在 inet 上找到的是创建一个内存 DC,与打印机 DC 兼容,并进行我所有的绘图操作在内存 DC 上,然后 BitBlt 一次将其全部传输到打印机 DC(我也必须更改为使用递归的颜色替换洪水填充功能,因为内存 DC 只允许主 DC 所做的事情)
问题是内存 DC 在 x 和 y 上似乎要大一两个像素,但我不知道该怎么做,当我从内存 DC 获取选定的位图时,它显示它的大小是正确的,我会喜欢使用 StretchBlt,但是我可以访问的值用作 StretchBlt 的参数,这与调用 BitBlt 没有什么不同
如果您需要更多信息,请告诉我...
提前致谢!!!
这是我的代码:
HDC hMemPrnDC = CreateCompatibleDC (hPrnDC);
HBITMAP hBitmap = CreateCompatibleBitmap (hPrnDC, iWidthLP, iHeightLP);
HBITMAP hOldBitmap = SelectBitmap (hMemPrnDC, hBitmap);
// paint the whole memory DC with the window color
HBRUSH hBrush = CreateSolidBrush (GetSysColor (COLOR_WINDOW));
RECT rect;
// add one to right and bottom, FillRect doesnt include the right and bottom edges
SetRect (&rect, 0, 0, iWidthLP + 1, iHeightLP + 1);
// NOTE: im doing this cause it starts out as all black
FillRect (hMemPrnDC, &rect, hBrush);
// delete object
DeleteBrush (hBrush);
//
// do all my MoveToEx, LineTo, Ellipse, Arc, TextOut,
// SetPixel, etc calls on hMemPrnDC here
//
// copy all the memory DC drawing data to the printer DC
BitBlt (hPrnDC, 0, 0, iWidthLP, iHeightLP, hMemPrnDC, 0, 0, SRCCOPY);
// select old bitmap, and clean up objects
SelectBitmap (hMemPrnDC, hOldBitmap);
DeleteBitmap (hBitmap);
DeleteDC (hMemPrnDC);
hMemPrnDC = NULL;
更新(9 月 5 日):
这是 PDF 打印的链接,我在其中直接绘制到打印机 DC: hPrnDC.pdf
这里是一样的,但我画到内存 DC 然后 BitBlt 它到打印机 DC: hMemPrnDC.pdf
现在,我确实在第二个上启用了我的递归洪水填充功能,以展示我们试图实现的目标,没有它它会做同样的事情,所以这不是问题
如您所见,底部和右侧边缘被切断,我也担心两者之间的字体和线宽差异,但没有大小不匹配那么大
注意:打印在顶部的文件名不会通过内存 DC,它总是直接绘制到打印机 DC