ある文書を印刷するプログラムを作っているのですが,
すべて横向きで出力するので,
はじめから横向きに設定したいのです.
DEVMODE構造体のメンバを設定してみたり、
PRINTDLG構造体を設定してみたり
OnPreparePrintingでいろいろ書いたのですが,
できませんでした。
どうか、おしえてください。おねがいします。
こんちわ けん★です
// PrintDialogの定義
CPrintDialog PrintDlg(FALSE, PD_ALLPAGES | PD_USEDEVMODECOPIES | PD_HIDEPRINTTOFILE);
if (PrintDlg.GetDefaults() != 0) // デフォルトの値取得
{
LPDEVMODE pDevMode = PrintDlg.GetDevMode(); // DEVMODEの取得
pDevMode->dmOrientation = DMORIENT_LANDSCAPE; // 印刷横向きの設定
}
これでどうでしょうか?
けんさん。できませんでした。
ViewクラスのOnPreparePrintingに
けんさんのコードをそのまま書いたのですが、
エラーにもならず、なにも変わりませんでした。
DEVMODE構造体のdmOrientationがshort型を返すので、
値をみてみると、3をあとにもさきにも、返すだけでした。
せっかく教えてもらったので
たいへん恐縮ですが、
もう一度おねがいします。
私がコードを書いたところがおかしかったのでしょうか。
ちなみにこのように掲示板を使うのは初めてだったので、
お返事がいただけてとても感激しました。
え~
OnPreparePrinting内でDoPreparePrintingを呼んでいると思いますが、
DoPreparePrintingを呼ぶ前に上記のソースを書いても駄目でしょうか?
ある文書を印刷するとありますが、ページ向きを横向きにするだけで、後は普通のWindowsの印刷と
同じように、印刷ダイアログからの印刷ということでよろしいのでしょうか?
それとも、印刷機能自体をカスタマイズするのでしょうか?
InitInstance()あたりで
PRINTDLG p;
::ZeroMemory(&p, sizeof(PRINTDLG));
GetPrinterDeviceDefaults(&p);
if( p.hDevMode != NULL)
{
LPDEVMODE lp = (LPDEVMODE)GlobalLock(p.hDevMode);
if( lp->dmFields & DM_ORIENTATION )
lp->dmOrientation = DMORIENT_LANDSCAPE;
GlobalUnlock( p.hDevMode );
}
としてみてください。
できました!!
EIJIさんのコードをInitInstance()の中に書いたら、ばっちりできてました。
プリンタの設定ダイアログの中でも印刷の向きが
横になっていました。
どうもありがとうございました!
やっとプログラムが提出できます。
けんさんもどうもありがとうございました。