typedef struct tagPD { // pd DWORD lStructSize; HWND hwndOwner; HANDLE hDevMode; HANDLE hDevNames; HDC hDC; DWORD Flags; WORD nFromPage; WORD nToPage; WORD nMinPage; WORD nMaxPage; WORD nCopies; HINSTANCE hInstance; DWORD lCustData; LPPRINTHOOKPROC lpfnPrintHook; LPSETUPHOOKPROC lpfnSetupHook; LPCTSTR lpPrintTemplateName; LPCTSTR lpSetupTemplateName; HANDLE hPrintTemplate; HANDLE hSetupTemplate; } PRINTDLG;lStructSize には、この構造体のサイズを指定します
定数 | 解説 |
---|---|
PD_ALLPAGES | 「すべて」ボタンが選択された |
PD_COLLATE | 入力時に「部単位で印刷」チェックボックスがセットされる PrintDlg() 関数が戻った後では、ユーザーが「部単位で印刷」を選択したが プリンタドライバが部単位の印刷をサポートしていないことを表す |
PD_DISABLEPRINTTOFILE | 「ファイルへ出力」チェックボックスを無効にする1 |
PD_ENABLEPRINTHOOK | lpfnHook で指定されたフック関数を有効にする |
PD_ENABLEPRINTTEMPLATE | hInstance が lpPrintTemplateName メンバで指定された ダイアログテンプレートを含むリソースのインスタンスであることを示す |
PD_ENABLEPRINTTEMPLATEHANDLE | hPrintTemplate メンバがロード済みのダイアログボックステンプレートを含む メモリブロックを指していることを表す このフラグが指定されている場合、lpPrintTemplateName は無視される |
PD_ENABLESETUPHOOK | lpfnSetupHook で指定されたフック関数を有効にする |
PD_ENABLESETUPTEMPLATE | hInstance および lpSetupTemplateName で指定された ダイアログボックステンプレートを使用することを示す |
PD_ENABLESETUPTEMPLATEHANDLE | hSetupTemplate メンバがロード済みのダイアログボックステンプレートを含む メモリブロックを指していることを表す このフラグが指定されている場合、lpSetupTemplateName は無視される |
PD_HIDEPRINTTOFILE | 「ファイルへ出力」チェックボックスを隠す |
PD_NONETWORKBUTTON | 「ネットワーク」ボタンを無効にする |
PD_NOPAGENUMS | 「ページ設定」ボタンと関連する編集コントロールを無効にする |
PD_NOSELECTION | 「選択した部分」ボタンを無効にする |
PD_NOWARNING | デフォルトプリンタがない場合に、警告を表示しない |
PD_PAGENUMS | 「ページ設定」ボタンが選択された状態であることを示す |
PD_PRINTSETUP | 「印刷」ダイアログボックスではなく 「プリンタの設定」ダイアログボックスを表示する |
PD_PRINTTOFILE | 「ファイルへ出力」チェックボックスがチェック状態であることを示す |
PD_RETURNDC | hDC にデバイスコンテキストを格納することを表す |
PD_RETURNDEFAULT | ダイアログを表示せず、システム設定のデフォルトプリンタで初期化する DEVMODE と DEVNAMES 構造体は NULL でなければならない |
PD_RETURNIC | hDC に情報コンテキストを格納することを表す |
PD_SELECTION | 「選択した部分」ボタンが選択されていることを示す |
PD_SHOWHELP | 「ヘルプ」ボタンを表示する この値が設定される場合、親ウィンドウを持たなければなりません |
PD_USEDEVMODECOPIES | PD_USEDEVMODECOPIESANDCOLLATE と同じ |
PD_USEDEVMODECOPIESANDCOLLATE | プリンタドライバが複数部印刷をサポートしていない場合 「部数」編集コントロールを無効にする 部単位印刷をサポートしていない場合は 「部単位で印刷」チェックボックスを無効にする |
typedef struct tagDEVNAMES { // dvnm WORD wDriverOffset; WORD wDeviceOffset; WORD wOutputOffset; WORD wDefault; } DEVNAMES;この構造体は、面白いことに文字列型のメンバを含んでいません
#include <windows.h> #define TITLE TEXT("Kitty on your lap") LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) { HDC hdc; PAINTSTRUCT ps; BCHAR *strName; static PRINTDLG pd; switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_CREATE: pd.lStructSize = sizeof (PRINTDLG); pd.hwndOwner = hWnd; pd.Flags = PD_RETURNDC; return 0; case WM_PAINT: hdc = BeginPaint(hWnd , &ps); if (pd.hDevMode) { strName = (BCHAR *)GlobalLock(pd.hDevMode); TextOut(hdc , 0 , 0 , strName , lstrlen(strName)); GlobalUnlock(pd.hDevMode); } EndPaint(hWnd , &ps); return 0; case WM_RBUTTONUP: PrintDlg(&pd); InvalidateRect(hWnd , NULL , TRUE); return 0; } return DefWindowProc(hWnd , msg , wp , lp); } int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { HWND hwnd; MSG msg; WNDCLASS winc; winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName = NULL; winc.lpszClassName = TEXT("KITTY"); if (!RegisterClass(&winc)) return -1; hwnd = CreateWindow( TEXT("KITTY") , TITLE , WS_OVERLAPPEDWINDOW | WS_VISIBLE , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , NULL , NULL , hInstance , NULL ); if (hwnd == NULL) return -1; while(GetMessage(&msg , NULL , 0 , 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
typedef struct tagPSD { // psd DWORD lStructSize; HWND hwndOwner; HGLOBAL hDevMode; HGLOBAL hDevNames; DWORD Flags; POINT ptPaperSize; RECT rtMinMargin; RECT rtMargin; HINSTANCE hInstance; LPARAM lCustData; LPPAGESETUPHOOK lpfnPageSetupHook; LPPAGEPAINTHOOK lpfnPagePaintHook; LPCTSTR lpPageSetupTemplateName; HGLOBAL hPageSetupTemplate; } PAGESETUPDLG, * LPPAGESETUPDLG;lStructSize には、この構造体のサイズを指定します
定数 | 解説 |
---|---|
PSD_DEFAULTMINMARGINS | デフォルトの最小余白値を使用する |
PSD_DISABLEMARGINS | 余白を無効にする |
PSD_DISABLEORIENTATION | 印刷の向きを無効にする |
PSD_DISABLEPAGEPAINTING | ページ設定プレビューを無効にする |
PSD_DISABLEPAPER | 用紙の設定を無効にする |
PSD_DISABLEPRINTER | 「プリンタ」ボタンを無効にする |
PSD_ENABLEPAGEPAINTHOOK | lpfnPagePaintHook で指定されたフック関数を有効にする |
PSD_ENABLEPAGESETUPHOOK | lpfnPageSetupHook で指定されたフック関数を有効にする |
PSD_ENABLEPAGESETUPTEMPLATE | hInstance と lpPageSetupTemplateName で指定された ダイアログボックステンプレートを用いて作成する |
PSD_ENABLEPAGESETUPTEMPLATEHANDLE | lPageSetupTemplate がロード済みの ダイアログボックステンプレートを格納する データブロックを指すことを示す |
PSD_INHUNDREDTHSOFMILLIMETERS | 1/100 ミリメートルを測定単位とする |
PSD_INTHOUSANDTHSOFINCHES | 1/1000 インチを測定単位とする |
PSD_INWININIINTLMEASURE | 実装されない |
PSD_MARGINS | 初期余白値を rMargin メンバの値に設定する |
PSD_MINMARGINS | 最小余白値を rMinMargin メンバの値に設定する |
PSD_NONETWORKBUTTON | 「ネットワーク」ボタンを隠して無効にする |
PSD_NOWARNING | エラーメッセージを表示しない |
PSD_RETURNDEFAULT | 「ページ設定」ダイアログボックスを表示せず デフォルトプリンタに関する情報を取得する |
PSD_SHOWHELP | 「ヘルプ」ボタンを表示する この場合、ダイアログは親ウィンドウを持たなければならない |
#include <windows.h> #define TITLE TEXT("Kitty on your lap") LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) { HDC hdc; PAINTSTRUCT ps; RECT rect; static TCHAR strText[1024] = ""; static PAGESETUPDLG psd; switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_CREATE: psd.lStructSize = sizeof (PAGESETUPDLG); psd.hwndOwner = hWnd; psd.Flags = PSD_INTHOUSANDTHSOFINCHES; return 0; case WM_PAINT: hdc = BeginPaint(hWnd , &ps); GetClientRect(hWnd , &rect); DrawText(hdc , strText , -1 , &rect , DT_LEFT); EndPaint(hWnd , &ps); return 0; case WM_RBUTTONUP: PageSetupDlg(&psd); wsprintf(strText , TEXT("width=%d\nheight=%d\nMargin=%d,%d,%d,%d") , psd.ptPaperSize.x , psd.ptPaperSize.y , psd.rtMargin.left , psd.rtMargin.top , psd.rtMargin.right , psd.rtMargin.bottom); InvalidateRect(hWnd , NULL , TRUE); return 0; } return DefWindowProc(hWnd , msg , wp , lp); } int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { HWND hwnd; MSG msg; WNDCLASS winc; winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName = NULL; winc.lpszClassName = TEXT("KITTY"); if (!RegisterClass(&winc)) return -1; hwnd = CreateWindow( TEXT("KITTY") , TITLE , WS_OVERLAPPEDWINDOW | WS_VISIBLE , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , NULL , NULL , hInstance , NULL ); if (hwnd == NULL) return -1; while(GetMessage(&msg , NULL , 0 , 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }