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

📄 pregraphic.cpp

📁 用户管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//写文字
 pData->Rect.left += 4*pData->xPix;
 pData->dwStyle = DT_LEFT | DT_TOP;
 //pData->crBkColor = pData->crBkColorParent;
 pData->nBkMode = OPAQUE;
 DrawText(pDraw);
 return TRUE;
}
//画Check
//////////////////////////////////////////////////////////////
#define CALPIX(x) (x*xPix)
BOOL CPreGraphic::DrawCheck(void * pDraw)
{
 CDataCell *pData = (CDataCell*)pDraw;
 CDC *pDC = pData->pDC;
 CBrush Brush;
 CPen   Pen, *pOldPen;
 BOOL bChecked = FALSE;
 CRect Rect = pData->Rect;
 CRect rcText, rcRound;
 DOUBLE xPix = pData->xPix; 
 DOUBLE yPix = pData->yPix;
 
//画背景
/*
 if(!Brush.CreateSolidBrush(pData->crBkColorParent))return FALSE;
 pDC->FillRect(&Rect, &Brush);
 Brush.DeleteObject();
*/
 if(!(pData->dwStyle & WS_VISIBLE)) return TRUE;

//计算方框位置
 rcRound.SetRect(1,1,13,13);
 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, CALPIX(1),pData->crColor))return FALSE;
 pOldPen=(CPen *)pDC->SelectObject(&Pen);
 if(pData->dwStyle & BS_FLAT)
 {//平面
//   if(!Brush.CreateSolidBrush(pData->crColor))return FALSE;
//     pDC->FrameRect(&Rect, &Brush);
//   Brush.DeleteObject();
	FrameRect(pDC, &Rect);
 }
 else
 {//其它
   pDC->Draw3dRect(&Rect,GetSysColor(COLOR_3DDKSHADOW),
               GetSysColor(COLOR_3DHILIGHT)); 
 }
 pDC->SelectObject(pOldPen);
 Pen.DeleteObject();
//绘内框
 Rect.DeflateRect(1,1);
 if(pData->dwStyle & WS_DISABLED)
 {
   if(!Brush.CreateSolidBrush(GetSysColor(COLOR_BTNFACE)))return FALSE;
 }
 else
 {
   if(!Brush.CreateSolidBrush(pData->crBkColor))return FALSE;
 }
 pDC->FillRect(&Rect, &Brush);
 Brush.DeleteObject();

 if(pData->dwCommand == PNS_DATABASE)
 {//数据库类型
   if(pData->strText == "TRUE" ||
      pData->strText == "Y" ||
      pData->strText == "1")
	  bChecked = TRUE;
 }
// else
// {
//     DWORD dwStyle = SendMessage(pData->hWnd, BM_GETCHECK, 0, 0);
//	   if (dwStyle == BST_CHECKED) bChecked = TRUE;
// }
//绘选仲标志
 if(bChecked)
	{
	 if(!Pen.CreatePen(PS_SOLID,1, pData->crTextColor))return FALSE;
	 pOldPen = pDC->SelectObject(&Pen);
     Rect.DeflateRect(Rect.Width()/4,Rect.Height()/4);//√起启位置
     for (int i = CALPIX(3); i < CALPIX(10); i++)
		{
			pDC->MoveTo(Rect.left+i-CALPIX(3), Rect.top + ((i < CALPIX(6)) ? i - CALPIX(1) : (CALPIX(9) - i)));
			pDC->LineTo(Rect.left+i-CALPIX(3), Rect.top + ((i < CALPIX(6)) ? i + CALPIX(2) : (CALPIX(12) - i ))); 
		}
	 pDC->SelectObject(pOldPen);
	 Pen.DeleteObject();
 }
//写文字 
 if(pData->dwCommand != PNS_DATABASE)
 {//数据库类型,约定不写文字
  pData->Rect = rcText;
  pData->nBkMode = TRANSPARENT;
  pData->dwStyle=ButtonStyle2Format(pData->dwStyle); 
  DrawText(pDraw);
 }
 return TRUE;
}
//////////////////////////////////////////////////////////
//画Button
BOOL CPreGraphic::DrawButton(void * pDraw)
{
 CDataCell *pData = (CDataCell*)pDraw;
 CDC *pDC = pData->pDC;
 CBrush Brush;//, *pOldBrush;
 CPen   Pen;//, *pOldPen;
 CRect Rect = pData->Rect;
 //画背景,不知道有没有必要
 if(!(pData->dwStyle & WS_VISIBLE)) return TRUE;
 if(!Brush.CreateSolidBrush(pData->crBkColor))return FALSE;
 pDC->FillRect(&Rect, &Brush);
 Brush.DeleteObject();

 if(pData->dwStyle & BS_FLAT) 
 {//平面模式
   if(!Brush.CreateSolidBrush(pData->crColor))return FALSE;
   pDC->FrameRect(&Rect, &Brush);
   Brush.DeleteObject();
 }
 else
 {//其它
   pDC->Draw3dRect(&Rect,GetSysColor(COLOR_3DHILIGHT),
                   GetSysColor(COLOR_3DDKSHADOW));   
 }
//写文字
 pData->nBkMode = TRANSPARENT;
 pData->dwStyle = ButtonStyle2Format(pData->dwStyle); 
 DrawText(pDraw);
 return TRUE;
}
////////////////////////////////////////////
//写文字
BOOL CPreGraphic::DrawText(void * pDraw)
{
 CDataCell *pData = (CDataCell*)pDraw;
 CDC *pDC = pData->pDC;
 CRect Rect = pData->Rect;
 Rect.left += 2;    //略略右移2位
 pDC->SetBkColor(pData->crBkColor);
 pDC->SetBkMode(pData->nBkMode);

 CFont Font,*pOldFont = NULL; 
 LOGFONT LogFont;
 if(pData->pFont)//默认已指字体
 {
	if(pData->bIsPrint)
		int i = 0;
    if(!pData->pFont->GetLogFont(&LogFont))return FALSE;
	LogFont.lfWidth*=pData->xPix;///4;
	LogFont.lfHeight*=pData->yPix;///4;
	if(!Font.CreateFontIndirect(&LogFont))return FALSE;
    pOldFont = pDC->SelectObject(&Font);
 }
 if(pData->dwStyle & WS_DISABLED)
 {//禁止
   pDC->SetTextColor(GetSysColor(COLOR_3DHIGHLIGHT)); 
   pDC->DrawText(pData->strText, Rect, pData->dwStyle);
 //  Rect.top -= 2*pData->xPix; 
 //  Rect.left -= 2*pData->yPix; 
   pDC->SetTextColor(GetSysColor(COLOR_GRAYTEXT)); 
   pDC->DrawText(pData->strText, Rect, pData->dwStyle);
}
 else
 {
   pDC->SetTextColor(pData->crTextColor);
   pDC->DrawText(pData->strText, Rect, pData->dwStyle);
 }
 if(pOldFont)  pDC->SelectObject(pOldFont);
 return TRUE;
}
//////////////////////////////////////////////////////
//画线
BOOL CPreGraphic::DrawFrame(void * pDraw)
{
 CDataCell *pData = (CDataCell*)pDraw;
 CDC *pDC = pData->pDC;
 CGdiObject *pOldObject;
 CPen    *pPen,*pOldPen;
 if(!(pData->dwStyle & WS_VISIBLE)) return TRUE;
 if(pData->pPen==NULL) //没有指定绘笔
 {
	pPen = new CPen;
	if(pPen == NULL)
		return FALSE;
    if(!pPen->CreatePen(PS_SOLID, 1,pData->crColor))
		return FALSE;
 }
 else
 {
	pPen = pData->pPen;
 }
 //画线
 pOldPen=pDC->SelectObject(pPen);
 CRect Rect = pData->Rect;
 pOldObject=pDC->SelectStockObject(NULL_BRUSH);
 pDC->Rectangle(&Rect);
 pDC->SelectObject(pOldPen);
 
 if(pData->pPen==NULL) //删除
 {
    pPen->DeleteObject();
    delete pPen;
 }
 return TRUE;
}
//////////////////////////////////////////////////////
//画实心框
BOOL CPreGraphic::DrawRange(void * pDraw)
{
 CDataCell *pData = (CDataCell*)pDraw;
 CDC *pDC = pData->pDC;
 CBrush Brush;
 CRect Rect = pData->Rect;
 Rect.right-=pData->xPix;  //减少1,因为IDE无法画为1宽的线
 Rect.bottom-=pData->yPix;  //减少1,因为IDE无法画为1宽的线
 if(!(pData->dwStyle & WS_VISIBLE)) return TRUE;
 if(pData->dwStyle & WS_DISABLED)
 {
   if(!Brush.CreateSolidBrush(GetSysColor(COLOR_BTNFACE)))
	   return FALSE;
 }
 else
 {
   if(!Brush.CreateSolidBrush(pData->crColor))
	   return FALSE;
 }
 pDC->FillRect(&Rect, &Brush);
 Brush.DeleteObject();
 return TRUE;
}
/////////////////////////////////////////////////////////////
//自绘控件,不能识别的将被忽略
////////
BOOL CPreGraphic::DrawItem(void *pDraw)
{
static char s_szClass[][32] = 
	{
		"Button",					// 按钮类0
		"Edit",						// 编辑框类1
		"ComboBox",					// 组合框类2
        "ListBox",                  // 列表框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
	};

  CDataCell *pData = (CDataCell*)pDraw;
  if(pData->pDC==NULL)return FALSE;
  
  for (int lReturn = 0; lReturn < (sizeof(s_szClass) / sizeof(s_szClass[0])); lReturn++)
		if (pData->strType == s_szClass[lReturn])
			break;
  
  DWORD dwStyle = pData->dwStyle;
  switch (lReturn)
  {
  case 0: //按钮
	switch (dwStyle & SS_TYPEMASK)
	{
		case BS_CHECKBOX:			// 复选框
		case BS_AUTOCHECKBOX:		// 自动复选框
		case BS_3STATE:				// 三状态复选框
		case BS_AUTO3STATE:			// 自动三状态复选框
			if (dwStyle & BS_PUSHLIKE)
			  return DrawButton(pDraw);
			else
             return DrawCheck(pDraw);
		case BS_RADIOBUTTON:		// 单选框
		case BS_AUTORADIOBUTTON:	// 自动单选框
			if (dwStyle & BS_PUSHLIKE)
			  return DrawButton(pDraw);
			else
			  return DrawRadio(pDraw);
			break;
		case BS_DEFPUSHBUTTON:		// 默认按钮
		case BS_PUSHBUTTON:			// 普通按钮
			  return DrawButton(pDraw);
		case BS_GROUPBOX:	// 分组框
			  return DrawGroup(pDraw);
	}
	break;
	case  5://静态说明条
//          if(dwStyle & SS_BLACKRECT)//SS_BLACKFRAME类型表示绘线
//		     return DrawLine(pDraw);
//	      else
             return DrawStatic(pDraw);
          break;
  }//end switch
  return FALSE;
}

⌨️ 快捷键说明

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