Visual Studio C++ .NET 2003 でマネージアプリ(Windowsフォームアプリ)を作っています。
印刷をしますが、用紙をA4横向きに指定したいのです。
ページ設定ダイアログでユーザーが指定するのではなく、初めからコードで組み込んでおきたいのですが、コードの書き方が解りません。
System::Void printDocument1_PrintPage(・・・・・)
{
System::Drawing::Printing::PaperKind ?????
}
????? のところに「何とかかんとか A4Transverse」と書けばいいように思いますが、解りません。
よろしくお願いいたします。
VB.NETですが、ここが参考になるかも。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=18729&forum=7&3
> ページ設定ダイアログでユーザーが指定するのではなく、初めからコードで組み込んでおきたいのですが
じゃ、違うかも。スマソ。
プリンタの DEVMODE へのハンドルを取得して
/*例)pDlg:CPrintDialogのポインタ*/
LPDEVMODE lpdevmode = pDlg->GetDevMode();
lpdevmode->dmOrientation = DMORIENT_LANDSCAPE; /*横*/
lpdevmode->dmPaperSize = DMPAPER_A4; /*A4*/
この DEVMODE を使用してプリンタ DC を作成すればできます。
> ヨロシコさん
MFCではないです。
> マネージアプリ(Windowsフォームアプリ)
てことですから。
あれ?よく見たら、
> ????? のところに「何とかかんとか A4Transverse」と書けばいいように思いますが、解りません
ということは、指定の仕方が分からないということでしょうか?
PaperKindは列挙型なので
?????は
System::Drawing::Printing::PaperKind::A4Transverse
でよいのでは。
VB.NETですが同じような質問がありました。
http://dobon.net/vb/bbs/log3-4/1971.html
<引用>
Dim strPapaerSZ As String
Dim pPaperSz As System.Drawing.Printing.PaperKind
'用紙サイズ-'A3にする
pPaperSz = Printing.PaperKind.A3
Dim pkSize As System.Drawing.Printing.PaperSize
For Each pkSize In PrintDocument1.PrinterSettings.PaperSizes
If pkSize.Kind = pPaperSz Then
PrintDocument1.DefaultPageSettings.PaperSize = pkSize
End If
Next
</引用>
までをMC++に書き換えればいいでしょう。
早とちりしました(^ ^;)
Blueさん、ヨロシコさん、ありがとうございます。
System::Drawing::Printing::PaperKind::A4Transverse;
と書いただけでは、何事も起こりませんでした。
VB.NET の質問は、まさに同じですね。
しかし、不勉強で、VBはやったことがないので、これをVC++に置き換えるというのが直ぐにはできません。
フォームアプリ自体、まだ始めたばかりなのです。
参考書やWEB上の情報も少なく苦戦しています。
よろしくお願いいたします。
http://www.bcap.co.jp/hanafusa/dotnet/Prt08.htm
を参考に勉強がてらやってみました。
Form上に、ツールボックスから、PrintDialogとPrintDocumentを追加してください。
// 用紙サイズ A4
System::Drawing::Printing::PaperKind pk = System::Drawing::Printing::PaperKind::A4;
// 設定できたかのフラグ
bool setps = false;
// サポートされている用紙サイズの一覧を確認
System::Drawing::Printing::PaperSize* ps;
for ( int i = 0; i < printDocument1->PrinterSettings->PaperSizes->Count; i++ )
{
ps = printDocument1->PrinterSettings->PaperSizes[ i ];
// 指定の用紙サイズがサポートされている場合
if ( ps->Kind == pk )
{
// 用紙サイズと用紙方向を設定
printDocument1->DefaultPageSettings->PaperSize = ps;
printDocument1->DefaultPageSettings->Landscape = true; // trueで縦
// 設定した
setps = true;
break;
}
}
// 正常に設定できた場合は、PrintDialogで確認
if ( setps )
{
printDialog1->Document = printDocument1;
printDialog1->ShowDialog();
}
else
{
System::Windows::Forms::MessageBox::Show( "指定の用紙サイズが設定できませんでした。" );
}
> 参考書やWEB上の情報も少なく苦戦しています。
これは本当にそうですね。VB.NETやC#のサンプルはゴロゴロしているのにMC++はないですね。
(というかMC++のメリットがC#等に比べてないからかなぁ、、C++/CLIからはちがうと思うが)
日本語のサイトに縛られずに、海外のサイトも探してみると良いでしょう。
> printDocument1->DefaultPageSettings->Landscape = true; // trueで縦
コメントちがっていました。
trueは横です。
> ps = printDocument1->PrinterSettings->PaperSizes[ i ];
これだとエラーですね。
ps = printDocument1->PrinterSettings->PaperSizes->Item[ i ];
に直しておいてください。
# VC2005ベースにやっているのでちゃんと確認できていませんでした。
Blueさん、有り難うございました。
バッチリ出来ました!
サポートされている用紙サイズ一覧の確認まで組み込まれていて、完璧です。
助かりました。礼
ツイート | ![]() |