2019年2月25日月曜日

PictureFan ver.0.37.0 を公開

PictureFan の ver.0.37.0 を公開しました。
ダウンロードはいつもの場所からどうぞ。
詳しい更新内容もいつもの場所にあります。

今回の大きな変更点として、スクリプトを今までの WSH (Windows Script Host) から Python に変更しました。

2019年2月8日金曜日

印刷ダイアログで指定した枚数の二乗印刷されてしまう問題

PictureFan の印刷周りのコードを見直していて色々調べていたところ、MS のドキュメントに何やら知らないことが書いてあるのを見つけてしまいました。

PRINTDLGEXA structure

Starting with Windows Vista, when you call PrintDlg or PrintDlgEx with PD_RETURNDC set to TRUE and PD_USEDEVMODECOPIESANDCOLLATE set to FALSE, the PrintDlg or PrintDlgEx function sets the number of copies in the nCopies member of the PRINTDLG structure, and it sets the number of copies in the structure represented by the hDC member of the PRINTDLG structure.

When making calls to GDI, you must ignore the value of nCopies, consider the value as 1, and use the returned hDC to avoid printing duplicate copies.

いつの間にかそんな変更されても困るんですけど…。

というわけで、Vista 以降は PD_USEDEVMODECOPIESANDCOLLATE を付けようが付けまいが、 PD_RETURNDC を使っている場合は nCopies とか PD_COLLATE は無視して、1回だけ描画すればいいということですね(ですよね?)。