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

📄 pregraphic.cpp

📁 用户管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// PreGraphic.cpp: implementation of the CPreGraphic class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "PreGraphic.h"
//#include "PreView.H"
#include "DataWin.H"
//#include "PreData.H"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
/*
		"Button",					// 按钮类0
		"Edit",						// 编辑框类1
		"ComboBox",					// 组合框类2
        "ListBox",                  //NEW:列表框3
		"ScrollBar",                //4
		"Static",                   //5
		"#32770",                   //6
	    "msctls_hotkey32",			// 热键7
		"SysIPAddress32",			// IP 地址8
		"SysListView32",			// 列表查看9
		"SysTreeView32",			// 树形查看10
		"SysDateTimePick32",		// 日期/时间选择11
		"msctls_updown32",			// 旋转12
		"SysMonthCal32",			// 月历13
		"SysTabControl32",			// TAB 控件14
		"msctls_progress32",		// 进度条15
		"msctls_trackbar32",		// 追踪条16
*/
CPreGraphic::CPreGraphic()
{

}

CPreGraphic::~CPreGraphic()
{

}
CPreGraphic::FrameRect(CDC *pDC, RECT *pRect)
{
	pDC->MoveTo(pRect->left, pRect->top);
	pDC->LineTo(pRect->right, pRect->top);
	pDC->MoveTo(pRect->right, pRect->top);
	pDC->LineTo(pRect->right, pRect->bottom);
	pDC->MoveTo(pRect->right, pRect->bottom);
	pDC->LineTo(pRect->left, pRect->bottom);
	pDC->MoveTo(pRect->left, pRect->bottom);
	pDC->LineTo(pRect->left, pRect->top);

}
//按比例转换坐标系
void CPreGraphic::CalMulRect(LPRECT pRect, double xPix, double yPix)
{
 pRect->left *=xPix;
 pRect->right *=xPix;
 pRect->top *=yPix;
 pRect->bottom *=yPix;
}
//按钮设置转成文本设置
UINT CPreGraphic::ButtonStyle2Format(DWORD style)
{
	UINT uFormat = 0;

	if((style & BS_MULTILINE) != BS_MULTILINE)
		uFormat |= DT_SINGLELINE;
	if((style & BS_TOP) == BS_TOP)
		uFormat |= DT_TOP;
	else if((style & BS_BOTTOM) == BS_BOTTOM)
		uFormat |= DT_BOTTOM;
	else
		uFormat |= DT_VCENTER | DT_SINGLELINE;
	if((style & BS_LEFT) == BS_LEFT)
		uFormat |= DT_LEFT;
	else if((style & BS_RIGHT) == BS_RIGHT)
		uFormat |= DT_RIGHT;
	else
		uFormat |= DT_CENTER;
	uFormat |= DT_END_ELLIPSIS;
	if(style & WS_DISABLED) uFormat |= WS_DISABLED;
	return uFormat;
}
//////////////////////////////////////////////
//画静态说明条
//原代码:可用
/*
BOOL CPreGraphic::DrawStatic(void * pDraw)
{
 HICON hIcon = NULL;
 HDC hBmpDC;
 CDataCell *pData = (CDataCell*)pDraw;
 CDC *pDC = pData->pDC;
 CBrush Brush;
 CRect Rect = pData->Rect;
 DWORD dwStyle = pData->dwStyle;
 if(!(dwStyle & WS_VISIBLE)) return TRUE;
 if(dwStyle & SS_ICON || dwStyle & SS_BITMAP)
	{
	 if ((hIcon = (HICON)::SendMessage(pData->hWnd,STM_GETICON,0L,0L)))
		{
		 if(hIcon == NULL) return FALSE;
		 pDC->DrawIcon(Rect.left, Rect.top,(HICON) hIcon);
		 return TRUE;
		}
	  else if ((hIcon = (HICON)::SendMessage(pData->hWnd,STM_GETIMAGE,IMAGE_BITMAP,0L)))
        {
	      hBmpDC = ::CreateCompatibleDC(pDC->m_hDC);
		  if (!hBmpDC) return FALSE;
		  ::SelectObject(hBmpDC, hIcon);
		  ::BitBlt(pDC->m_hDC, Rect.left , Rect.top,
			     Rect.right - Rect.left, 
				 Rect.bottom - Rect.top, 
				 hBmpDC, 0 , 0, SRCCOPY);
          DeleteObject(hBmpDC);
		  return TRUE;
		}
	}
//SS_BLACKFRAME或SS_FRAME类型表示绘线
  if(dwStyle & SS_BLACKRECT)
    return DrawLine(pDraw);
//写文字
  if(hIcon == NULL)
      DrawText(pDraw);
 return TRUE;
}
*/
//////////////////////////////////////////////
//画静态说明条
//新代码:通过跟踪后得到
BOOL CPreGraphic::DrawStatic(void * pDraw)
{
 CBrush Brush;//, *pOldBrush;
 HICON hIcon = NULL;
 HDC hBmpDC;
 CDataCell *pData = (CDataCell*)pDraw;
 CDC *pDC = pData->pDC;
 CRect Rect = pData->Rect;
 DWORD dwStyle = pData->dwStyle;
 if(!(dwStyle & WS_VISIBLE)) return TRUE;
 //dwStyle &= 0x3F;
 switch(dwStyle & 0x3F)  //前6位
  {
  case 7: //画FRAME类型同样处理
  case 8:
  case 9:
  case 11:
           return DrawFrame(pDraw);
  case 15://画Metafile类型
  case 4: //画RectRange
  case 5:
  case 6:
  case 10:
	       return DrawRange(pDraw);
  case 3: //画ICON
	     //hIcon = (HICON)::SendMessage(pData->hWnd,STM_GETICON,0L,0L);
		 if(hIcon == NULL) return FALSE;
		 pDC->DrawIcon(Rect.left, Rect.top,(HICON) hIcon);
		 return TRUE;
  case 14: //画BITMAP
	     //hIcon = (HICON)::SendMessage(pData->hWnd,STM_GETIMAGE,IMAGE_BITMAP,0L);
		 if(hIcon == NULL) return FALSE;
	     hBmpDC = ::CreateCompatibleDC(pDC->m_hDC);
		 if (!hBmpDC) return FALSE;
		  ::SelectObject(hBmpDC, hIcon);
		  ::BitBlt(pDC->m_hDC, Rect.left , Rect.top,
			     Rect.right - Rect.left, 
				 Rect.bottom - Rect.top, 
				 hBmpDC, 0 , 0, SRCCOPY);
          DeleteObject(hBmpDC);
		  return TRUE;
  }//end switch
//处理扩展样式, 因为无法从dwStyle类型中取出
//对应的边框、内陷等样式,所以只能从StyleEx取了:(
 DWORD dwStyleEx = pData->dwStyleEx;
/* if(dwStyleEx & WS_EX_DLGMODALFRAME) //按钮样式
 {
   if(!Brush.CreateSolidBrush(GetSysColor(COLOR_BTNFACE)))return FALSE;
   pDC->FillRect(&Rect, &Brush);
   Brush.DeleteObject();
   pDC->Draw3dRect(&Rect,GetSysColor(COLOR_3DHILIGHT),
                   GetSysColor(COLOR_3DDKSHADOW));   
  pData->dwStyle |= DT_VCENTER| DT_SINGLELINE;
 }
 if(dwStyleEx & WS_EX_CLIENTEDGE)//内陷样式
 {
//  if(!Brush.CreateSolidBrush(GetSysColor(COLOR_BTNFACE)))return FALSE;
  if(!Brush.CreateSolidBrush(pData->crBkColor))return FALSE;
   pDC->FillRect(&Rect, &Brush);
   Brush.DeleteObject();
   pDC->Draw3dRect(&Rect, GetSysColor(COLOR_3DDKSHADOW),
	              GetSysColor(COLOR_3DHILIGHT));   
   pData->dwStyle |= DT_VCENTER| DT_SINGLELINE;
 }
*/
 if(dwStyleEx & WS_EX_STATICEDGE)//平板样式
 {
   if(!Brush.CreateSolidBrush(pData->crTextColor))return FALSE;
   pDC->FrameRect(&Rect, &Brush);
   Brush.DeleteObject();
   pData->dwStyle |= DT_VCENTER| DT_SINGLELINE;
}
//写文字
 DrawText(pDraw);
 return TRUE;
}

//////////////////////////////////////////////////////
//画Radio
BOOL CPreGraphic::DrawRadio(void * pDraw)
{
 CDataCell *pData = (CDataCell*)pDraw;
 CDC *pDC = pData->pDC;
 CBrush Brush;
 CPen   Pen;
 CPen   *pOldPen;
 CBrush *pOldBrush;
 BOOL bChecked = FALSE;
 CRect Rect = pData->Rect;
 CRect rcText, rcRound;
//画背景
/*
 if(!Brush.CreateSolidBrush(pData->crBkColorParent))return FALSE;
 pDC->FillRect(&Rect, &Brush);
 Brush.DeleteObject();
*/
 if(!(pData->dwStyle & WS_VISIBLE)) return TRUE;
//计算圆点
 rcRound.SetRect(2,2,14,14);
 CalMulRect(&rcRound, pData->xPix,pData->yPix);
 if (pData->dwStyle & BS_LEFTTEXT)
	{	
		rcText = Rect;
        Rect.top += (Rect.Height()-rcRound.Height())/2;
        Rect.bottom = Rect.top+rcRound.Height();
        Rect.right -= rcRound.left; Rect.left = Rect.right - rcRound.Width();
		rcText.right -= rcRound.right+rcRound.left;
	}
	else
	{
		rcText = Rect;
        Rect.top += (Rect.Height()-rcRound.Height())/2;
        Rect.bottom = Rect.top+rcRound.Height();
        Rect.left += rcRound.left; Rect.right = Rect.left + rcRound.Width();
		rcText.left += rcRound.right+rcRound.left;
	}
//画圆
 if(!Pen.CreatePen(PS_SOLID,pData->yPix, pData->crColor))
	 return FALSE;
 pOldPen = pDC->SelectObject(&Pen);
 if(pData->dwStyle & WS_DISABLED)
 {//禁止
   if(!Brush.CreateSolidBrush(GetSysColor(COLOR_GRAYTEXT)))
	{
     pDC->SelectObject(pOldPen);
	 Pen.DeleteObject();
	 return FALSE;
	}
 }
 else
 {
    if(!Brush.CreateSolidBrush(pData->crBkColor))
	{
     pDC->SelectObject(pOldPen);
	 Pen.DeleteObject();
	 return FALSE;
	}
 }
 pOldBrush = pDC->SelectObject(&Brush);
 pDC->Ellipse(&Rect);
 pDC->SelectObject(pOldBrush);
 Brush.DeleteObject();
 pDC->SelectObject(pOldPen);
 Pen.DeleteObject();

 if(pData->dwCommand == PNS_DATABASE)
 {//数据库类型
   if(pData->strText == "TRUE" ||
      pData->strText == "1")
	  bChecked = TRUE;
 }
 if(bChecked) 
	{
	 if(!Brush.CreateSolidBrush(pData->crTextColor))return FALSE;
	 pOldBrush = pDC->SelectObject(&Brush);
	 Rect.DeflateRect(Rect.Width()/4,Rect.Height()/4);
     pDC->Ellipse(&Rect);
	 pDC->SelectObject(pOldBrush);
	 Brush.DeleteObject();
 }
 if(pData->dwCommand == PNS_DATABASE) return TRUE;
//写文字 
 pData->Rect = rcText;
 pData->nBkMode = TRANSPARENT;
 pData->dwStyle=ButtonStyle2Format(pData->dwStyle); 
 DrawText(pDraw);
 return TRUE;
}
//////////////////////////////////////////////
//画Group
BOOL CPreGraphic::DrawGroup(void * pDraw)
{
 CDataCell *pData = (CDataCell*)pDraw;
 CDC *pDC = pData->pDC;
 CBrush Brush;
 CRect Rect = pData->Rect;
 if(!(pData->dwStyle & WS_VISIBLE)) return TRUE;

//画外框 
 Rect.top += 8*pData->yPix;;
 if(!Brush.CreateSolidBrush(pData->crColor))return FALSE;
 pDC->FrameRect(&Rect, &Brush);
 Brush.DeleteObject();

⌨️ 快捷键说明

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