我有一個修復我做,讓打印的洪水填充的對象的一個問題...與內存DC BitBlt的問題從打印機創建DC
所以,完整的故事是我們使用Windows的GDI FloodFill功能,我們注意到它並不適用於打印機,所以我在inet上發現的是創建一個內存DC,與打印機DC兼容,並將所有繪圖操作都放在內存DC上,然後一次將BitBlt全部打印到打印機直流電(我不得不改變使用遞歸的顏色替換氾濫填充功能,因爲內存直流只允許主直流電做什麼)
問題是內存直流似乎是一個像素或兩個更大的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;
UPDATE(9月5日):
這裏是一個PDF打印一個鏈接,我直畫到打印機DC: hPrnDC.pdf
這裏是相同的,但我畫到內存DC然後BitBlt它到打印機DC: hMemPrnDC.pdf
現在,我確實在第二次啓用了我的遞歸泛洪填充功能,以顯示我們正在嘗試實現的一個示例,但沒有它的情況下也是這樣,所以這不是問題
如您所見,底部和右側邊緣被切斷,我也關注字體&兩者之間的線寬差異,但不像上膠不匹配那麼多
注意:頂部打印的文件名不通過內存DC,這是總是直接打印到DC打印機DC
你是什麼意思的「一個像素或兩個更大」?你看到了什麼結果? –
對不起,我沒有看到你的帖子,直到今天 這裏是一個PDF打印的鏈接,我直接打印到DC打印機: [鏈接](http://www.winsim.com/stackoverflow/hPrnDC。 pdf) &這裏是一樣的,但我畫到內存DC然後BitBlt它打印機DC: [鏈接](http://www.winsim.com/stackoverflow/hMemPrnDC。pdf) 現在,我確實啓用了我的遞歸洪水填充功能,以展示我們正在嘗試實現的示例 您可以看到,bttm和右邊緣被切斷,我也關注在字體和線的重量差異,但沒有那麼多的尺寸不匹配 謝謝, 斯科特 –
你明確地設置矩形1大於大小。你爲什麼驚訝它會出現1像素大? –