次の問題を解決する必要があります。PrintDlg()関数を呼び出すと、64ビットマシンで実行しているときにアプリケーションがクラッシュします。
掘り下げて髪を引っ張った後、私は、PrintDlg()の元の呼び出しをその兄であるPrintDlgEx()に置き換えることが最善の解決策であると判断しました。
そうすることで、1つの問題は修正されますが(クラッシュしなくなります!)、別の問題が発生します。コードを実行すると、印刷ダイアログが表示されず、成功コードが返され、デフォルトのプリンターのすべての情報が表示されます。標準の「印刷設定」ウィンドウを表示するには、この関数が必要です。どうすればそれを実現できるのかわかりません。以下に示すのは、ダイアログを表示するために使用しようとしているサンプル値です。
何かご意見は?前もって感謝します。
// Initialize the PRINTDLGEX structure.
pd2.lStructSize = sizeof(PRINTDLGEX);
pd2.hwndOwner = wnddata->wnd.hnd;
pd2.hDevMode = NULL;
pd2.hDevNames = NULL;
pd2.hDC = NULL;
pd2.Flags = PD_RETURNDC | PD_COLLATE;
pd2.Flags2 = 0;
pd2.ExclusionFlags = 0;
pd2.nPageRanges = 0;
pd2.nMaxPageRanges = 10;
pd2.lpPageRanges = NULL;
pd2.nMinPage = 1;
pd2.nMaxPage = 1000;
pd2.nCopies = 1;
pd2.hInstance = 0;
pd2.lpPrintTemplateName = NULL;
pd2.lpCallback = NULL;
pd2.nPropertyPages = 0;
pd2.lphPropertyPages = NULL;
pd2.nStartPage = START_PAGE_GENERAL;
pd2.dwResultAction = 0;
pdrc = PrintDlgEx (&pd2);