📄 fmwnd.cpp
字号:
// FMWnd.cpp : implementation file//#include "stdafx.h"#include "fusion.h"#include "FMWnd.h"#include "FusionGlobal.h"#include "FusionColorUI.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// RxFMWndRxFMWnd::RxFMWnd(){ m_dwRxStyle = 0; m_nSeries = RXSERIES_REF; m_nMsgTab = 0; m_nCurTab = 0; m_bTabVisible = FALSE; m_bTabFixed = TRUE; m_ArrayTab.SetSize(0, 4); m_ArrayButton.SetSize(0, 4); m_nMouseOverButton = -1; m_bSliderShow = TRUE; m_bSliderVert = TRUE; m_nMouseOverSlider = -1; m_nMouseCheckSlider = -1; m_nRangeMin = 0; m_nRangeMax = 100; m_nMinPo = 0; m_nMaxPo = 100; m_nMinPi = 0; m_nMaxPi = 0;}RxFMWnd::RxFMWnd(UINT nSeries){ m_dwRxStyle = 0; m_nSeries = nSeries; m_nMsgTab = 0; m_nCurTab = 0; m_bTabVisible = FALSE; m_bTabFixed = TRUE; m_ArrayTab.SetSize(0, 4); m_ArrayButton.SetSize(0, 4); m_nMouseOverButton = -1; m_bSliderShow = TRUE; m_bSliderVert = TRUE; m_nMouseOverSlider = -1; m_nMouseCheckSlider = -1; m_nRangeMin = 0; m_nRangeMax = 100; m_nMinPo = 0; m_nMaxPo = 100; m_nMinPi = 0; m_nMaxPi = 0;}RxFMWnd::~RxFMWnd(){}BEGIN_MESSAGE_MAP(RxFMWnd, CWnd) //{{AFX_MSG_MAP(RxFMWnd) ON_WM_CREATE() ON_WM_NCCALCSIZE() ON_WM_MOUSEACTIVATE() ON_WM_DESTROY() ON_WM_NCPAINT() ON_WM_NCLBUTTONDOWN() ON_WM_NCLBUTTONUP() ON_WM_NCMOUSEMOVE() ON_WM_TIMER() ON_WM_NCHITTEST() ON_WM_SIZE() //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// RxFMWnd message handlersint RxFMWnd::CreateRx(DWORD dwStyle, DWORD dwRxStyle, const RECT &rect, CWnd *pParentWnd, UINT nID){ m_dwRxStyle = dwRxStyle; return CWnd::Create(NULL, NULL, dwStyle, rect, pParentWnd, nID);} int RxFMWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CWnd::OnCreate(lpCreateStruct) == -1) return -1; return 0;}void RxFMWnd::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp) { if(m_dwRxStyle & WS_RX_CAPTION) lpncsp->rgrc[0].top += RXSZ_CAP_HEIGHT; int nFrame3DFMatrix = RxGetFrameMain()->Frame3DF_GetMatrix(); if(m_dwRxStyle & WS_RX_LOCALIZER && m_bSliderShow) { if(nFrame3DFMatrix == FRAME_MATRIX_12) { m_bSliderVert = FALSE; lpncsp->rgrc[0].bottom -= RXSZ_LOCAL_HEIGHT; } else if(nFrame3DFMatrix == FRAME_MATRIX_32) { m_bSliderVert = TRUE; lpncsp->rgrc[0].right -= RXSZ_LOCAL_HEIGHT; } } CWnd::OnNcCalcSize(bCalcValidRects, lpncsp);}void RxFMWnd::OnSize(UINT nType, int cx, int cy) { CWnd::OnSize(nType, cx, cy); if(m_dwRxStyle & WS_RX_LOCALIZER) UpdateSlider();}void RxFMWnd::PostNcDestroy() { CWnd::PostNcDestroy(); delete this;}void RxFMWnd::OnDestroy() { CWnd::OnDestroy(); RemoveAllTab(); RemoveAllButton();}/////////////////////////////////////////////////////////////////////////////// 努扼捞攫飘 康开俊辑 付快胶 滚瓢阑 穿甫锭 惯积int RxFMWnd::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message) { int nResult = CWnd::OnMouseActivate(pDesktopWnd, nHitTest, message); if (nResult == MA_NOACTIVATE || nResult == MA_NOACTIVATEANDEAT) return nResult; // frame does not want to activate RxMainFrame *pFrame = RxGetMainFrame(); if (pFrame != NULL) { // either re-activate the current view, or set this view to be active CWnd* pWnd = (CWnd *)pFrame->GetActiveWnd(); HWND hWndFocus = ::GetFocus(); if (pWnd == this && m_hWnd != hWndFocus && !::IsChild(m_hWnd, hWndFocus)) { // re-activate this view if (IsTopParentActive()) SetFocus(); } else // activate this view pFrame->SetActiveWnd(this); } return nResult;}void RxFMWnd::OnActivateWnd(BOOL bActivate, CWnd *pCurWnd, CWnd *pOldWnd){ if (bActivate) { ASSERT(pCurWnd == this); // take the focus if this frame/view/pane is now active if (IsTopParentActive()) SetFocus(); } RedrawNCWnd(RXRS_CAPTION);}void RxFMWnd::OnNcPaint() { RedrawNCWnd(); // Do not call CWnd::OnNcPaint() for painting messages}void RxFMWnd::RedrawNCWnd(WORD wSide){ CRect rcWindow; GetWindowRect(rcWindow); rcWindow.OffsetRect(-rcWindow.left, -rcWindow.top); CWindowDC dc(this); CDC dcMem; CBitmap bmpMem, *pOldBitmap; if(m_dwRxStyle & WS_RX_CAPTION && wSide & RXRS_CAPTION) { dcMem.CreateCompatibleDC(&dc); bmpMem.CreateCompatibleBitmap(&dc, rcWindow.Width(), RXSZ_CAP_HEIGHT); pOldBitmap = dcMem.SelectObject(&bmpMem); DrawCaption(&dcMem, CRect(0, 0, rcWindow.Width(), RXSZ_CAP_HEIGHT)); dc.BitBlt(rcWindow.left, rcWindow.top, rcWindow.Width(), rcWindow.Height(), &dcMem, 0, 0, SRCCOPY); dcMem.SelectObject(pOldBitmap); bmpMem.DeleteObject(); dcMem.DeleteDC(); } if(m_dwRxStyle & WS_RX_LOCALIZER && m_bSliderShow && wSide & RXRS_CROP_SLIDER) { int cx, cy; if(m_bSliderVert) { cx = RXSZ_LOCAL_HEIGHT; cy = rcWindow.Height()-RXSZ_CAP_HEIGHT; dcMem.CreateCompatibleDC(&dc); bmpMem.CreateCompatibleBitmap(&dc, cx, cy); pOldBitmap = dcMem.SelectObject(&bmpMem); DrawSlider(&dcMem, CRect(0, 0, cx, cy)); dc.BitBlt(rcWindow.right-RXSZ_LOCAL_HEIGHT, rcWindow.top+RXSZ_CAP_HEIGHT, cx, cy, &dcMem, 0, 0, SRCCOPY); dcMem.SelectObject(pOldBitmap); bmpMem.DeleteObject(); dcMem.DeleteDC(); } else { cx = rcWindow.Width(); cy = RXSZ_LOCAL_HEIGHT; dcMem.CreateCompatibleDC(&dc); bmpMem.CreateCompatibleBitmap(&dc, cx, cy); pOldBitmap = dcMem.SelectObject(&bmpMem); DrawSlider(&dcMem, CRect(0, 0, cx, cy)); dc.BitBlt(rcWindow.left, rcWindow.bottom-RXSZ_LOCAL_HEIGHT, cx, cy, &dcMem, 0, 0, SRCCOPY); dcMem.SelectObject(pOldBitmap); bmpMem.DeleteObject(); dcMem.DeleteDC(); } } ReleaseDC(&dc);}void RxFMWnd::DrawCaption(CDC *pDC, CRect rect){ CWnd *pActiveWnd = RxGetActiveWnd(); CAP_COLOR crCaption; if(pActiveWnd->GetSafeHwnd() == GetSafeHwnd()) { if(RxIsTopActived()) { crCaption.crFace = RXCOLOR_101; crCaption.crLight = RXCOLOR_102; crCaption.crHiLight = RXCOLOR_103; crCaption.crShadow = RXCOLOR_104; crCaption.crText = RXCOLOR_105; } else { crCaption.crFace = RXCOLOR_111; crCaption.crLight = RXCOLOR_112; crCaption.crHiLight = RXCOLOR_113; crCaption.crShadow = RXCOLOR_114; crCaption.crText = RXCOLOR_115; } } else { crCaption.crFace = RXCOLOR_121; crCaption.crLight = RXCOLOR_122; crCaption.crHiLight = RXCOLOR_123; crCaption.crShadow = RXCOLOR_124; crCaption.crText = RXCOLOR_125; } // calculate buttons position int nLeftPos = rect.left; int nRightPos = rect.right-RXSZ_CAP_GMARGIN-RXSZ_CAP_RMARGIN; int nSepCount = 0; int nBtnCount = 0; RX_CAPBUTTON *pButton; for(int i = 0; i < m_ArrayButton.GetSize(); i++) { pButton = (RX_CAPBUTTON *)m_ArrayButton.GetAt(i); if(pButton->wStatus & RXCBS_VISIBLE) { if(pButton->wStatus & RXCBS_SEPARATOR) nSepCount++; else nBtnCount++; } } nLeftPos = rect.left + RXSZ_CAP_LMARGIN; nRightPos = nRightPos - nSepCount*RXSZ_CAP_SMARGIN - nBtnCount*RXSZ_CAP_BUTTON - (nBtnCount > 1 ? (nBtnCount-1)*RXSZ_CAP_BMARGIN : 0); if(nRightPos > RXSZ_CAP_LMARGIN) { CDC dcMem; CBitmap bmpMem, *pOldBitmap; dcMem.CreateCompatibleDC(pDC); bmpMem.CreateCompatibleBitmap(pDC, nRightPos, RXSZ_CAP_HEIGHT); pOldBitmap = dcMem.SelectObject(&bmpMem); // Fill the header background CBrush brush, *pOldBrush; brush.CreateSolidBrush(crCaption.crFace); pOldBrush = dcMem.SelectObject(&brush); dcMem.PatBlt(0, 0, nRightPos, RXSZ_CAP_HEIGHT, PATCOPY); dcMem.SelectObject(pOldBrush); brush.DeleteObject(); int nTabCount = m_ArrayTab.GetSize(); if(nTabCount > 0 && m_bTabVisible) { int j; RX_CAPTAB *pTab; for(i = 0; i <= nTabCount; i++) { if(i == nTabCount) j = m_nCurTab; else j = i; if(i == m_nCurTab) continue; pTab = (RX_CAPTAB *)m_ArrayTab.GetAt(j); DrawTab(&dcMem, (m_nCurTab == j), pTab, &crCaption); } pTab = (RX_CAPTAB *)m_ArrayTab.GetAt(nTabCount-1); nLeftPos = pTab->ptPoint[3].x + RXSZ_CAP_GMARGIN; } else { // Create Caption Font int nHeight = -((dcMem.GetDeviceCaps(LOGPIXELSY) * 9) / 74); CFont font, *pOldFont; font.CreateFont(nHeight, 0, 0, 0, FW_BOLD, FALSE, 0, 0, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE, _T("Arial")); pOldFont = dcMem.SelectObject(&font); // Get Window Text. CString strCaption; GetWindowText(strCaption); CRect rcCaption; rcCaption.SetRect(nLeftPos, 0, nRightPos, rect.bottom); dcMem.SetBkMode(TRANSPARENT); dcMem.SetTextColor(crCaption.crText); dcMem.DrawText(strCaption, rcCaption, DT_SINGLELINE|DT_LEFT|DT_VCENTER|DT_END_ELLIPSIS); nLeftPos = nLeftPos + dcMem.GetTextExtent(strCaption).cx + RXSZ_CAP_GMARGIN; dcMem.SelectObject(pOldFont); font.DeleteObject(); } if(nLeftPos < nRightPos) { // Create various pen CPen penLight, penHiLight, penShadow, *pOldPen; penLight.CreatePen (PS_SOLID, 1, crCaption.crLight); penHiLight.CreatePen(PS_SOLID, 1, crCaption.crHiLight); penShadow.CreatePen (PS_SOLID, 1, crCaption.crShadow); // Draw Grip Line pOldPen = dcMem.SelectObject(&penLight); dcMem.MoveTo(nLeftPos, 5); dcMem.LineTo(nRightPos, 5); dcMem.MoveTo(nLeftPos, 9); dcMem.LineTo(nRightPos, 9); dcMem.SelectObject(&penHiLight); dcMem.MoveTo(nLeftPos, 6); dcMem.LineTo(nRightPos, 6); dcMem.MoveTo(nLeftPos, 10); dcMem.LineTo(nRightPos, 10); dcMem.SelectObject(&penShadow); dcMem.MoveTo(nLeftPos, 7); dcMem.LineTo(nRightPos, 7); dcMem.MoveTo(nLeftPos, 11); dcMem.LineTo(nRightPos, 11); // Clear GDI Resource dcMem.SelectObject(pOldPen); penLight.DeleteObject(); penHiLight.DeleteObject(); penShadow.DeleteObject(); } pDC->BitBlt(0, 0, nRightPos, rect.bottom, &dcMem, 0, 0, SRCCOPY); dcMem.SelectObject(pOldBitmap); bmpMem.DeleteObject(); dcMem.DeleteDC(); } int nWidth = abs(rect.right-nRightPos); int nBtnPos = rect.right - RXSZ_CAP_RMARGIN; // Fill the header background CBrush brush, *pOldBrush; brush.CreateSolidBrush(crCaption.crFace); pOldBrush = pDC->SelectObject(&brush); pDC->PatBlt(nRightPos, 0, nWidth, RXSZ_CAP_HEIGHT, PATCOPY); pDC->SelectObject(pOldBrush); brush.DeleteObject(); for(i = m_ArrayButton.GetSize()-1; i >= 0; i--) { pButton = (RX_CAPBUTTON *)m_ArrayButton.GetAt(i); if(pButton->wStatus & RXCBS_VISIBLE) { if(pButton->wStatus & RXCBS_SEPARATOR) nBtnPos -= RXSZ_CAP_SMARGIN; else { nBtnPos -= RXSZ_CAP_BUTTON; DrawButton(pDC, CPoint(nBtnPos, 2), pButton); nBtnPos -= RXSZ_CAP_BMARGIN; } } } // Draw header border pDC->Draw3dRect(rect, RXCOLOR_100, RXCOLOR_100);}void RxFMWnd::DrawTab(CDC *pDC, BOOL bActive, RX_CAPTAB *_tabCaption, CAP_COLOR *_crCaption){ CPen pen, *pOldPen; pen.CreatePen(PS_SOLID, 1, RGB( 0, 0, 0)); pOldPen = pDC->SelectObject(&pen); CBrush brush, *pOldBrush; brush.CreateSolidBrush(bActive ? RGB(178,174,173) : _crCaption->crFace); pOldBrush = pDC->SelectObject(&brush); CFont font, *pOldFont; font.CreateFont(13, 0, 0, 0, FW_BOLD, 0, 0, 0, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE, _T("Tahoma")); pOldFont = pDC->SelectObject(&font); pDC->BeginPath(); pDC->MoveTo(_tabCaption->ptPoint[0].x, _tabCaption->ptPoint[0].y); pDC->LineTo(_tabCaption->ptPoint[1].x, _tabCaption->ptPoint[1].y); pDC->LineTo(_tabCaption->ptPoint[2].x, _tabCaption->ptPoint[2].y); pDC->LineTo(_tabCaption->ptPoint[3].x, _tabCaption->ptPoint[3].y); pDC->EndPath(); pDC->FillPath(); pDC->MoveTo(_tabCaption->ptPoint[0].x, _tabCaption->ptPoint[0].y); pDC->LineTo(_tabCaption->ptPoint[1].x, _tabCaption->ptPoint[1].y); pDC->LineTo(_tabCaption->ptPoint[2].x, _tabCaption->ptPoint[2].y); pDC->LineTo(_tabCaption->ptPoint[3].x, _tabCaption->ptPoint[3].y); if(bActive) { pen.DeleteObject(); pen.CreatePen(PS_SOLID, 1, RGB(220,220,220)); pDC->SelectObject(&pen); pDC->MoveTo(_tabCaption->ptPoint[0].x+1, _tabCaption->ptPoint[0].y); pDC->LineTo(_tabCaption->ptPoint[1].x+1, _tabCaption->ptPoint[1].y+1); pDC->LineTo(_tabCaption->ptPoint[2].x, _tabCaption->ptPoint[2].y+1); } CRect rcTemp; rcTemp.left = _tabCaption->ptPoint[1].x; rcTemp.right = _tabCaption->ptPoint[2].x; rcTemp.top = _tabCaption->ptPoint[1].y; rcTemp.bottom = _tabCaption->ptPoint[0].y; pDC->SetBkMode(TRANSPARENT); if(bActive) { pDC->SetTextColor(RGB(228,228,228)); pDC->DrawText(_tabCaption->strText, rcTemp, DT_SINGLELINE|DT_VCENTER|DT_CENTER); rcTemp.OffsetRect(0, -1); pDC->SetTextColor(RGB( 0, 0, 0)); pDC->DrawText(_tabCaption->strText, rcTemp, DT_SINGLELINE|DT_VCENTER|DT_CENTER); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -