⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 optionsdialog.cpp

📁 俄罗斯人开发的大名鼎鼎的Pocket Pc 阅读器haaliread的源代码,visual c
💻 CPP
字号:
/*
 * Copyright (c) 2001,2002,2003 Mike Matsnev.  All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice immediately at the beginning of the file, without modification,
 *    this list of conditions, and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Absolutely no warranty of function or purpose is made by the author
 *    Mike Matsnev.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 * $Id: OptionsDialog.cpp,v 1.16.2.4 2004/10/21 15:35:24 mike Exp $
 * 
 */

#include <afxext.h>

#include "config.h"
#include "resource.h"
#include "OptionsDialog.h"
#include "Colors.h"
#include "ColorSelector.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// COptionsDialog dialog


COptionsDialog::COptionsDialog(CWnd* pParent /*=NULL*/)
: CDialog(COptionsDialog::IDD, pParent)
{
  //{{AFX_DATA_INIT(COptionsDialog)
  m_bold = FALSE;
  m_cleartype = 0;
  m_face = _T("");
  m_size = 0;
  m_justify = FALSE;
  m_margins = 0;
  m_hyphenate = FALSE;
  m_angle = 0;
  m_columns = 0;
  //}}AFX_DATA_INIT
}


void COptionsDialog::DoDataExchange(CDataExchange* pDX)
{
  CDialog::DoDataExchange(pDX);
  //{{AFX_DATA_MAP(COptionsDialog)
  DDX_Check(pDX, IDC_BOLD, m_bold);
  DDX_CBString(pDX, IDC_FACE, m_face);
  DDX_Text(pDX, IDC_FONTSIZE, m_size);
  DDX_Check(pDX, IDC_JUSTIFY, m_justify);
  DDX_Text(pDX, IDC_MARGINS, m_margins);
  DDX_Check(pDX, IDC_SHYP, m_hyphenate);
  DDX_CBIndex(pDX, IDC_ROTATE, m_angle);
  DDX_CBIndex(pDX, IDC_COLUMNS, m_columns);
  //}}AFX_DATA_MAP
#ifdef _WIN32_WCE
  DDX_Check(pDX, IDC_CLEARTYPE, m_cleartype);
#else
  DDX_CBIndex(pDX,IDC_CLEARTYPE,m_cleartype);
#endif
}


BEGIN_MESSAGE_MAP(COptionsDialog, CDialog)
//{{AFX_MSG_MAP(COptionsDialog)
ON_WM_DRAWITEM()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// COptionsDialog message handlers

void COptionsDialog::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT ds)
{
  if (nIDCtl==IDC_TEXTSAMPLE) {
    LOGFONT   lf;

    UpdateData();
    memset(&lf,0,sizeof(lf));
    lf.lfHeight=-m_size;
    lf.lfWeight=m_bold ? FW_BOLD : FW_NORMAL;
    lf.lfCharSet=ANSI_CHARSET;
    lf.lfOutPrecision=OUT_DEFAULT_PRECIS;
    lf.lfClipPrecision=CLIP_DEFAULT_PRECIS;
#ifdef _WIN32_WCE
    lf.lfQuality=m_cleartype ? CLEARTYPE_QUALITY : DEFAULT_QUALITY;
#else
    if (m_cleartype==1)
      lf.lfQuality=CLEARTYPE_QUALITY;
    else if (m_cleartype==2)
      lf.lfQuality=ANTIALIASED_QUALITY;
    else
      lf.lfQuality=NONANTIALIASED_QUALITY;
#endif
    lf.lfPitchAndFamily=DEFAULT_PITCH|FF_DONTCARE;
    _tcsncpy(lf.lfFaceName,m_face,LF_FACESIZE-1);
    CFont   font;
    font.CreateFontIndirect(&lf);
    HGDIOBJ prev=SelectObject(ds->hDC,font);
    SetBkColor(ds->hDC,C_BG);
    SetTextColor(ds->hDC,C_NORM);
    SIZE sz1,sz2;
    TCHAR *s1=_T("Sample");
    TCHAR *s2=_T("Text");
    int len1=_tcslen(s1);
    int len2=_tcslen(s2);
    GetTextExtentPoint(ds->hDC,s1,len1,&sz1);
    GetTextExtentPoint(ds->hDC,s2,len2,&sz2);
    int ox=(ds->rcItem.right-ds->rcItem.left-sz1.cx-sz2.cx-5)/2;
    int oy=(ds->rcItem.bottom-ds->rcItem.top-max(sz1.cy,sz2.cy))/2;
    ExtTextOut(ds->hDC,ds->rcItem.left+ox,ds->rcItem.top+oy,
      ETO_CLIPPED|ETO_OPAQUE,&ds->rcItem,s1,len1,NULL);
    SetBkColor(ds->hDC,C_HBG);
    RECT r;
    r.top=ds->rcItem.top+oy;
    r.left=ds->rcItem.left+ox+sz1.cx+5;
    r.bottom=r.top+sz2.cy;
    r.right=r.left+sz2.cx;
    ExtTextOut(ds->hDC,r.left,r.top,ETO_CLIPPED|ETO_OPAQUE,&r,s2,len2,NULL);
    r.bottom=ds->rcItem.bottom;
    r.left=ds->rcItem.left;
    r.top=r.bottom-2;
    r.right=ds->rcItem.right;
    SetBkColor(ds->hDC,C_GAUGE);
    ExtTextOut(ds->hDC,r.left,r.top,ETO_CLIPPED|ETO_OPAQUE,&r,_T(""),0,NULL);
    SelectObject(ds->hDC,prev);
  } else
    CDialog::OnDrawItem(nIDCtl, ds);
}

BOOL COptionsDialog::OnCommand(WPARAM wParam, LPARAM lParam)
{
  bool	      invalidate=false;
  switch (LOWORD(wParam)) {
  case IDC_FACE:
#ifndef _WIN32_WCE
  case IDC_CLEARTYPE:
#endif
    if (HIWORD(wParam)==CBN_SELENDOK)
      invalidate=true;
    break;
  case IDC_FONTSIZE:
    if (HIWORD(wParam)==EN_CHANGE)
      invalidate=true;
    break;
#ifdef _WIN32_WCE
  case IDC_CLEARTYPE:
#endif
  case IDC_BOLD:
    if (HIWORD(wParam)==BN_CLICKED)
      invalidate=true;
    break;
  }
  if (invalidate) {
    CWnd  *tf=GetDlgItem(IDC_TEXTSAMPLE);
    if (tf)
      tf->Invalidate(FALSE);
  }
  return CDialog::OnCommand(wParam, lParam);
}

static int __stdcall enumfonts(const ENUMLOGFONT *lf,const TEXTMETRIC *tm,
		     int type,LPARAM lp)
{
  HWND cb=(HWND)lp;
  if (lf->elfLogFont.lfCharSet==ANSI_CHARSET) {
    const TCHAR *fn=lf->elfLogFont.lfFaceName;
    LRESULT ret=::SendMessage(cb,CB_ADDSTRING,0,(LPARAM)fn);
    ASSERT(ret!=CB_ERR && ret!=CB_ERRSPACE);
  }
  return TRUE;
}

BOOL COptionsDialog::OnInitDialog()
{
#if POCKETPC
  ((CCeCommandBar *)m_pWndEmptyCB)->LoadToolBar(cIDR_DIALOG);
#endif

  // populate font families
  {
    CClientDC	dc(this);
    HWND	hCB;
    GetDlgItem(IDC_FACE,&hCB);
    EnumFontFamilies(dc.m_hAttribDC,NULL,(FONTENUMPROC)enumfonts,(LPARAM)hCB);
  }
  // add angles and columns
  for (int angle=0;angle<360;angle+=90) {
    CString tmp;
    tmp.Format(_T("%d\xb0"),angle);
    SendDlgItemMessage(IDC_ROTATE,CB_ADDSTRING,0,(LPARAM)(LPCTSTR)tmp);
  }
  for (int column=1;column<5;++column) {
    CString tmp;
    tmp.Format(_T("%d"),column);
    SendDlgItemMessage(IDC_COLUMNS,CB_ADDSTRING,0,(LPARAM)(LPCTSTR)tmp);
  }
#ifndef _WIN32_WCE
  SendDlgItemMessage(IDC_CLEARTYPE,CB_ADDSTRING,0,(LPARAM)_T("None"));
  SendDlgItemMessage(IDC_CLEARTYPE,CB_ADDSTRING,0,(LPARAM)_T("Cleartype"));
  SendDlgItemMessage(IDC_CLEARTYPE,CB_ADDSTRING,0,(LPARAM)_T("Standard"));
#endif
  // resize the input window
  RECT	  rface,rsize,rspin;
  GetDlgItem(IDC_FACE)->GetWindowRect(&rface);
  GetDlgItem(IDC_FONTSIZE)->GetWindowRect(&rsize);
  GetDlgItem(IDC_SIZESPIN)->GetWindowRect(&rspin);
  ScreenToClient(&rface);
  ScreenToClient(&rsize);
  ScreenToClient(&rspin);
  rsize.bottom=rspin.bottom=rface.bottom;
  GetDlgItem(IDC_FONTSIZE)->MoveWindow(&rsize);
  GetDlgItem(IDC_SIZESPIN)->MoveWindow(&rspin);
  CDialog::OnInitDialog();
  SendDlgItemMessage(IDC_SIZESPIN,UDM_SETRANGE,0,MAKELONG(50,1));
  SendDlgItemMessage(IDC_MARGINSPIN,UDM_SETRANGE,0,MAKELONG(50,0));
  return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -