前提・実現したいこと
エディットボックスに入力してある文字列をすべて印刷するプログラムを作りたいのですが、2ページ目以降の印刷の仕方が分かりません。
下のプログラムを実行した時に表示されるダイアログでページ範囲を「すべて」にしたときにすべてのページが印刷されるようにするにはどうすればいいのでしょうか?
私の持っている本には1ページ分の印刷方法しか書いてありませんでした。
nMaxPageの値を変更しなければいけないとは考えましたが、エディットボックスの内容が何ページ分あるかを調べる方法もわからないです。
いろいろ調べた結果、複数ページを印刷する場合はStartPageとEndPageを複数回繰り返せばいいという情報を見つけましたが、その場合DrawTextEx関数をどのように使えばいいかもわかりません(普通に複数回繰り返したら同じページだけが複数ページ印刷されました)。
該当のソースコード
C言語によるwin32プログラム(印刷する関数以外は省略します) LPTSTR moji=NULL; //文字列用保存用のグローバル変数 void myprint(HWND hWnd, HWND hedit){ static PRINTDLG pd; DOCINFO di; RECT rc; HGLOBAL hmem; int editsize; memset(&pd,0,sizeof(PRINTDLG)); pd.lStructSize=sizeof(PRINTDLG); pd.hwndOwner=hWnd; pd.Flags=PD_RETURNDC | PD_HIDEPRINTTOFILE | PD_USEDEVMODECOPIESANDCOLLATE; pd.nMinPage=1; pd.nMaxPage=1; pd.nFromPage=1; pd.nToPage=1; pd.nCopies=1; if(PrintDlg(&pd)==0){ return; } editsize=GetWindowTextLength(hedit); hmem=GlobalAlloc(GHND,sizeof(TCHAR)*editsize+sizeof(TCHAR)); moji=(LPTSTR)GlobalLock(hmem); GetWindowText(hedit,moji,editsize+1); memset(&di,0,sizeof(DOCINFO)); di.cbSize=sizeof(DOCINFO); di.lpszDocName=TEXT("test"); di.lpszOutput=NULL; StartDoc(pd.hDC,&di); StartPage(pd.hDC); rc.left = 0; rc.top = 0; rc.right = GetDeviceCaps(pd.hDC,PHYSICALWIDTH); rc.bottom = GetDeviceCaps(pd.hDC,PHYSICALHEIGHT); DrawTextEx(pd.hDC,moji,-1,&rc,DT_WORDBREAK | DT_EXPANDTABS | DT_EDITCONTROL,NULL); EndPage(pd.hDC); EndDoc(pd.hDC); DeleteDC(pd.hDC); GlobalUnlock(hmem); GlobalFree(hmem); }
補足情報(FW/ツールのバージョンなど)
Microsoft Visual C++ 2010 Express
WIN32 ユニコードビルド
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。