. 인쇄 옵션

호스트가 인쇄를 위해 제일 먼저 해야 할 일은 인쇄 옵션을 관리하는 일이다. 사용자는 인쇄시 사용할 글꼴, 정렬방식, 문법 분석 방법, 줄번호 출력 여부 등을 선택할 수 있는데 이런 옵션들은 화면출력에도 이미 있는 것들이다. 하지만 사용자들이 항상 화면에 보는 대로 인쇄하기를 원하는 것은 아니므로 인쇄용 옵션을 따로 관리한다. 화면에는 줄번호를 표시하지 않더라도 인쇄할 때는 줄번호를 원할 수도 있고 화면 글꼴과 인쇄 글꼴은 당연히 다를 수 있다. 만약 인쇄 옵션을 따로 두지 않는다면 사용자들은 인쇄에 적합한 옵션을 선택한 후 인쇄해야 하는 번거로움이 있을 것이다.

이 외에 용지의 여백, 바로 인쇄, 머리말, 꼬리말, 배경 텍스트 등의 인쇄 전용 옵션들도 필요하다. 옵션 구조체인 SOption에 다음 멤버들을 추가한다. 이 구조체는 Dangeun3에서 만들었으며 대부분의 옵션 변수들을 미리 포함해두었지만 인쇄용 옵션은 포함되어 있지 않다.

 

struct SOption

{

     ....

     LOGFONT prtFont;

     RECT prtMargin;

     BOOL prtbParse;

     BOOL prtnWrap;

     BOOL prtbLineNum;

     BOOL prtbSysHeader;

     BOOL prtbDirect;

     TCHAR prtHeader[256];

     TCHAR prtFooter[256];

     int prtnHeader;

     int prtnFooter;

     TCHAR prtBkText[64];

};

 

SOption::Init에서 이 옵션들을 다음과 같이 초기화한다. 가장 무난하게 인쇄할 수 있는 옵션들이다.

 

void SOption::Init()

{

     ....

     prtFont.lfHeight=-1;

     SetRect(&prtMargin,15,25,15,25);

     prtbParse=TRUE;

     prtnWrap=2;

     prtbLineNum=FALSE;

     prtbSysHeader=TRUE;

     prtbDirect=FALSE;

     lstrcpy(prtHeader,"");

     lstrcpy(prtFooter,"[파일][가운데][]/[전체쪽][오른쪽]당근으로 인쇄");

     prtnHeader=0;

     prtnFooter=4;

     lstrcpy(prtBkText,"");

 

각 옵션의 의미는 다음과 같다. 옵션의 의미와 Init에서 이 옵션들이 어떻게 초기화되었는지를 같이 보아라.

 

옵션

설명

prtFont

인쇄에 사용할 글꼴이다. lfHeight 0이면 시스템 글꼴, -1이면 현재 화면 글꼴로 인쇄한다. 물론 별도의 글꼴을 지정할 수도 있다.

prtMargin

인쇄 용지의 여백이며 mm단위이다. 머리말 꼬리말은 여백 바깥에 인쇄되며 여백 안쪽으로 본문이 인쇄된다.

prtbParse

구문 분석을 것인가 아닌가를 지정한다. FALSE이면 흑백으로 인쇄된다. 어떤 문법으로 해석할 것인가는 따로 지정할 없다.

prtnWrap

자동개행 방식이다.

prtbLineNum

왼쪽에 줄번호를 출력할 것인가를 지정한다.

prtbDirect

인쇄 대화상자를 보여주지 않고 기본 프린터로 바로 인쇄한다.

prtHeader

머리말 문자열이며 고유한 포맷을 가지고 있다.

prtFooter

꼬리말 문자열이다.

prtnHeader

머리말 경계선의 두께이며 1/10mm 단위이다.

prtnFooter

꼬리말 경계선의 두께이며 1/10mm 단위이다.

ptrBkText

문서 배경에 인쇄될 문자열이다. 문서 배경에 비스듬한 각도로 흐리게 출력된다.

 

다른 옵션들과 마찬가지로 한 번 선택한 값은 다음 번에도 계속 사용할 수 있어야 하므로 레지스트리에 저장해야 한다. SOption Save Load 함수에서 이 값들을 저장하고 읽어온다. 보다시피 옵션이 추가될 때마다 선언, 초기화, 저장, 복구를 일일이 해야 하기 때문에 다른 옵션들은 모두 Dangeun3에서 미리 예비동작을 취해놓은 것이다. 인쇄 옵션은 워낙 수가 많아 예비동작에서 제외되었다.

 

void SOption::Load(TCHAR *Key)

{

     FindDlgPos=SHRegReadInt(SHCU,szKey,"FindDlgPos",0);

     ....

     SHRegReadString(SHCU,szKey,"PrtFaceName","",prtFont.lfFaceName,32);

     prtFont.lfPitchAndFamily=SHRegReadInt(SHCU,szKey,"PrtPitchAndFamily",0);

     prtFont.lfCharSet=SHRegReadInt(SHCU,szKey,"PrtCharSet",0);

     prtFont.lfHeight=SHRegReadInt(SHCU,szKey,"PrtFontHeight",0);

     prtMargin.left=SHRegReadInt(SHCU,szKey,"PrtMarginLeft",0);

     prtMargin.top=SHRegReadInt(SHCU,szKey,"PrtMarginTop",0);

     prtMargin.right=SHRegReadInt(SHCU,szKey,"PrtMarginRight",0);

     prtMargin.bottom=SHRegReadInt(SHCU,szKey,"PrtMarginBottom",0);

     prtbParse=SHRegReadInt(SHCU,szKey,"prtbParse",0);

     prtnWrap=SHRegReadInt(SHCU,szKey,"prtnWrap",0);

     prtbLineNum=SHRegReadInt(SHCU,szKey,"prtbLineNum",0);

     prtbSysHeader=SHRegReadInt(SHCU,szKey,"prtbSysHeader",0);

     prtbDirect=SHRegReadInt(SHCU,szKey,"prtbDirect",0);

     prtbParse=SHRegReadInt(SHCU,szKey,"prtbParse",0);

     prtnHeader=SHRegReadInt(SHCU,szKey,"prtnHeader",0);

     prtnFooter=SHRegReadInt(SHCU,szKey,"prtnFooter",0);

     SHRegReadString(SHCU,szKey,"prtHeader","",prtHeader,256);

     SHRegReadString(SHCU,szKey,"prtFooter","",prtFooter,256);

     SHRegReadString(SHCU,szKey,"prtBkText","",prtBkText,64);

 

     lstrcpy(szKey,Key);

     lstrcat(szKey,"Style");

     ....

 

void SOption::Save(TCHAR *Key)

{

     SHRegWriteInt(SHCU,szKey,"FindDlgPos",FindDlgPos);

     ....

     SHRegWriteString(SHCU,szKey,"PrtFaceName",prtFont.lfFaceName);

     SHRegWriteInt(SHCU,szKey,"PrtPitchAndFamily",prtFont.lfPitchAndFamily);

     SHRegWriteInt(SHCU,szKey,"PrtCharSet",prtFont.lfCharSet);

     SHRegWriteInt(SHCU,szKey,"PrtFontHeight",prtFont.lfHeight);

     SHRegWriteInt(SHCU,szKey,"PrtMarginLeft",prtMargin.left);

     SHRegWriteInt(SHCU,szKey,"PrtMarginTop",prtMargin.top);

     SHRegWriteInt(SHCU,szKey,"PrtMarginRight",prtMargin.right);

     SHRegWriteInt(SHCU,szKey,"PrtMarginBottom",prtMargin.bottom);

     SHRegWriteInt(SHCU,szKey,"prtbParse",prtbParse);

     SHRegWriteInt(SHCU,szKey,"prtnWrap",prtnWrap);

     SHRegWriteInt(SHCU,szKey,"prtbLineNum",prtbLineNum);

     SHRegWriteInt(SHCU,szKey,"prtbSysHeader",prtbSysHeader);

     SHRegWriteInt(SHCU,szKey,"prtbDirect",prtbDirect);

     SHRegWriteInt(SHCU,szKey,"prtbParse",prtbParse);

     SHRegWriteInt(SHCU,szKey,"prtnHeader",prtnHeader);

     SHRegWriteInt(SHCU,szKey,"prtnFooter",prtnFooter);

     SHRegWriteString(SHCU,szKey,"prtHeader",prtHeader);

     SHRegWriteString(SHCU,szKey,"prtFooter",prtFooter);

     SHRegWriteString(SHCU,szKey,"prtBkText",prtBkText);

 

     lstrcpy(szKey,Key);

     lstrcat(szKey,"Style");

     ....

 

선언 및 초기화, 저장, 복구 코드가 모두 작성되었으므로 이 옵션들은 영구적인 생명을 가지게 되었다. 다음은 설정 대화상자에 이 옵션들을 보여주고 사용자가 선택할 수 있도록 한다. 설정 대화상자의 인쇄 페이지는 이미 만들어져 있으며 다음과 같다.

대화상자 프로시저는 껍데기만 만들어져 있는데 이제 그 내용을 채워 보자. UI 작업은 항상 코드량이 좀 많다.

 

BOOL CALLBACK PrintDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     HWND hCon;

     int i,idx;

     int t1,t2,t3,t4;

     TCHAR szFace[32];

     HMENU hMenu, hPopup;

     POINT pt;

     static int PopupID;

     TCHAR szTemp[256];

 

     switch(iMessage)

     {

     case WM_INITDIALOG:

          hCon=GetDlgItem(hDlg,IDC_PRTHEADERWIDTH);

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"없음");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"0.1 mm");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"0.2 mm");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"0.3 mm");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"0.5 mm");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"0.8 mm");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"1 mm");

 

          hCon=GetDlgItem(hDlg,IDC_PRTFOOTERWIDTH);

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"없음");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"0.1 mm");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"0.2 mm");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"0.3 mm");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"0.5 mm");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"0.8 mm");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"1 mm");

 

          hCon=GetDlgItem(hDlg,IDC_PRTBKTEXT);

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"비밀 문서");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"외부 유출 금지");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"초안 출력");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"최종 출력");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"결제용");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"장기 보관용");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"손대지 마!");

 

          hCon=GetDlgItem(hDlg,IDC_PRTFONTSIZE);

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"8");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"9");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"10");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"11");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"12");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"15");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"20");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"30");

 

          hCon=GetDlgItem(hDlg,IDC_PRTWRAP);

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"문서 모양 그대로 출력");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"한글 글자, 영문 글자");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"한글 글자, 영문 단어");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"한글 단어, 영문 단어");

 

          SendDlgItemMessage(hDlg,IDC_PRTFONTFACE,CB_ADDSTRING,0,(LPARAM)"==시스템==");

          for (i=0;i<FontNum;i++) {

              SendDlgItemMessage(hDlg,IDC_PRTFONTFACE,CB_ADDSTRING,0,(LPARAM)arFont[i].lfFaceName);

          }

 

          SendDlgItemMessage(hDlg,IDC_PRTLEFTSPIN,UDM_SETRANGE,0,MAKELPARAM(99,1));

          SendDlgItemMessage(hDlg,IDC_PRTTOPSPIN,UDM_SETRANGE,0,MAKELPARAM(99,1));

          SendDlgItemMessage(hDlg,IDC_PRTRIGHTSPIN,UDM_SETRANGE,0,MAKELPARAM(99,1));

          SendDlgItemMessage(hDlg,IDC_PRTBOTTOMSPIN,UDM_SETRANGE,0,MAKELPARAM(9,1));

 

          SendDlgItemMessage(hDlg,IDC_PRTHEADER,EM_LIMITTEXT,255,0);

          SendDlgItemMessage(hDlg,IDC_PRTFOOTER,EM_LIMITTEXT,255,0);

          SendDlgItemMessage(hDlg,IDC_PRTBKTEXT,CB_LIMITTEXT,63,0);

          return TRUE;

     case WM_COMMAND:

          switch (LOWORD(wParam)) {

          case IDC_PRTFONTSCREEN:

          case IDC_PRTFONTPRINT:

              AdjustDlgUI(5,hDlg);

              PropSheet_Changed(GetParent(hDlg),hDlg);

              return TRUE;

          case IDC_PRTFONTFACE:

              AdjustDlgUI(5,hDlg);

          case IDC_PRTFONTSIZE:

          case IDC_PRTWRAP:

          case IDC_PRTBKTEXT:

          case IDC_PRTHEADERWIDTH:

          case IDC_PRTFOOTERWIDTH:

              switch (HIWORD(wParam)) {

              case CBN_SELCHANGE:

              case CBN_EDITCHANGE:

                   PropSheet_Changed(GetParent(hDlg),hDlg);

                   break;

              }

              return TRUE;

          case IDC_PRTLINENUM:

          case IDC_PRTSYSHEADER:

          case IDC_PRTDIRECT:

          case IDC_PRTPARSE:

          case IDC_PRTLEFTSPIN:

          case IDC_PRTTOPSPIN:

          case IDC_PRTRIGHTSPIN:

          case IDC_PRTBOTTOMSPIN:

              PropSheet_Changed(GetParent(hDlg),hDlg);

              return TRUE;

          case IDC_PRTHEADER:

          case IDC_PRTFOOTER:

          case IDC_PRTLEFT:

          case IDC_PRTTOP:

          case IDC_PRTRIGHT:

          case IDC_PRTBOTTOM:

              switch (HIWORD(wParam)) {

              case EN_CHANGE:

                   if (bEditByCode==FALSE) {

                        PropSheet_Changed(GetParent(hDlg),hDlg);

                   }

                   break;

              }

              return TRUE;

          case IDC_PRTBTNHEADER:

          case IDC_PRTBTNFOOTER:

              if (LOWORD(wParam)==IDC_PRTBTNHEADER) {

                   PopupID=IDC_PRTHEADER;

              } else {

                   PopupID=IDC_PRTFOOTER;

              }

              hMenu=LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_POPUP));

              hPopup=GetSubMenu(hMenu, 3);

 

              GetCursorPos(&pt);

              TrackPopupMenu(hPopup, TPM_LEFTALIGN, pt.x, pt.y,

                   0, hDlg, NULL);

              DestroyMenu(hMenu);

              return TRUE;

          case IDM_PRINT_FILE:

              SendDlgItemMessage(hDlg,PopupID,EM_REPLACESEL,TRUE,(LPARAM)"[파일]");

              SetFocus(GetDlgItem(hDlg,PopupID));

              return TRUE;

          case IDM_PRINT_PATH:

              SendDlgItemMessage(hDlg,PopupID,EM_REPLACESEL,TRUE,(LPARAM)"[경로]");

              SetFocus(GetDlgItem(hDlg,PopupID));

              return TRUE;

          case IDM_PRINT_DATE:

              SendDlgItemMessage(hDlg,PopupID,EM_REPLACESEL,TRUE,(LPARAM)"[날짜]");

              SetFocus(GetDlgItem(hDlg,PopupID));

              return TRUE;

          case IDM_PRINT_TIME:

              SendDlgItemMessage(hDlg,PopupID,EM_REPLACESEL,TRUE,(LPARAM)"[시간]");

              SetFocus(GetDlgItem(hDlg,PopupID));

              return TRUE;

          case IDM_PRINT_PAGE:

              SendDlgItemMessage(hDlg,PopupID,EM_REPLACESEL,TRUE,(LPARAM)"[]");

              SetFocus(GetDlgItem(hDlg,PopupID));

              return TRUE;

          case IDM_PRINT_TOTALPAGE:

              SendDlgItemMessage(hDlg,PopupID,EM_REPLACESEL,TRUE,(LPARAM)"[전체쪽]");

              SetFocus(GetDlgItem(hDlg,PopupID));

              return TRUE;

          case IDM_PRINT_CENTER:

              GetDlgItemText(hDlg,PopupID,szTemp,255);

              if (strstr(szTemp,"[가운데]") != 0) {

                   MessageBox(hDlg, "가운데 출력 예약어는 한 번밖에 쓸 수 없습니다","알림",MB_OK);

              } else {

                   SendDlgItemMessage(hDlg,PopupID,EM_REPLACESEL,TRUE,(LPARAM)"[가운데]");

                   SetFocus(GetDlgItem(hDlg,PopupID));

              }

              return TRUE;

          case IDM_PRINT_RIGHT:

              GetDlgItemText(hDlg,PopupID,szTemp,255);

              if (strstr(szTemp,"[오른쪽]") != 0) {

                   MessageBox(hDlg, "오른쪽 출력 예약어는 한 번밖에 쓸 수 없습니다","알림",MB_OK);

              } else {

                   SendDlgItemMessage(hDlg,PopupID,EM_REPLACESEL,TRUE,(LPARAM)"[오른쪽]");

                   SetFocus(GetDlgItem(hDlg,PopupID));

              }

              return TRUE;

          }

          break;

     case WM_NOTIFY:

          LPNMHDR hdr;

          hdr=(LPNMHDR)lParam;

          switch (hdr->code) {

          case PSN_SETACTIVE:

              g_StartPage=5;

              bEditByCode=TRUE;

              SetDlgItemInt(hDlg,IDC_PRTLEFT,NewOption.prtMargin.left,FALSE);

              SetDlgItemInt(hDlg,IDC_PRTTOP,NewOption.prtMargin.top,FALSE);

              SetDlgItemInt(hDlg,IDC_PRTRIGHT,NewOption.prtMargin.right,FALSE);

              SetDlgItemInt(hDlg,IDC_PRTBOTTOM,NewOption.prtMargin.bottom,FALSE);

 

              if (NewOption.prtFont.lfHeight==-1) {

                   CheckRadioButton(hDlg,IDC_PRTFONTSCREEN,IDC_PRTFONTPRINT,IDC_PRTFONTSCREEN);

                   SetDlgItemInt(hDlg,IDC_PRTFONTSIZE,10,FALSE);

                   SendDlgItemMessage(hDlg,IDC_PRTFONTFACE,CB_SETCURSEL,0,0);

              } else {

                   CheckRadioButton(hDlg,IDC_PRTFONTSCREEN,IDC_PRTFONTPRINT,IDC_PRTFONTPRINT);

                   if (NewOption.prtFont.lfHeight == 0) {

                        idx=0;

                        SetDlgItemInt(hDlg,IDC_PRTFONTSIZE,10,FALSE);

                   } else {

                        idx=SendDlgItemMessage(hDlg,IDC_PRTFONTFACE,CB_FINDSTRING,-1,

                            (LPARAM)NewOption.prtFont.lfFaceName);

                        SetDlgItemInt(hDlg,IDC_PRTFONTSIZE,NewOption.prtFont.lfHeight,FALSE);

                   }

                   SendDlgItemMessage(hDlg,IDC_PRTFONTFACE,CB_SETCURSEL,idx,0);

              }

 

              SetDlgItemText(hDlg,IDC_PRTHEADER,NewOption.prtHeader);

              SetDlgItemText(hDlg,IDC_PRTFOOTER,NewOption.prtFooter);

              SetDlgItemText(hDlg,IDC_PRTBKTEXT,NewOption.prtBkText);

 

              SendDlgItemMessage(hDlg,IDC_PRTHEADERWIDTH,CB_SETCURSEL,NewOption.prtnHeader,0);

              SendDlgItemMessage(hDlg,IDC_PRTFOOTERWIDTH,CB_SETCURSEL,NewOption.prtnFooter,0);

              SendDlgItemMessage(hDlg,IDC_PRTWRAP,CB_SETCURSEL,NewOption.prtnWrap,0);

 

              CheckDlgButton(hDlg,IDC_PRTPARSE,NewOption.prtbParse ? BST_CHECKED:BST_UNCHECKED);

              CheckDlgButton(hDlg,IDC_PRTSYSHEADER,NewOption.prtbSysHeader ? BST_CHECKED:BST_UNCHECKED);

              CheckDlgButton(hDlg,IDC_PRTLINENUM,NewOption.prtbLineNum ? BST_CHECKED:BST_UNCHECKED);

              CheckDlgButton(hDlg,IDC_PRTDIRECT,NewOption.prtbDirect ? BST_CHECKED:BST_UNCHECKED);

 

              AdjustDlgUI(5,hDlg);

              bEditByCode=FALSE;

              return TRUE;

          case PSN_APPLY:

              ApplyNow();

              return TRUE;

          case PSN_KILLACTIVE:

              t1=GetDlgItemInt(hDlg,IDC_PRTLEFT,NULL,FALSE);

              t2=GetDlgItemInt(hDlg,IDC_PRTTOP,NULL,FALSE);

              t3=GetDlgItemInt(hDlg,IDC_PRTRIGHT,NULL,FALSE);

              t4=GetDlgItemInt(hDlg,IDC_PRTBOTTOM,NULL,FALSE);

              if (t1<0 || t1>100 || t2<0 || t2>100 || t3<0 || t3>100 || t4<0 || t4>100) {

                   MessageBox(hDlg,"여백은 0~100사이여야 합니다.","알림",MB_OK);

                   SetWindowLong(hDlg,DWL_MSGRESULT,TRUE);

                   return TRUE;

              }

 

              i=GetDlgItemInt(hDlg,IDC_PRTFONTSIZE,NULL,FALSE);

              if (i < 6 || i > 72) {

                   MessageBox(hDlg,"글꼴의 크기는 6~72사이의 값을 지정해야 합니다","알림",MB_OK);

                   SetWindowLong(hDlg,DWL_MSGRESULT,TRUE);

                   return TRUE;

              }

 

              NewOption.prtMargin.left=t1;

              NewOption.prtMargin.top=t2;

              NewOption.prtMargin.right=t3;

              NewOption.prtMargin.bottom=t4;

 

              if (IsDlgButtonChecked(hDlg,IDC_PRTFONTSCREEN)) {

                   NewOption.prtFont.lfHeight=-1;

              } else {

                   idx=SendDlgItemMessage(hDlg,IDC_PRTFONTFACE,CB_GETCURSEL,0,0);

                   if (idx==0) {

                        NewOption.prtFont.lfHeight=0;

                   } else {

                        SendDlgItemMessage(hDlg,IDC_PRTFONTFACE,CB_GETLBTEXT,idx,(LPARAM)szFace);

                        for (i=0;i<FontNum;i++) {

                            if (lstrcmp(szFace,arFont[i].lfFaceName) == 0)

                                 break;

                        }

                        NewOption.prtFont=arFont[i];

                        NewOption.prtFont.lfHeight=GetDlgItemInt(hDlg,IDC_PRTFONTSIZE,NULL,FALSE);

                   }

              }

 

              GetDlgItemText(hDlg,IDC_PRTHEADER,NewOption.prtHeader,256);

              GetDlgItemText(hDlg,IDC_PRTFOOTER,NewOption.prtFooter,256);

              NewOption.prtnHeader=SendDlgItemMessage(hDlg,IDC_PRTHEADERWIDTH,CB_GETCURSEL,0,0);

              NewOption.prtnFooter=SendDlgItemMessage(hDlg,IDC_PRTFOOTERWIDTH,CB_GETCURSEL,0,0);

 

              NewOption.prtbParse=IsDlgButtonChecked(hDlg,IDC_PRTPARSE) ? TRUE:FALSE;

              NewOption.prtbLineNum=IsDlgButtonChecked(hDlg,IDC_PRTLINENUM) ? TRUE:FALSE;

              NewOption.prtbSysHeader=IsDlgButtonChecked(hDlg,IDC_PRTSYSHEADER) ? TRUE:FALSE;

              NewOption.prtbDirect=IsDlgButtonChecked(hDlg,IDC_PRTDIRECT) ? TRUE:FALSE;

 

              GetDlgItemText(hDlg,IDC_PRTBKTEXT,NewOption.prtBkText,64);

              NewOption.prtnWrap=SendDlgItemMessage(hDlg,IDC_PRTWRAP,CB_GETCURSEL,0,0);

              return TRUE;

          }

          break;

     }

     return FALSE;

}

 

다른 설정 페이지에 비해 특별히 다르지 않으므로 분석할 필요는 없을 것이다. 인쇄 관련 옵션들은 변경 후 바로 적용되는 것이 아니므로 ApplyNow SetSetting에서는 아무것도 할 필요가 없다. 이 옵션들은 인쇄하기 전에는 사용되지 않는다.