日記です.自分用のメモ代わりに書くことが多いです.
エディタのコアの部分にはリッチエディットコントロールを使用することにしました.
なんかいろいろ機能がついてて便利そうだったので.
使ってみて驚いたのは,UNIX改行コードのファイルを開いてもちゃんと表示されたことです.
普通のエディットコントロールでは表示がおかしくなったのですが.さすがリッチですね(違
基本的な処理はリッチだろうとそうでなかろうと同じなのですが,
印刷関係にちょっとはまったので今日はそれについて書きたいと思います.
なんかいろいろ機能がついてて便利そうだったので.
使ってみて驚いたのは,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
この記事にコメントする
無題 By
AAA
PCAの仕様が決まっていない(先輩が修士論文を完成させることによって決まる?)のにそのコンパイラを作ることが研究テーマになっているというのは教授としてはどういう考えなのでしょうか。ブログを見る限りではエディタの作成はまさぽんの自発的行動みたいですし。教授から先ずこれやってみたいな指示ってないのですか?
無題 By
まさぽん
テーマがコンパイラになってるのは俺がやりたいと言ったからですよ.
BOSSは他のM1のように俺にもアプリケーションをやってほしいようです.
俺も別にやりたくないわけではなかったのですが,現状では俺が入る余地がないので俺としてはやる必要ないだろうと思っていました.
しかしBOSSが何度もしつこく「やってほしいな」と言うのでしぶしぶ手伝うことにしたのですが,
俺はやるならやるでちゃんと納得してからやらないと駄目なのですが,
BOSSからは俺がやる必然性などの説明が特になく,ちゃんとやったらやったでどんどん注文つけてくるし,やらなかったら何でやらないの?ってプレッシャーかけてくるし,
てなことでもう嫌になったわけです.
だから,自分の研究分野に引きこもろうとしているのです.
BOSSは他のM1のように俺にもアプリケーションをやってほしいようです.
俺も別にやりたくないわけではなかったのですが,現状では俺が入る余地がないので俺としてはやる必要ないだろうと思っていました.
しかしBOSSが何度もしつこく「やってほしいな」と言うのでしぶしぶ手伝うことにしたのですが,
俺はやるならやるでちゃんと納得してからやらないと駄目なのですが,
BOSSからは俺がやる必然性などの説明が特になく,ちゃんとやったらやったでどんどん注文つけてくるし,やらなかったら何でやらないの?ってプレッシャーかけてくるし,
てなことでもう嫌になったわけです.
だから,自分の研究分野に引きこもろうとしているのです.
プロフィール
HN:
まさぽん
性別:
男性
職業:
会社員
カウンター
ブログ内検索
クリック募金
カテゴリー
なかのひと
アクセス解析