📄 cdlgprintsetting.cpp
字号:
// $Id: CDlgPrintSetting.cpp,v 1.17 2004/10/03 07:29:23 genta Exp $
/*! @file
@brief 印刷設定ダイアログ
@author Norio Nakatani
$Revision: 1.17 $
*/
/*
Copyright (C) 1998-2001, Norio Nakatani
Copyright (C) 2002, MIK
This source code is designed for sakura editor.
Please contact the copyright holder to use this code for other purpose.
*/
#include <stdio.h>
#include "CDlgPrintSetting.h"
#include "CDlgInput1.h"
#include "funccode.h" // Stonee, 2001/03/12
#include "etc_uty.h" // Stonee, 2001/03/12
#include "sakura_rc.h" // 2002/2/10 aroka
#include "debug.h" // 2002/2/10 aroka
// 印刷設定 CDlgPrintSetting.cpp //@@@ 2002.01.07 add start MIK
#include "sakura.hh"
const DWORD p_helpids[] = { //12500
IDC_BUTTON_EDITSETTINGNAME, HIDC_PS_BUTTON_EDITSETTINGNAME, //設定名変更
IDOK, HIDOK_PS, //OK
IDCANCEL, HIDCANCEL_PS, //キャンセル
IDC_BUTTON_HELP, HIDC_PS_BUTTON_HELP, //ヘルプ
IDC_CHECK_WORDWRAP, HIDC_PS_CHECK_WORDWRAP, //ワードラップ
IDC_CHECK_LINENUMBER, HIDC_PS_CHECK_LINENUMBER, //行番号
IDC_COMBO_FONT_HAN, HIDC_PS_COMBO_FONT_HAN, //半角フォント
IDC_COMBO_FONT_ZEN, HIDC_PS_COMBO_FONT_ZEN, //全角フォント
IDC_COMBO_SETTINGNAME, HIDC_PS_COMBO_SETTINGNAME, //ページ設定
IDC_COMBO_PAPER, HIDC_PS_COMBO_PAPER, //用紙サイズ
IDC_COMBO_PAPERORIENT, HIDC_PS_COMBO_PAPERORIENT, //用紙向き
IDC_EDIT_FONTWIDTH, HIDC_PS_EDIT_FONTWIDTH, //フォント幅
IDC_EDIT_LINESPACE, HIDC_PS_EDIT_LINESPACE, //行送り
IDC_EDIT_DANSUU, HIDC_PS_EDIT_DANSUU, //段数
IDC_EDIT_DANSPACE, HIDC_PS_EDIT_DANSPACE, //段の隙間
IDC_EDIT_MARGINTY, HIDC_PS_EDIT_MARGINTY, //余白上
IDC_EDIT_MARGINBY, HIDC_PS_EDIT_MARGINBY, //余白下
IDC_EDIT_MARGINLX, HIDC_PS_EDIT_MARGINLX, //余白左
IDC_EDIT_MARGINRX, HIDC_PS_EDIT_MARGINRX, //余白右
IDC_SPIN_FONTWIDTH, HIDC_PS_EDIT_FONTWIDTH, //12570,
IDC_SPIN_LINESPACE, HIDC_PS_EDIT_LINESPACE, //12571,
IDC_SPIN_DANSUU, HIDC_PS_EDIT_DANSUU, //12572,
IDC_SPIN_DANSPACE, HIDC_PS_EDIT_DANSPACE, //12573,
IDC_SPIN_MARGINTY, HIDC_PS_EDIT_MARGINTY, //12574,
IDC_SPIN_MARGINBY, HIDC_PS_EDIT_MARGINBY, //12575,
IDC_SPIN_MARGINLX, HIDC_PS_EDIT_MARGINLX, //12576,
IDC_SPIN_MARGINRX, HIDC_PS_EDIT_MARGINRX, //12577,
IDC_CHECK_PS_KINSOKUHEAD, HIDC_PS_CHECK_KINSOKUHEAD, //行頭禁則 //@@@ 2002.04.09 MIK
IDC_CHECK_PS_KINSOKUTAIL, HIDC_PS_CHECK_KINSOKUTAIL, //行末禁則 //@@@ 2002.04.09 MIK
IDC_CHECK_PS_KINSOKURET, HIDC_PS_CHECK_KINSOKURET, //改行文字をぶら下げる //@@@ 2002.04.14 MIK
IDC_CHECK_PS_KINSOKUKUTO, HIDC_PS_CHECK_KINSOKUKUTO, //句読点をぶら下げる //@@@ 2002.04.17 MIK
// IDC_STATIC, -1,
0, 0
}; //@@@ 2002.01.07 add end MIK
#define IDT_PRINTSETTING 1467
int CALLBACK SetData_EnumFontFamProc(
ENUMLOGFONT* pelf, // pointer to logical-font data
NEWTEXTMETRIC* pntm, // pointer to physical-font data
int nFontType, // type of font
LPARAM lParam // address of application-defined data
)
{
CDlgPrintSetting* pCDlgPrintSetting;
HWND hwndComboFontHan;
HWND hwndComboFontZen;
pCDlgPrintSetting = (CDlgPrintSetting*)lParam;
hwndComboFontHan = ::GetDlgItem( pCDlgPrintSetting->m_hWnd, IDC_COMBO_FONT_HAN );
hwndComboFontZen = ::GetDlgItem( pCDlgPrintSetting->m_hWnd, IDC_COMBO_FONT_ZEN );
/* LOGFONT */
if( FIXED_PITCH & pelf->elfLogFont.lfPitchAndFamily ){
// MYTRACE( pelf->elfLogFont.lfFaceName, "%s\n\n", pelf->elfLogFont.lfFaceName );
::SendMessage( hwndComboFontHan, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)pelf->elfLogFont.lfFaceName );
::SendMessage( hwndComboFontZen, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)pelf->elfLogFont.lfFaceName );
}
return 1;
}
/* モーダルダイアログの表示 */
int CDlgPrintSetting::DoModal(
HINSTANCE hInstance,
HWND hwndParent,
int* pnCurrentPrintSetting,
PRINTSETTING* pPrintSettingArr
)
{
int nRet;
int i;
m_nCurrentPrintSetting = *pnCurrentPrintSetting;
for( i = 0; i < MAX_PRINTSETTINGARR; ++i ){
m_PrintSettingArr[i] = pPrintSettingArr[i];
}
nRet = (int)CDialog::DoModal( hInstance, hwndParent, IDD_PRINTSETTING, NULL );
// nRet = ::DialogBoxParam(
// m_hInstance,
// MAKEINTRESOURCE( IDD_PRINTSETTING ),
// m_hwndParent,
// (DLGPROC)PrintSettingDialogProc,
// (LPARAM)this
// );
if( TRUE == nRet ){
*pnCurrentPrintSetting = m_nCurrentPrintSetting;
for( i = 0; i < MAX_PRINTSETTINGARR; ++i ){
pPrintSettingArr[i] = m_PrintSettingArr[i];
}
}
return nRet;
}
BOOL CDlgPrintSetting::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam )
{
m_hWnd = hwndDlg;
// hwndComboSettingName = ::GetDlgItem( m_hWnd, IDC_COMBO_SETTINGNAME );
// /* ユーザーがエディット コントロールに入力できるテキストの長さを制限する */
// ::SendMessage( ::GetDlgItem( m_hWnd, IDC_EDIT_LINENUM ), EM_LIMITTEXT, (WPARAM)9, 0 );
/* コンボボックスのユーザー インターフェイスを拡張インターフェースにする */
::SendMessage( ::GetDlgItem( m_hWnd, IDC_COMBO_SETTINGNAME ), CB_SETEXTENDEDUI, (WPARAM) (BOOL) TRUE, 0 );
::SendMessage( ::GetDlgItem( m_hWnd, IDC_COMBO_FONT_HAN ), CB_SETEXTENDEDUI, (WPARAM) (BOOL) TRUE, 0 );
::SendMessage( ::GetDlgItem( m_hWnd, IDC_COMBO_FONT_ZEN ), CB_SETEXTENDEDUI, (WPARAM) (BOOL) TRUE, 0 );
::SendMessage( ::GetDlgItem( m_hWnd, IDC_COMBO_PAPER ), CB_SETEXTENDEDUI, (WPARAM) (BOOL) TRUE, 0 );
::SendMessage( ::GetDlgItem( m_hWnd, IDC_COMBO_PAPERORIENT ), CB_SETEXTENDEDUI, (WPARAM) (BOOL) TRUE, 0 );
::SetTimer( m_hWnd, IDT_PRINTSETTING, 500, NULL );
/* 基底クラスメンバ */
return CDialog::OnInitDialog( m_hWnd, wParam, lParam );
}
BOOL CDlgPrintSetting::OnDestroy( void )
{
::KillTimer( m_hWnd, IDT_PRINTSETTING );
/* 基底クラスメンバ */
return CDialog::OnDestroy();
}
BOOL CDlgPrintSetting::OnNotify( WPARAM wParam, LPARAM lParam )
{
// WORD wNotifyCode;
// WORD wID;
// HWND hwndCtl;
// int nRet;
// int nIndex;
// char* pszWork;
// int nWorkLine;
// HWND hwndComboSettingName;
CDlgInput1 cDlgInput1;
// HWND hwndCtl;
NMHDR* pNMHDR;
NM_UPDOWN* pMNUD;
int idCtrl;
BOOL bSpinDown;
// char szWork[256];
idCtrl = (int)wParam;
pNMHDR = (NMHDR*)lParam;
pMNUD = (NM_UPDOWN*)lParam;
if( pMNUD->iDelta < 0 ){
bSpinDown = FALSE;
}else{
bSpinDown = TRUE;
}
switch( idCtrl ){
case IDC_SPIN_FONTWIDTH:
case IDC_SPIN_LINESPACE:
case IDC_SPIN_DANSUU:
case IDC_SPIN_DANSPACE:
case IDC_SPIN_MARGINTY:
case IDC_SPIN_MARGINBY:
case IDC_SPIN_MARGINLX:
case IDC_SPIN_MARGINRX:
/* スピンコントロールの処理 */
OnSpin( idCtrl, bSpinDown );
break;
}
return TRUE;
}
BOOL CDlgPrintSetting::OnCbnSelChange( HWND hwndCtl, int wID )
{
if( ::GetDlgItem( m_hWnd, IDC_COMBO_SETTINGNAME ) == hwndCtl ){
/* 設定のタイプが変わった */
OnChangeSettingType( TRUE );
return TRUE;
}
return FALSE;
}
BOOL CDlgPrintSetting::OnBnClicked( int wID )
{
char szWork[256];
CDlgInput1 cDlgInput1;
HWND hwndComboSettingName;
switch( wID ){
case IDC_BUTTON_HELP:
/* 「印刷ページ設定」のヘルプ */
//Stonee, 2001/03/12 第四引数を、機能番号からヘルプトピック番号を調べるようにした
::WinHelp( m_hWnd, m_szHelpFile, HELP_CONTEXT, ::FuncID_To_HelpContextID(F_PRINT_PAGESETUP) );
return TRUE;
case IDC_BUTTON_EDITSETTINGNAME:
strcpy( szWork, m_PrintSettingArr[m_nCurrentPrintSetting].m_szPrintSettingName );
if( FALSE == cDlgInput1.DoModal( m_hInstance, m_hWnd, "設定名の変更", "設定の名称を入力してください。", sizeof( m_PrintSettingArr[m_nCurrentPrintSetting].m_szPrintSettingName ) - 1, szWork ) ){
return TRUE;
}
if( 0 < lstrlen( szWork ) ){
strcpy( m_PrintSettingArr[m_nCurrentPrintSetting].m_szPrintSettingName, szWork );
/* 印刷設定名一覧 */
hwndComboSettingName = ::GetDlgItem( m_hWnd, IDC_COMBO_SETTINGNAME );
::SendMessage( hwndComboSettingName, CB_RESETCONTENT, 0, 0 );
int nSelectIdx;
int i;
int nItemIdx;
nSelectIdx = 0;
for( i = 0; i < MAX_PRINTSETTINGARR; ++i ){
nItemIdx = ::SendMessage(
hwndComboSettingName, CB_ADDSTRING, 0,
(LPARAM)(LPCTSTR)m_PrintSettingArr[i].m_szPrintSettingName
);
::SendMessage( hwndComboSettingName, CB_SETITEMDATA, nItemIdx, (LPARAM)i );
if( i == m_nCurrentPrintSetting ){
nSelectIdx = nItemIdx;
}
}
::SendMessage( hwndComboSettingName, CB_SETCURSEL, nSelectIdx, 0 );
}
return TRUE;
case IDOK: /* 下検索 */
/* ダイアログデータの取得 */
::EndDialog( m_hWnd, GetData() );
return TRUE;
case IDCANCEL:
::EndDialog( m_hWnd, FALSE );
return TRUE;
}
/* 基底クラスメンバ */
return CDialog::OnBnClicked( wID );
}
/* ダイアログデータの設定 */
void CDlgPrintSetting::SetData( void )
{
HDC hdc;
HWND hwndComboFont;
HWND hwndComboPaper;
HWND hwndComboPaperOrient;
HWND hwndComboSettingName;
const char* pszPaperNameArr[] = {
"A4 (210 x 297 mm)",
"A3 (297 x 420 mm)",
"A4 small(210 x 297 mm)",
"A5 (148 x 210 mm)",
"B4 (250 x 354 mm)",
"B5 (182 x 257 mm)",
"Quarto(215 x 275 mm)",
"DL Envelope(110 x 220 mm)",
"C5 Envelope(162 x 229 mm)",
"C3 Envelope(324 x 458 mm)",
"C4 Envelope(229 x 324 mm)",
"C6 Envelope(114 x 162 mm)",
"C65 Envelope(114 x 229 mm)",
"B4 Envelope(250 x 353 mm)",
"B5 Envelope(176 x 250 mm)",
"B6 Envelope(176 x 125 mm)",
"Italy Envelope(110 x 230 mm)",
"Letter; 8 1/2x11 inch",
"Legal; 8 1/2x14 inch",
"C sheet; 17x22 inch",
"D sheet; 22x34 inch",
"E sheet; 34x44 inch",
"Letter Small; 8 1/2x11 inch",
"Tabloid; 11x17 inch",
"Ledger; 17x11 inch",
"Statement; 5 1/2x8 1/2 inch",
"Executive; 7 1/4x10 1/2 inch",
"Folio; 8 1/2x13 inch",
"10x14 inch sheet",
"11x17 inch sheet",
"Note; 8 1/2x11 inch",
"#9 Envelope; 3 7/8x8 7/8 inch",
"#10 Envelope; 4 1/8x9 1/2 inch",
"#11 Envelope; 4 1/2x10 3/8 inch",
"#12 Envelope; 4 3/4x11 inch",
"#14 Envelope; 5x11 1/2 inch",
"Monarch Envelope; 3 7/8x7 1/2 inch",
"6 3/4 Envelope; 3 5/8x6 1/2 inch",
"US Std Fanfold; 14 7/8x11 inch",
"German Std Fanfold; 8 1/2x12 inch",
"German Legal Fanfold; 8 1/2x13 inch"
};
int nPaperNameArrNum = sizeof( pszPaperNameArr ) / sizeof( pszPaperNameArr[0] );
int nPaperIdArr[] = {
DMPAPER_A4 ,
DMPAPER_A3 ,
DMPAPER_A4SMALL ,
DMPAPER_A5 ,
DMPAPER_B4 ,
DMPAPER_B5 ,
DMPAPER_QUARTO ,
DMPAPER_ENV_DL ,
DMPAPER_ENV_C5 ,
DMPAPER_ENV_C3 ,
DMPAPER_ENV_C4 ,
DMPAPER_ENV_C6 ,
DMPAPER_ENV_C65 ,
DMPAPER_ENV_B4 ,
DMPAPER_ENV_B5 ,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -