Printing a control
Hello, everyone. I'm wondering if you could assist me in my endeavor to
print the contents of a list box.
I have my list box with about twenty or so items in it. I would send it a
simple WM_PRINT, but the number of items VISIBLE is less than the actual
number of items in the list box, so a scrollbar is inserted into the control;
therefore, when printing, items will be missing.
When I print the contents of the list box, I want it to encompass the ENTIRE
printable area of the sheet of paper; I do not care if it's ANISOTROPIC or
ISOTROPIC. I've tried many ways to print the contents, but all my methods
seems to fail. What's plaguing me is the scaling; I'm having problems with
scaling the image -- sometimes its too small and other times it's too large,
truncating the image. Any help would be much appreciated.
I will now iterate the steps for my code...
To draw the image I call GetListBoxItems
void CMyView::GetListBoxItems(CDC &dc, CBitmap &bm)
{
CDC memDC;
memDC.CreateCompatibleDC(&dc);
// Let's get the size of the approximate rectangle that will encompass all
items
CSize listRect(m_ListBox.ApproximateViewRect());
// Now get the maximum printing area of the printer
CSize printerLP(dc.GetDeviceCaps(HORZRES), dc.GetDeviceCaps(VERTRES));
// Now adjust the memDC
memDC.SetMapMode(MM_ISOTROPIC);
memDC.SetWindowExt(printerLP);
memDC.SetViewportExt(listRec);
// Create the bitmap now with the correct dimensions
bm.CreateComaptibleBitmap(&dc, listRect.cx, listRect.cy);
CBitmap *pOrigBM = memDC.SelectObject(&bm);
// Now all I do is iterate through each of the items, using LVITEM...
// For that new item, I memDC.TextOut the item's text
}
Now, let me comment on my code. I know I do not need to create a memory DC,
but I do it for now, for later I will be appending other bitmaps to the
printer DC, but for now I want my list box to encompass the entire page.
Again, the problem is scaling. I believe the issue is stemming from the
mapping mode and setting the extents of the viewport and the window. Again,
I thank you all for perusing my code and assisting me in my predicament.
Should you need more code, I will be more than happy to post it, but I did
not want to intimidate anyone with the amount of code.
Thank you,
Saul775