OptionsDialog.cpp
上传用户:hmc_gdtv
上传日期:2013-08-04
资源大小:798k
文件大小:8k
源码类别:

Windows Mobile

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 2001,2002,2003 Mike Matsnev.  All Rights Reserved.
  3.  *
  4.  * Redistribution and use in source and binary forms, with or without
  5.  * modification, are permitted provided that the following conditions
  6.  * are met:
  7.  *
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice immediately at the beginning of the file, without modification,
  10.  *    this list of conditions, and the following disclaimer.
  11.  * 2. Redistributions in binary form must reproduce the above copyright
  12.  *    notice, this list of conditions and the following disclaimer in the
  13.  *    documentation and/or other materials provided with the distribution.
  14.  * 3. Absolutely no warranty of function or purpose is made by the author
  15.  *    Mike Matsnev.
  16.  *
  17.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  18.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  19.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  20.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  21.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  22.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  26.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27.  * 
  28.  * $Id: OptionsDialog.cpp,v 1.16.2.4 2004/10/21 15:35:24 mike Exp $
  29.  * 
  30.  */
  31. #include <afxext.h>
  32. #include "config.h"
  33. #include "resource.h"
  34. #include "OptionsDialog.h"
  35. #include "Colors.h"
  36. #include "ColorSelector.h"
  37. #ifdef _DEBUG
  38. #define new DEBUG_NEW
  39. #undef THIS_FILE
  40. static char THIS_FILE[] = __FILE__;
  41. #endif
  42. /////////////////////////////////////////////////////////////////////////////
  43. // COptionsDialog dialog
  44. COptionsDialog::COptionsDialog(CWnd* pParent /*=NULL*/)
  45. : CDialog(COptionsDialog::IDD, pParent)
  46. {
  47.   //{{AFX_DATA_INIT(COptionsDialog)
  48.   m_bold = FALSE;
  49.   m_cleartype = 0;
  50.   m_face = _T("");
  51.   m_size = 0;
  52.   m_justify = FALSE;
  53.   m_margins = 0;
  54.   m_hyphenate = FALSE;
  55.   m_angle = 0;
  56.   m_columns = 0;
  57.   //}}AFX_DATA_INIT
  58. }
  59. void COptionsDialog::DoDataExchange(CDataExchange* pDX)
  60. {
  61.   CDialog::DoDataExchange(pDX);
  62.   //{{AFX_DATA_MAP(COptionsDialog)
  63.   DDX_Check(pDX, IDC_BOLD, m_bold);
  64.   DDX_CBString(pDX, IDC_FACE, m_face);
  65.   DDX_Text(pDX, IDC_FONTSIZE, m_size);
  66.   DDX_Check(pDX, IDC_JUSTIFY, m_justify);
  67.   DDX_Text(pDX, IDC_MARGINS, m_margins);
  68.   DDX_Check(pDX, IDC_SHYP, m_hyphenate);
  69.   DDX_CBIndex(pDX, IDC_ROTATE, m_angle);
  70.   DDX_CBIndex(pDX, IDC_COLUMNS, m_columns);
  71.   //}}AFX_DATA_MAP
  72. #ifdef _WIN32_WCE
  73.   DDX_Check(pDX, IDC_CLEARTYPE, m_cleartype);
  74. #else
  75.   DDX_CBIndex(pDX,IDC_CLEARTYPE,m_cleartype);
  76. #endif
  77. }
  78. BEGIN_MESSAGE_MAP(COptionsDialog, CDialog)
  79. //{{AFX_MSG_MAP(COptionsDialog)
  80. ON_WM_DRAWITEM()
  81. //}}AFX_MSG_MAP
  82. END_MESSAGE_MAP()
  83. /////////////////////////////////////////////////////////////////////////////
  84. // COptionsDialog message handlers
  85. void COptionsDialog::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT ds)
  86. {
  87.   if (nIDCtl==IDC_TEXTSAMPLE) {
  88.     LOGFONT   lf;
  89.     UpdateData();
  90.     memset(&lf,0,sizeof(lf));
  91.     lf.lfHeight=-m_size;
  92.     lf.lfWeight=m_bold ? FW_BOLD : FW_NORMAL;
  93.     lf.lfCharSet=ANSI_CHARSET;
  94.     lf.lfOutPrecision=OUT_DEFAULT_PRECIS;
  95.     lf.lfClipPrecision=CLIP_DEFAULT_PRECIS;
  96. #ifdef _WIN32_WCE
  97.     lf.lfQuality=m_cleartype ? CLEARTYPE_QUALITY : DEFAULT_QUALITY;
  98. #else
  99.     if (m_cleartype==1)
  100.       lf.lfQuality=CLEARTYPE_QUALITY;
  101.     else if (m_cleartype==2)
  102.       lf.lfQuality=ANTIALIASED_QUALITY;
  103.     else
  104.       lf.lfQuality=NONANTIALIASED_QUALITY;
  105. #endif
  106.     lf.lfPitchAndFamily=DEFAULT_PITCH|FF_DONTCARE;
  107.     _tcsncpy(lf.lfFaceName,m_face,LF_FACESIZE-1);
  108.     CFont   font;
  109.     font.CreateFontIndirect(&lf);
  110.     HGDIOBJ prev=SelectObject(ds->hDC,font);
  111.     SetBkColor(ds->hDC,C_BG);
  112.     SetTextColor(ds->hDC,C_NORM);
  113.     SIZE sz1,sz2;
  114.     TCHAR *s1=_T("Sample");
  115.     TCHAR *s2=_T("Text");
  116.     int len1=_tcslen(s1);
  117.     int len2=_tcslen(s2);
  118.     GetTextExtentPoint(ds->hDC,s1,len1,&sz1);
  119.     GetTextExtentPoint(ds->hDC,s2,len2,&sz2);
  120.     int ox=(ds->rcItem.right-ds->rcItem.left-sz1.cx-sz2.cx-5)/2;
  121.     int oy=(ds->rcItem.bottom-ds->rcItem.top-max(sz1.cy,sz2.cy))/2;
  122.     ExtTextOut(ds->hDC,ds->rcItem.left+ox,ds->rcItem.top+oy,
  123.       ETO_CLIPPED|ETO_OPAQUE,&ds->rcItem,s1,len1,NULL);
  124.     SetBkColor(ds->hDC,C_HBG);
  125.     RECT r;
  126.     r.top=ds->rcItem.top+oy;
  127.     r.left=ds->rcItem.left+ox+sz1.cx+5;
  128.     r.bottom=r.top+sz2.cy;
  129.     r.right=r.left+sz2.cx;
  130.     ExtTextOut(ds->hDC,r.left,r.top,ETO_CLIPPED|ETO_OPAQUE,&r,s2,len2,NULL);
  131.     r.bottom=ds->rcItem.bottom;
  132.     r.left=ds->rcItem.left;
  133.     r.top=r.bottom-2;
  134.     r.right=ds->rcItem.right;
  135.     SetBkColor(ds->hDC,C_GAUGE);
  136.     ExtTextOut(ds->hDC,r.left,r.top,ETO_CLIPPED|ETO_OPAQUE,&r,_T(""),0,NULL);
  137.     SelectObject(ds->hDC,prev);
  138.   } else
  139.     CDialog::OnDrawItem(nIDCtl, ds);
  140. }
  141. BOOL COptionsDialog::OnCommand(WPARAM wParam, LPARAM lParam)
  142. {
  143.   bool       invalidate=false;
  144.   switch (LOWORD(wParam)) {
  145.   case IDC_FACE:
  146. #ifndef _WIN32_WCE
  147.   case IDC_CLEARTYPE:
  148. #endif
  149.     if (HIWORD(wParam)==CBN_SELENDOK)
  150.       invalidate=true;
  151.     break;
  152.   case IDC_FONTSIZE:
  153.     if (HIWORD(wParam)==EN_CHANGE)
  154.       invalidate=true;
  155.     break;
  156. #ifdef _WIN32_WCE
  157.   case IDC_CLEARTYPE:
  158. #endif
  159.   case IDC_BOLD:
  160.     if (HIWORD(wParam)==BN_CLICKED)
  161.       invalidate=true;
  162.     break;
  163.   }
  164.   if (invalidate) {
  165.     CWnd  *tf=GetDlgItem(IDC_TEXTSAMPLE);
  166.     if (tf)
  167.       tf->Invalidate(FALSE);
  168.   }
  169.   return CDialog::OnCommand(wParam, lParam);
  170. }
  171. static int __stdcall enumfonts(const ENUMLOGFONT *lf,const TEXTMETRIC *tm,
  172.      int type,LPARAM lp)
  173. {
  174.   HWND cb=(HWND)lp;
  175.   if (lf->elfLogFont.lfCharSet==ANSI_CHARSET) {
  176.     const TCHAR *fn=lf->elfLogFont.lfFaceName;
  177.     LRESULT ret=::SendMessage(cb,CB_ADDSTRING,0,(LPARAM)fn);
  178.     ASSERT(ret!=CB_ERR && ret!=CB_ERRSPACE);
  179.   }
  180.   return TRUE;
  181. }
  182. BOOL COptionsDialog::OnInitDialog()
  183. {
  184. #if POCKETPC
  185.   ((CCeCommandBar *)m_pWndEmptyCB)->LoadToolBar(cIDR_DIALOG);
  186. #endif
  187.   // populate font families
  188.   {
  189.     CClientDC dc(this);
  190.     HWND hCB;
  191.     GetDlgItem(IDC_FACE,&hCB);
  192.     EnumFontFamilies(dc.m_hAttribDC,NULL,(FONTENUMPROC)enumfonts,(LPARAM)hCB);
  193.   }
  194.   // add angles and columns
  195.   for (int angle=0;angle<360;angle+=90) {
  196.     CString tmp;
  197.     tmp.Format(_T("%dxb0"),angle);
  198.     SendDlgItemMessage(IDC_ROTATE,CB_ADDSTRING,0,(LPARAM)(LPCTSTR)tmp);
  199.   }
  200.   for (int column=1;column<5;++column) {
  201.     CString tmp;
  202.     tmp.Format(_T("%d"),column);
  203.     SendDlgItemMessage(IDC_COLUMNS,CB_ADDSTRING,0,(LPARAM)(LPCTSTR)tmp);
  204.   }
  205. #ifndef _WIN32_WCE
  206.   SendDlgItemMessage(IDC_CLEARTYPE,CB_ADDSTRING,0,(LPARAM)_T("None"));
  207.   SendDlgItemMessage(IDC_CLEARTYPE,CB_ADDSTRING,0,(LPARAM)_T("Cleartype"));
  208.   SendDlgItemMessage(IDC_CLEARTYPE,CB_ADDSTRING,0,(LPARAM)_T("Standard"));
  209. #endif
  210.   // resize the input window
  211.   RECT   rface,rsize,rspin;
  212.   GetDlgItem(IDC_FACE)->GetWindowRect(&rface);
  213.   GetDlgItem(IDC_FONTSIZE)->GetWindowRect(&rsize);
  214.   GetDlgItem(IDC_SIZESPIN)->GetWindowRect(&rspin);
  215.   ScreenToClient(&rface);
  216.   ScreenToClient(&rsize);
  217.   ScreenToClient(&rspin);
  218.   rsize.bottom=rspin.bottom=rface.bottom;
  219.   GetDlgItem(IDC_FONTSIZE)->MoveWindow(&rsize);
  220.   GetDlgItem(IDC_SIZESPIN)->MoveWindow(&rspin);
  221.   CDialog::OnInitDialog();
  222.   SendDlgItemMessage(IDC_SIZESPIN,UDM_SETRANGE,0,MAKELONG(50,1));
  223.   SendDlgItemMessage(IDC_MARGINSPIN,UDM_SETRANGE,0,MAKELONG(50,0));
  224.   return TRUE;
  225. }