MFCで画像を印刷するコードの書き方

MFCで画像を印刷するためのコード例を以下に示します。

void CMyView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
    CPrintDialog printDlg(FALSE);
    if (printDlg.DoModal() == IDOK)
    {
        CDC dcPrint;
        dcPrint.Attach(printDlg.GetPrinterDC());

        // 获取打印机的设备上下文
        DOCINFO di;
        memset(&di, 0, sizeof(DOCINFO));
        di.cbSize = sizeof(DOCINFO);
        di.lpszDocName = _T("Print Image");
        dcPrint.StartDoc(&di);

        // 获取图片文件路径
        CString strImagePath = _T("C:\\path\\to\\your\\image.jpg");

        // 加载图片
        CImage image;
        image.Load(strImagePath);

        // 获取图片的大小
        int nImageWidth = image.GetWidth();
        int nImageHeight = image.GetHeight();

        // 获取打印设备的分辨率
        int nPrintWidth = dcPrint.GetDeviceCaps(HORZRES);
        int nPrintHeight = dcPrint.GetDeviceCaps(VERTRES);

        // 计算图片在打印纸上的位置和大小
        int nPrintImageWidth, nPrintImageHeight;
        if (nImageWidth > nPrintWidth)
        {
            nPrintImageWidth = nPrintWidth;
            nPrintImageHeight = nImageHeight * nPrintWidth / nImageWidth;
        }
        else
        {
            nPrintImageWidth = nImageWidth;
            nPrintImageHeight = nImageHeight;
        }
        int nPrintImageX = (nPrintWidth - nPrintImageWidth) / 2;
        int nPrintImageY = (nPrintHeight - nPrintImageHeight) / 2;

        // 缩放打印纸上的图片大小
        image.StretchBlt(dcPrint.m_hDC, nPrintImageX, nPrintImageY, nPrintImageWidth, nPrintImageHeight, SRCCOPY);

        dcPrint.EndDoc();
        dcPrint.Detach();
    }
}

上記のコードは、MFCのCViewクラスのOnPrint関数で実装されています。プリンタが印刷ダイアログで選択されると、コードはプリンタのデバイスコンテキストをdcPrintオブジェクトに追加し、印刷タスクを開始するDOCINFO構造を作成します。その後、コードは指定された画像をロードし、印刷用紙上の画像の位置とサイズを計算します。最後に、コードはStretchBlt関数を使用して画像を印刷用紙に描画し、印刷タスクを完了します。

なお、上記のコードは一例であり、実際の使用時には、個々のニーズに応じて適宜変更することが必要です。

bannerAds