本程序没有用到没有用MFC的文档视图模板提供的打印预览功能
在此共用了两个继承 Cdialog 的类:
1、 CpreParent
2、 CpreView
CpreParent 作为最外面打印预览的控制窗口, CpreView作为真正的预览窗口。
CpreParent窗口内包括一个平面打印控制工具栏及一个预览窗口CpreView
在对话框的窗口中,其中的学生数据现在我已放在ListCtrl控件中了,还有一图形放有Stati c控件中,在对话框的窗口类中有一个DrawInfo 定义好的静态打印函数static void DrawInfo(CDC &memDC,PRNINFO PrnInfo)。
在DrawInfo函数中要实现的工作有:将ListCtrl控件中数据提取出来并显示在预览窗口。
现在我的问题的想把Static控件中图形抓出来也显示在预览窗口。
void CPreviewDemoDlg::DrawInfo(CDC &memDC, PRNINFO PrnInfo)//它是一个静态函数
{
.......
.......
for(int i=0;i<nItem; i++)
{
ListView_GetItemText(hList, i+iStart, 0, szID, 32);//它是用这种方法获得CList控件中的数据
ListView_GetItemText(hList, i+iStart, 1, szName, 16);
ListView_GetItemText(hList, i+iStart, 2, szSex, 8);
memDC.DrawText(szID, &rt1, DT_LEFT | DT_VCENTER | DT_SINGLELINE);
memDC.DrawText(szName, &rt2, DT_LEFT | DT_VCENTER | DT_SINGLELINE);
memDC.DrawText(szSex, &rt3, DT_LEFT | DT_VCENTER | DT_SINGLELINE);
}
在这个静态函数中我不能用下面的语句来抓图:
CStatic *pStatic pStatic=(CStatic*)GetDlgItem(IDC_STATIC_SHOW_U);
pStatic->GetClientRect(&rect);
pStatic->ClientToScreen(&rect);
ScreenToClient(&rect);
.....
.....
原因是它是一静态成员函数而上面用的是ListView_GetItemText(hList, i+iStart, 0, szID, 32)
我想抓图应该怎么办呢?
将pStatic的实例指针传入或添加成员变量static CStatic *pStatic;
HWND hWnd=pStatic->GetSafeHwnd();
或static HWND hwnd;
::GetClientRect(hWnd,&rect);
::ClientToScreen(hWnd, (LPPOINT)&rect);
::ClientToScreen(hWnd, ((LPPOINT)&rect)+1);
::ScreenToClient(hWnd, (LPPOINT)&rect);
::ScreenToClient(hWnd, ((LPPOINT)&rect)+1);