您的位置: 旅游網 > 影視 >> 劇照

    中基于的打印和打印計劃

    發布時間:2021-10-28 05:38:13

    2.頁眉和頁腳

    打印文檔時,往往需要打印文檔的標題及頁碼或其他內容的頁眉和頁腳。我們知道,在視圖類的函數OnPrint中處理頁眉和頁腳是最合適的,因為每打印一頁,就調用該函數一次,且只在打印過程中調用。有時,為了避免與正文重合,還需要調整CPrintInfo中的成員變量m_rectDraw的值。例如下面的代碼:

    void CEx_Prn1View::OnPrint(CDC* pDC, CPrintInfo* pInfo)

    {

    SetPageMargin(pDC, pInfo, 250, 250, 250, 250);

    // 頁邊距均為25毫米

    int nOldMode = pDC-GetMapMode();

    pDC-SetMapMode(MM_LOMETRIC);

    pDC-DPtoLP(pInfo-m_rectDraw);

    // 先設置頁眉字體,然后打印頁眉

    CFont font;

    eateFontIndirect(m_lfHead);

    CFont *oldFont = pDC-SelectObject(font);

    // 計算頁眉繪制的區域

    int nHeadMargin = 200; // 設置頁眉邊距為20mm

    CRect rc(pInfo-m_rectDraw);

    p = -nHeadMargin + m_nPhyTop;

    ttom = pInfo-m_p;

    // 設頁眉內容為打印的文檔名

    CEx_Prn1Doc* pDoc = GetDocument();

    CString str = pDoc-GetPathName(); // 獲取文檔全名

    pDC-DrawText(str, rc, DT_TOP|DT_CENTER);

    // 先設置頁腳字體,然后打印頁腳

    tach();

    eateFontIndirect(m_lfFoot);

    pDC-SelectObject(font);

    // 計算頁腳繪制的區域

    int nFootMargin = 200; // 設置頁腳邊距為20mm

    p = pInfo-m_ttom;

    ttom = p - (nFootMargin - m_nPhyBottom);

    // 設頁腳內容為打印的頁碼

    rmat(\"- %d -\", pInfo-m_nCurPage);

    pDC-DrawText(str, rc, DT_BOTTOM

    DT_SINGLELINE | DT_RIGHT);

    pDC-SelectObject(oldFont); // 恢復原來的字體

    pDC-LPtoDP(pInfo-m_rectDraw);

    ——購銷臺賬制度。在購進食品時建立相應的食品購銷臺賬 pDC-SetMapMode(nOldMode); // 恢復原來映射模式

    CEditView::OnPrint(pDC, pInfo);

    }

    這樣,在用戶視圖類的構造函數中添加LOGFONT類型的成員變量m_lfHead和m_lfFont的下列初始化代碼:

    CEx_Prn1View::CEx_Prn1View()

    {

    memset(m_lfHead, 0, sizeof(LOGFONT)); // 成員為0

    double fontScale = 254.0/72.0;

    // 一個點相當于多少0.1mm

    // 頁眉字體

    m_Height = -(int)(9 * fontScale + 0.5); // 9號字

    m_Weight = FW_NORMAL;

    m_CharSet = GB2312_CHARSET;

    strcpy((LPSTR)(m_FaceName),

    \"楷體_GB2312\");

    // 頁腳字體

    m_lfFoot = m_lfHead;

    }

    到這里,編譯并運行程序后,打開一個文檔,選擇\"文件\"|\"打印預覽\"菜單命令就可以看到效果了。但是文檔顯示的字體還需要進行設置,這比較簡單。只需添加個菜單項(設為ID_VIEW_FONT),然后用ClassWizard在CEx_Prn1View類添加該命令的消息映射函數,并添加下列代碼:

    void CEx_Prn1View::OnViewFont()

    {

    CFontDialog dlg;

    if (Modal() == IDOK) {

    LOGFONT lf;

    tCurrentFont(lf);

    HFONT hFont;

    hFont = ::CreateFontIndirect(lf);

    if (hFont != NULL)

    SendMessage(WM_SETFONT, (WPARAM)hFont);

    }

    }

    3.重置TAB值

    在CEditView中,默認的Tab值等于8個字符。但實際情況的Tab值往往是4個字符,所以需要重設這個Tab值。

    CEditView::SetTabStops就是這樣的函數,但MSDN對其解釋令人費解,什么\"設置的Tab值是以對話框點為單位的\"等等。實際上,只要打開MFC的源代碼文件p就可以看到默認的Tab值為8*4,顯然,若設置為4個字符,則SetTabStops的參數值應為4*4,即16。設置Tab值的代碼可直接添加在 CEx_Prn1View::OnInitialUpdate函數中:

    void CEx_Prn1View::OnInitialUpdate()

    {

    CEditView::OnInitialUpdate();

    SetTabStops(4 * 4); // 設置一個停止位等于4個字符

    }

    再次運行程序,最后的結果如下圖所示。

    三、 結束語

    通過在CEditView中添加設置頁邊距、頁眉頁腳以及改變字體和Tab值等功能,不能代碼量小,而且更主要的是滿足了一般ASCII文檔的內容顯示和打印的要求。查看本文來源

    黑龍江專業治療牛皮癬醫院
    長沙治療包皮過長多少錢
    三精葡萄糖酸鋅
    猜你會喜歡的
    猜你會喜歡的
    主站蜘蛛池模板: 国产普通话对白刺激| 性xxxxx护士第一次| 亚洲精品国产成人中文| 色噜噜亚洲精品中文字幕| 国产精品免费小视频| mm131美女爽爽爽作爱视频| 日本牲交大片免费观看| 亚洲女初尝黑人巨高清| 第一福利官方导航大全| 国产做国产爱免费视频| 波多野结衣导航| 在线视频免费国产成人| 中国黄色一级片| 日韩亚洲专区在线电影| 亚洲日韩亚洲另类激情文学| 精品一区二区三区东京热| 国产伦精品一区二区三区精品| 2018天天弄| 天天射天天操天天干| 中文字幕无线码免费人妻| 日韩电影免费在线观看中文字幕| 亚洲欧美国产精品第1页| 粉嫩大学生无套内射无码卡视频| 国产三级精品三级在线专区| 久久五月天综合| 国产精品视频全国免费观看| jizzjizz国产精品久久| 我想看一级毛片免费的| 久久精品亚洲欧美va| 欧美婷婷六月丁香综合色| 亚洲网站视频在线观看| 精品国产一区二区三区免费| 国产一国产一级毛片视频在线| 国产成人午夜片在线观看| 国产精品欧美一区二区三区| AV天堂午夜精品一区| 尤物网在线视频| 中文字幕在线欧美| 日韩av无码一区二区三区不卡毛片| 亚洲中文字幕不卡无码| 欧美视频一区在线观看|