StyleBar.cpp
上传用户:qiye66671
上传日期:2009-12-10
资源大小:182k
文件大小:8k
源码类别:

绘图程序

开发平台:

C/C++

  1. // StyleBar.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "EastDraw.h"
  5. #include "EastDrawDoc.h"
  6. #include "EastDrawView.h"
  7. #include "StyleBar.h"
  8. #include"CUnit.h"
  9. #include "MainFrm.h"
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CStyleBar
  17. BEGIN_MESSAGE_MAP(CStyleBar, CToolBar)
  18. //{{AFX_MSG_MAP(CStyleBar)
  19. ON_WM_CREATE()
  20. ON_WM_ACTIVATE()
  21. //}}AFX_MSG_MAP
  22.     ON_CBN_SELENDOK (IDC_FONTNAMES, OnSelectFont)
  23.     ON_CBN_SELENDOK (IDC_FONTSIZES, OnSelectSize)
  24.     END_MESSAGE_MAP()
  25. /////////////////////////////////////////////////////////////////////////////
  26. // CStyleBar message handlers
  27. int CStyleBar::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  28. {
  29.     static int nFontSizes[] = {1,2,3,4,5,6,7,
  30.         8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 32, 36, 48, 72
  31.     };
  32. if (CToolBar::OnCreate(lpCreateStruct) == -1)
  33. return -1;
  34.     if (!LoadToolBar (IDR_STYLE_BAR))
  35.         return -1;
  36.     CClientDC dc (this);
  37.     m_font.CreatePointFont (80, _T ("MS Sans Serif"));
  38.     CFont* pOldFont = dc.SelectObject (&m_font);
  39.     TEXTMETRIC tm;
  40.     dc.GetTextMetrics (&tm);
  41.     int cxChar = tm.tmAveCharWidth;
  42.     int cyChar = tm.tmHeight + tm.tmExternalLeading;
  43.     dc.SelectObject (pOldFont);
  44.     SetButtonInfo (4, IDC_FONTNAMES, TBBS_SEPARATOR, cxChar * 32);
  45.     CRect rect;
  46.     GetItemRect (4, &rect);
  47.     rect.bottom = rect.top + (cyChar * 16);
  48.     if (!m_wndFontNames.Create (WS_CHILD | WS_VISIBLE | WS_VSCROLL |
  49.         CBS_DROPDOWNLIST | CBS_SORT, rect, this, IDC_FONTNAMES))
  50.         return -1;
  51.     m_wndFontNames.SetFont (&m_font);
  52.     InitTypefaceList (&dc);
  53.    
  54. SetButtonInfo (6, IDC_FONTSIZES, TBBS_SEPARATOR, cxChar * 12);
  55.     GetItemRect (6, &rect);
  56.     rect.bottom = rect.top + (cyChar * 14);
  57.     if (!m_wndFontSizes.Create (WS_CHILD | WS_VISIBLE | WS_VSCROLL |
  58.         CBS_DROPDOWNLIST, rect, this, IDC_FONTSIZES))
  59.         return -1;
  60.     m_wndFontSizes.SetFont (&m_font);
  61.     CString string;
  62. int nCount = sizeof (nFontSizes) / sizeof (int);
  63.     for (int k=0; k<nCount; k++) {
  64.         string.Format (_T ("%d"), nFontSizes[k]);            
  65.         m_wndFontSizes.AddString (string);
  66.     }
  67.      m_wndFontSizes.SetCurSel(2);
  68.     
  69.      m_wndFontNames.SetCurSel(m_wndFontNames.FindString(0,"Arial"));
  70.      isBoldUp=true;
  71.  isUnderlineUp=true;
  72.      isItalicUp=true;
  73.     return 0;
  74. }
  75. void CStyleBar::OnSelectFont ()
  76. {
  77.     TCHAR szFaceName[LF_FACESIZE];
  78.     int nIndex = m_wndFontNames.GetCurSel ();
  79.     m_wndFontNames.GetLBText (nIndex, szFaceName);
  80.     
  81.     CMDIChildWnd*pChild=((CMDIFrameWnd*)AfxGetMainWnd())->MDIGetActive();
  82. CEastDrawView*pView=(CEastDrawView*)pChild->GetActiveView();
  83. ENUMLOGFONT lpelf;
  84. m_FontMap.Lookup(nIndex,lpelf);
  85.    
  86.     
  87. TCHAR szSize[8];
  88.     int nIndex1 = m_wndFontSizes.GetCurSel ();
  89.     m_wndFontSizes.GetLBText (nIndex1, szSize);
  90.     int nSize = atoi (szSize) *5;
  91.     float fmultiple=float(nSize)/float(lpelf.elfLogFont.lfHeight);
  92. lpelf.elfLogFont.lfHeight=nSize;
  93.     lpelf.elfLogFont.lfWidth=nSize*fmultiple;
  94.     
  95. lpelf.elfLogFont.lfWeight=this->isBoldUp?FW_NORMAL:FW_BOLD;
  96. lpelf.elfLogFont.lfItalic=this->isItalicUp?0:1;
  97. lpelf.elfLogFont.lfUnderline=this->isUnderlineUp?0:1;
  98. if(pView->m_LBDownTimes==1)
  99. pView->m_pCurrentUnit->ChangeFont(&lpelf);
  100.     
  101. }
  102. void CStyleBar::OnSelectSize ()
  103. {
  104.     TCHAR szSize[8];
  105.     int nIndex = m_wndFontSizes.GetCurSel ();
  106.     m_wndFontSizes.GetLBText (nIndex, szSize);
  107.     int nSize = atoi (szSize) *5; // Need twips
  108.     CMDIChildWnd*pChild=((CMDIFrameWnd*)AfxGetMainWnd())->MDIGetActive();
  109. CEastDrawView*pView=(CEastDrawView*)pChild->GetActiveView();
  110. ENUMLOGFONT lpelf;
  111. nIndex = m_wndFontNames.GetCurSel ();
  112. this->m_FontMap.Lookup(nIndex,lpelf);
  113. float fmultiple=float(nSize)/float(lpelf.elfLogFont.lfHeight);
  114. lpelf.elfLogFont.lfHeight=nSize;
  115. lpelf.elfLogFont.lfWidth=nSize*fmultiple;
  116.    
  117.     lpelf.elfLogFont.lfWeight=this->isBoldUp?FW_NORMAL:FW_BOLD;
  118. lpelf.elfLogFont.lfItalic=this->isItalicUp?0:1;
  119. lpelf.elfLogFont.lfUnderline=this->isUnderlineUp?0:1;
  120.     pView->m_pCurrentUnit->ChangeFontSize(&lpelf);
  121. }
  122. void CStyleBar::InitTypefaceList (CDC* pDC)
  123. {
  124.     ::EnumFontFamilies (pDC->m_hDC, NULL,
  125.         (FONTENUMPROC) EnumFontNameProc, (LPARAM) this);
  126. }
  127. int CALLBACK CStyleBar::EnumFontNameProc (ENUMLOGFONT* lpelf,
  128.     NEWTEXTMETRIC* lpntm, int nFontType, LPARAM lParam)
  129. {
  130. CStyleBar* pWnd = (CStyleBar*) lParam;
  131.     int i=pWnd->m_wndFontNames.GetCount();
  132.  if (nFontType & TRUETYPE_FONTTYPE)
  133. {
  134. pWnd->m_wndFontNames.InsertString(i,lpelf->elfLogFont.lfFaceName);
  135.         pWnd->m_FontMap[i]=*lpelf;
  136. }
  137. return 1;
  138. }
  139. void CStyleBar::OnCharBold() 
  140.  {
  141. // TODO: Add your command handler code here
  142.    
  143. TCHAR szSize[8];
  144.     int nIndex = m_wndFontSizes.GetCurSel ();
  145.     m_wndFontSizes.GetLBText (nIndex, szSize);
  146.     int nSize = atoi (szSize) *5; 
  147.     CMDIChildWnd*pChild=((CMDIFrameWnd*)AfxGetMainWnd())->MDIGetActive();
  148. CEastDrawView*pView=(CEastDrawView*)pChild->GetActiveView();
  149. ENUMLOGFONT lpelf;
  150. nIndex = m_wndFontNames.GetCurSel ();
  151. this->m_FontMap.Lookup(nIndex,lpelf);
  152. float fmultiple=float(nSize)/float(lpelf.elfLogFont.lfHeight);
  153. lpelf.elfLogFont.lfHeight=nSize;
  154. lpelf.elfLogFont.lfWidth=nSize*fmultiple;
  155. lpelf.elfLogFont.lfWeight=this->isBoldUp?FW_BOLD:FW_NORMAL;
  156. lpelf.elfLogFont.lfItalic=this->isItalicUp?0:1;
  157. lpelf.elfLogFont.lfUnderline=this->isUnderlineUp?0:1;
  158.     isBoldUp=!isBoldUp;
  159.     if(pView->m_LBDownTimes==1)
  160. pView->m_pCurrentUnit->ChangeFontSize(&lpelf);
  161. }
  162. void CStyleBar::OnCharItalic()
  163. {
  164.     TCHAR szSize[8];
  165.     int nIndex = m_wndFontSizes.GetCurSel ();
  166.     m_wndFontSizes.GetLBText (nIndex, szSize);
  167.     int nSize = atoi (szSize) *5; 
  168.     CMDIChildWnd*pChild=((CMDIFrameWnd*)AfxGetMainWnd())->MDIGetActive();
  169. CEastDrawView*pView=(CEastDrawView*)pChild->GetActiveView();
  170. ENUMLOGFONT lpelf;
  171. nIndex = m_wndFontNames.GetCurSel ();
  172. this->m_FontMap.Lookup(nIndex,lpelf);
  173. float fmultiple=float(nSize)/float(lpelf.elfLogFont.lfHeight);
  174. lpelf.elfLogFont.lfHeight=nSize;
  175. lpelf.elfLogFont.lfWidth=nSize*fmultiple;
  176. lpelf.elfLogFont.lfWeight=this->isBoldUp?FW_NORMAL:FW_BOLD;
  177. lpelf.elfLogFont.lfItalic=this->isItalicUp?1:0;
  178. lpelf.elfLogFont.lfUnderline=this->isUnderlineUp?0:1;
  179. isItalicUp=!isItalicUp;
  180. if(pView->m_LBDownTimes==1)
  181.     pView->m_pCurrentUnit->ChangeFontSize(&lpelf);
  182. }
  183. void CStyleBar::OnCharUnderline()
  184. {
  185.     static BOOL isUp=true;
  186.     TCHAR szSize[8];
  187.     int nIndex = m_wndFontSizes.GetCurSel ();
  188.     m_wndFontSizes.GetLBText (nIndex, szSize);
  189.     int nSize = atoi (szSize) *5; 
  190.     CMDIChildWnd*pChild=((CMDIFrameWnd*)AfxGetMainWnd())->MDIGetActive();
  191. CEastDrawView*pView=(CEastDrawView*)pChild->GetActiveView();
  192. ENUMLOGFONT lpelf;
  193. nIndex = m_wndFontNames.GetCurSel ();
  194. this->m_FontMap.Lookup(nIndex,lpelf);
  195. float fmultiple=float(nSize)/float(lpelf.elfLogFont.lfHeight);
  196. lpelf.elfLogFont.lfHeight=nSize;
  197. lpelf.elfLogFont.lfWidth=nSize*fmultiple;
  198. lpelf.elfLogFont.lfWeight=this->isBoldUp?FW_NORMAL:FW_BOLD;
  199. lpelf.elfLogFont.lfItalic=this->isItalicUp?0:1;
  200. lpelf.elfLogFont.lfUnderline=this->isUnderlineUp?1:0;
  201. isUnderlineUp=!isUnderlineUp;
  202. if(pView->m_LBDownTimes==1)
  203.     pView->m_pCurrentUnit->ChangeFontSize(&lpelf);
  204. }
  205. void CStyleBar::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) 
  206. {
  207. CToolBar::OnActivate(nState, pWndOther, bMinimized);
  208. // TODO: Add your message handler code here
  209. }
  210. void CStyleBar::IniFont()
  211. {
  212.  this->OnSelectFont();
  213. }