◀ANSI版開発トップへ
  • 684 ヘッダとフッダの変換例
    • 685 Re:ヘッダとフッダの変換例
    • 686 Re: ヘッダとフッダの変換例
      • 688 Re2: ヘッダとフッダの変換例
  • [684] ヘッダとフッダの変換例 あああ 2001年09月18日 13:00

    低レベル実装がお嫌いのようですね?
    StrChr と CMemory を用いて書きなおしました。
    StrChr が使えるか心配ですが。


    CMemory* FormatHeaderFooter(char *pchSrc) {
    CMemory *pcmem = new CMemory;
    char szBuf[8], *pch = pchSrc;

    do {
    pch = StrChr(pch, '&');
    if(pch == NULL) break; // '&' が見つからなかった
    // '&' の直前まで追加。
    cmem.Append(pchSrc, (int)(pch - pchSrc));
    pchSrc ++; // '&' の次に移動。
    switch(*pchSrc) {
    case 'f': cmem.AppendSz(ファイル名); break;
    case 'P':
    sprintf(szBuf, "%ld", ページ番号);
    cmem.AppendSz(szBuf); break;
    .....
    default: pch ++; // 読み飛ばし。
    }
    pchSrc = pch;
    } while(1);
    return cmem;
    }
    • [685] Re:ヘッダとフッダの変換例 あああ 2001年09月18日 13:07

      誤:
      > default: pch ++; // 読み飛ばし。
      > }
      > pchSrc = pch;
      > } while(1);
      > return cmem;

      正:
      > default: pch = CMemory::MemCharNext(pch, 2, pch);
      > }
      > pchSrc = ++pch;
      > } while(1);
      > return cmem;
    • [686] Re: ヘッダとフッダの変換例 げんた 2001年09月18日 17:41

      ▼あああ さん
      なんか「あ」が一つ減っていますが気にしないことにして(^^ゞ

      >低レベル実装がお嫌いのようですね?
      文字列の変換はいいんですけど,現在Headerは左揃えでFooterは中央揃えに固定になっているのも同時に何とかしたい.
      • [688] Re2: ヘッダとフッダの変換例 あああ 2001年09月19日 10:19

        ▼ げんたさん
        > 現在Headerは左揃えでFooterは中央揃えに固定になっているのも同時に何とかしたい.

        1) [印刷ページ設定]にラジオボタンかドロップダウンを追加
        2) CDlgPrintSetting に m_{Header,Footer}Align メンバを追加して GetData で揃えを取得
        3) CEditWnd::OnPaint で揃えに対応した位置の計算

        //**文字列の正確なサイズを求める方法**
        SIZE sz;
        GetTextExtentPoint32(hdc, lpsz, lstrlen(lpsz), &sz);
        GetTextMetrics(hdc, &tm); // ラスタフォントを考慮して
        // (幅 == sz.cx - tm.tmOverhang)
        // (高さ == tm.tmHeight か sz.cy の好きな方)