请教:关于打印位图的流程问题

/*// add 2008-5-4
功能:打印图象
返回值:bool,TRUE成功,FALSE失败
m_strFileName这是图片的路径
iW这是图象的宽
iH这是图象的高
HWND g_hWnd = 0窗口句柄
g_point = this窗口
m_pidInfo这个参数是调用
*/
bool PrinterFun::PrintfImage(CString m_strFileName, long * iW, long * iH, HWND g_hWnd, CDialog * g_point, CPDIDinfo *m_pidInfo, int m_Copies, long m_JobId)// in, out, out
{
// 打开指定文件
CFile imageFile;// image file
if ( !imageFile.Open(m_strFileName, CFile::modeRead) )
{
AfxMessageBox("Image file not found.", MB_ICONEXCLAMATION | MB_OK);
return FALSE;
}

// 判断图象
BITMAPFILEHEADER bmFileHeader;
BITMAPINFOHEADER bmInfoHeader;
imageFile.Read(&bmFileHeader, sizeof(BITMAPFILEHEADER));
imageFile.Read(&bmInfoHeader, sizeof(BITMAPINFOHEADER));
if((bmFileHeader.bfType != MAKEWORD('B', 'M'))
|| (bmInfoHeader.biPlanes != 1)
|| (bmInfoHeader.biBitCount != 24)
|| (bmInfoHeader.biCompression != 0)
|| (bmInfoHeader.biWidth % 2)
|| (bmInfoHeader.biHeight % 2) )
{
AfxMessageBox("Illegal file format.", MB_ICONEXCLAMATION | MB_OK);
return FALSE;
}

iW = &bmInfoHeader.biWidth;
iH = &bmInfoHeader.biHeight;

LPBYTE lpvBits = new BYTE[bmFileHeader.bfSize];
imageFile.Seek(bmFileHeader.bfOffBits, CFile::begin);
imageFile.Read(lpvBits, bmFileHeader.bfSize);

gIParam.rowBytes = (bmInfoHeader.biWidth * 3 + 3) / 4 * 4;

DWORD dwErr = Error_NoError;
SetRect(&gIParam.bounds, 0, 0, bmInfoHeader.biWidth, bmInfoHeader.biHeight);
gIParam.baseAddr = lpvBits;
TRACE("gIParam.bounds = %ld, %ld, %ld, %ld\n",
gIParam.bounds.left, gIParam.bounds.top, gIParam.bounds.right, gIParam.bounds.bottom);

if(!IsRectEmpty(&gIParam.bounds))
{
gbThread = TRUE;
gbThreadStop = FALSE;
m_PrintThreadInfo.hMainWnd = g_hWnd;
m_PrintThreadInfo.pAppDlg = g_point;
m_PrintThreadInfo.nCopies = m_Copies;// 纸张份数
m_PrintThreadInfo.fMemClear = 0;//m_fMemClear;
m_PrintThreadInfo.startJobNo = m_JobId;
m_PrintThreadInfo.pCnt = pCnt;

ResetEvent(m_hEventInfoCopyDone);
AfxBeginThread(PrintThreadProc, &m_PrintThreadInfo);
WaitForSingleObject(m_hEventInfoCopyDone, INFINITE);
}
if (pCnt != NULL) delete [] pCnt;

// UpdateData(FALSE);
/**/
return TRUE;
}
我知道没有初始化打印机获取到打印机ID,然后根据打印机种类选择不同的耗材,可我脑子木了不知道该怎么写了高手给点提示吧,或加下QQ指导下!

第1个回答  2008-05-06
你在CSDN上也发了这个贴吧?爱莫能助啊

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网