#99 Article 1166 Posted at 1998/09/29 00:14:28 by OPRETER (MAP1819) [PROG.WIN]

Subject: おしえて Windowsのえらいひと(^^;;<古い

コモンの印刷ダイアログの表示の方法を教えてください(^^;;


 とりあえず、テストとしてSDKヘルプの印刷ダイアログのサンプルコードを
まんまコピーしてやってるんですが、ど~もうまくいかねぇ…
#あ、まだwin32のコンパイル環境そろってないんで、win16環境です(^^;;;

-- ここから --

void	pbs_PrtGra(HWND hwnd)
{
	PRINTDLG pd;
	
	/* 構造体のすべてのメンバを0に設定 */
	
	memset(&pd, 0, sizeof(PRINTDLG));
	
	/* PRINTDLG構造体の必要なメンバを初期化 */
	
	pd.lStructSize = sizeof(PRINTDLG);
	pd.hwndOwner = hwnd;
	pd.Flags = PD_RETURNDC;
	
	if (PrintDlg(&pd) != 0) {
	
	    Escape(pd.hDC, STARTDOC, 8, "text", NULL);
	
	    /* テキストおよび長方形を印刷 */
	
	    TextOut(pd.hDC, 50, 50, "Common Dialog Test Page", 23);
	    Rectangle(pd.hDC, 50, 90, 625, 105);
	    Escape(pd.hDC, NEWFRAME, 0, NULL, NULL);
	    Escape(pd.hDC, ENDDOC, 0, NULL, NULL);
	    DeleteDC(pd.hDC);
	    if (pd.hDevMode != NULL)
	       GlobalFree(pd.hDevMode);
	    if (pd.hDevNames != NULL)
	       GlobalFree(pd.hDevNames);
	}
}

-- ここまで --

 メニューから「印刷」を選ぶと、この関数に飛ぶようにしてあります。
  ところが、開くには開くんですが、「キャンセル」してプログラムを終了すると、
プログラムが一般保護違反でエラー…

 SDKヘルプに「PRINTDLG構造体はstaticかグローバルでなければならない」と
あったんで、宣言している「PRINTDLG pd」にstaticつけたり関数の外に持って
いくと、こんどは common.dll が一般保護違反で落ちる…

 いったい何が悪いんやねん…だれかおせーて…
#資料へのポインタでも可です。


 ものはついで。もうひとつ。
 CDのDISK-IDの取得方法とCDドライブのイジェクトの方法(^^;;
 たぶんどっちも MCI コマンドであるとは思うんだけど、手持ちのMCIヘルプには
載ってない…
#これも資料へのポインタでも可です。

								OPRETER