您的位置: 旅游網(wǎng) > 影視 >> 劇照

    中基于的打印和打印計(jì)劃

    發(fā)布時(shí)間:2021-10-28 05:38:13

    2.頁眉和頁腳

    打印文檔時(shí),往往需要打印文檔的標(biāo)題及頁碼或其他內(nèi)容的頁眉和頁腳。我們知道,在視圖類的函數(shù)OnPrint中處理頁眉和頁腳是最合適的,因?yàn)槊看蛴∫豁摚驼{(diào)用該函數(shù)一次,且只在打印過程中調(diào)用。有時(shí),為了避免與正文重合,還需要調(diào)整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);

    // 先設(shè)置頁眉字體,然后打印頁眉

    CFont font;

    eateFontIndirect(m_lfHead);

    CFont *oldFont = pDC-SelectObject(font);

    // 計(jì)算頁眉繪制的區(qū)域

    int nHeadMargin = 200; // 設(shè)置頁眉邊距為20mm

    CRect rc(pInfo-m_rectDraw);

    p = -nHeadMargin + m_nPhyTop;

    ttom = pInfo-m_p;

    // 設(shè)頁眉內(nèi)容為打印的文檔名

    CEx_Prn1Doc* pDoc = GetDocument();

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

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

    // 先設(shè)置頁腳字體,然后打印頁腳

    tach();

    eateFontIndirect(m_lfFoot);

    pDC-SelectObject(font);

    // 計(jì)算頁腳繪制的區(qū)域

    int nFootMargin = 200; // 設(shè)置頁腳邊距為20mm

    p = pInfo-m_ttom;

    ttom = p - (nFootMargin - m_nPhyBottom);

    // 設(shè)頁腳內(nèi)容為打印的頁碼

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

    pDC-DrawText(str, rc, DT_BOTTOM

    DT_SINGLELINE | DT_RIGHT);

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

    pDC-LPtoDP(pInfo-m_rectDraw);

    ——購銷臺(tái)賬制度。在購進(jìn)食品時(shí)建立相應(yīng)的食品購銷臺(tái)賬 pDC-SetMapMode(nOldMode); // 恢復(fù)原來映射模式

    CEditView::OnPrint(pDC, pInfo);

    }

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

    CEx_Prn1View::CEx_Prn1View()

    {

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

    double fontScale = 254.0/72.0;

    // 一個(gè)點(diǎn)相當(dāng)于多少0.1mm

    // 頁眉字體

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

    m_Weight = FW_NORMAL;

    m_CharSet = GB2312_CHARSET;

    strcpy((LPSTR)(m_FaceName),

    \"楷體_GB2312\");

    // 頁腳字體

    m_lfFoot = m_lfHead;

    }

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

    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中,默認(rèn)的Tab值等于8個(gè)字符。但實(shí)際情況的Tab值往往是4個(gè)字符,所以需要重設(shè)這個(gè)Tab值。

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

    void CEx_Prn1View::OnInitialUpdate()

    {

    CEditView::OnInitialUpdate();

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

    }

    再次運(yùn)行程序,最后的結(jié)果如下圖所示。

    三、 結(jié)束語

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

    黑龍江專業(yè)治療牛皮癬醫(yī)院
    長沙治療包皮過長多少錢
    三精葡萄糖酸鋅
    猜你會(huì)喜歡的
    猜你會(huì)喜歡的
    主站蜘蛛池模板: 尹人香蕉久久99天天拍久女久| 香蕉eeww99国产在线观看| 日本欧美大码aⅴ在线播放| 午夜三级A三级三点在线观看| 99re久久在热线播放最新地址| 欧美xxxx性猛交bbbb| 免费污片在线观看| 韩国免费观看高清完整| 国产精品熟女视频一区二区| 一区二区电影网| 欧洲精品久久久AV无码电影| 免费a级在线观看播放| 色综合天天综合高清网国产| 国产精品999| 三级伦理在线播放| 日韩中文字幕在线免费观看| 亚洲天堂一区二区三区四区| 精品久久久久久中文字幕无码软件| 国产熟睡乱子伦视频| 99国产情在线视频| 最新国产精品亚洲| 亚洲欧美另类专区| 精品久久久久不卡无毒| 国产一级特黄aa级特黄裸毛片| 91精品免费不卡在线观看| 日日碰狠狠添天天爽不卡| 亚洲国产精品久久网午夜| 美女把尿口扒开给男人桶视频| 国产精品第一区第27页| www.色亚洲| 手机看片日韩福利| 久久免费观看国产精品88av| 欧美专区日韩专区| 免费污污视频在线观看| 老子午夜我不卡理论影院| 国产在线视频福利| 91精品国产手机| 好大好硬好爽免费视频| 中文字幕亚洲欧美专区| 日本免费福利视频| 九一制片厂免费传媒果冻|