忍者ブログ
日記です.自分用のメモ代わりに書くことが多いです.
8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

エディタのコアの部分にはリッチエディットコントロールを使用することにしました.

なんかいろいろ機能がついてて便利そうだったので.

使ってみて驚いたのは,UNIX改行コードのファイルを開いてもちゃんと表示されたことです.

普通のエディットコントロールでは表示がおかしくなったのですが.さすがリッチですね(違

基本的な処理はリッチだろうとそうでなかろうと同じなのですが,

印刷関係にちょっとはまったので今日はそれについて書きたいと思います.


今日は基本的にネットにある「猫でもわかるプログラミング」のページを見ながらやっていたのですが,

印刷の部分がうまくいきませんでした.

おそらく現在は使われていないやり方を用いているのでしょう.

本(猫でもわかるWindowsプログラミング)にある方法ではうまくいくのですが,それは一般的な方法で,

リッチエディットコントロールの機能を用いる方法についての記述がないのです.

そこで,基本的には本のやり方でやって,肝となる部分をウェブ版「猫」の記述でやってみました.

そうするとうまくいきました.以下がその印刷を行う関数です.

int MyPrint(HWND hEdit)
{
    FORMATRANGE fr;
    PRINTDLG pd;
    DOCINFO di;
    LONG lTextLen;
    LONG lNextMin = 0;

    memset(&pd, 0, sizeof(PRINTDLG));
    pd.lStructSize = sizeof(PRINTDLG);
    pd.hwndOwner = hEdit;
    pd.hDevMode = NULL;
    pd.hDevNames = NULL;
    pd.Flags = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC | PD_NOPAGENUMS | PD_NOSELECTION | PD_HIDEPRINTTOFILE;

    pd.nMinPage = 1;
    pd.nMaxPage = 1;
    pd.nFromPage = 1;
    pd.nToPage = 1;
    pd.nCopies = 1;

    if (PrintDlg(&pd) == 0)
        return -1;

    memset(&fr, 0, sizeof(FORMATRANGE));
    fr.hdc = pd.hDC;
    fr.hdcTarget = pd.hDC;
    fr.rcPage.left = 0;
    fr.rcPage.top = 0;
    fr.rcPage.right = MulDiv(GetDeviceCaps(pd.hDC, PHYSICALWIDTH), 1440, GetDeviceCaps(pd.hDC, LOGPIXELSX));
    fr.rcPage.bottom = MulDiv(GetDeviceCaps(pd.hDC, PHYSICALHEIGHT), 1440, GetDeviceCaps(pd.hDC, LOGPIXELSY));
    // 用紙の上下左右は1インチあけて印刷
    fr.rc.top = 1440;
    fr.rc.left = 1440;
    fr.rc.right = fr.rcPage.right - 1440;
    fr.rc.bottom = fr.rcPage.bottom -1440;
    lTextLen = SendMessage(hEdit, WM_GETTEXTLENGTH, 0, 0);
    fr.chrg.cpMin = 0;
    fr.chrg.cpMax = lTextLen;

    memset(&di, 0, sizeof(DOCINFO));
    di.cbSize = sizeof(DOCINFO);
    di.lpszDocName = szFile;

    StartDoc(pd.hDC, &di);
    while (fr.chrg.cpMin < lTextLen) {
        lNextMin = SendMessage(hEdit, EM_FORMATRANGE, TRUE, (LPARAM)&fr);
        StartPage(pd.hDC);
        SendMessage(hEdit, EM_DISPLAYBAND, 0, (LPARAM)&fr.rc);
        // ここにファイル名やページ番号を描画する処理を書く
        EndPage(pd.hDC);
        fr.chrg.cpMin = lNextMin;
    }
    SendMessage(hEdit, EM_FORMATRANGE, TRUE, NULL);
    EndDoc(pd.hDC);
    DeleteDC(pd.hDC);

    return 0;
}

メニューから印刷を指定するとこの関数を呼び出してやればいいです.

これで無事に印刷することができます.
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字
無題 By AAA
もはや半年以上プログラムを組んでいない自分には理解すらできない。(もともとWindowsプログラミングには縁がなかったが)
2006/11/19(Sun)17:44:26 編集
無題 By まさぽん
Windowsプログラミングは変な構造体やメッセージがやたら出てくるからソース見ただけで分かる人はそういないと思いますよ
2006/11/19(Sun)18:26:44 編集
無題 By AAA
PCAの仕様が決まっていない(先輩が修士論文を完成させることによって決まる?)のにそのコンパイラを作ることが研究テーマになっているというのは教授としてはどういう考えなのでしょうか。ブログを見る限りではエディタの作成はまさぽんの自発的行動みたいですし。教授から先ずこれやってみたいな指示ってないのですか?
2006/11/19(Sun)19:05:46 編集
無題 By まさぽん
テーマがコンパイラになってるのは俺がやりたいと言ったからですよ.
BOSSは他のM1のように俺にもアプリケーションをやってほしいようです.
俺も別にやりたくないわけではなかったのですが,現状では俺が入る余地がないので俺としてはやる必要ないだろうと思っていました.
しかしBOSSが何度もしつこく「やってほしいな」と言うのでしぶしぶ手伝うことにしたのですが,
俺はやるならやるでちゃんと納得してからやらないと駄目なのですが,
BOSSからは俺がやる必然性などの説明が特になく,ちゃんとやったらやったでどんどん注文つけてくるし,やらなかったら何でやらないの?ってプレッシャーかけてくるし,
てなことでもう嫌になったわけです.
だから,自分の研究分野に引きこもろうとしているのです.
2006/11/19(Sun)20:48:55 編集
この記事へのトラックバック
この記事にトラックバックする:
プロフィール
HN:
まさぽん
性別:
男性
職業:
会社員
最新記事
(08/22)
(08/16)
(08/08)
(08/01)
(07/30)
カウンター
ブログ内検索
最新コメント
[03/18 ひぐ]
[03/10 まさぽん]
[03/09 ボンボ-ン]
[03/07 まさぽん]
[03/07 まさぽん]
クリック募金
なかのひと
アクセス解析
忍者ブログ [PR]
≪PREV HOME NEXT≫