util_gdi.cpp

来自「一个功能强大的串行口监视和检测程序的源代码。」· C++ 代码 · 共 150 行

CPP
150
字号

// util_gdi.cpp

#include "stdafx.h"
#include "util_gdi.h"



tag3DPens::tag3DPens()
{
   pPenBlack = new CPen(PS_SOLID, 1, RGB(0,0,0));
   pPenDarkGray = new CPen(PS_SOLID, 1, GetSysColor(COLOR_BTNSHADOW));
   pPenWhite = new CPen(PS_SOLID, 1, RGB(255,255,255));
   pPenGray = new CPen(PS_SOLID, 1, GetSysColor(COLOR_BTNFACE));
}


tag3DPens::~tag3DPens()
{
   delete pPenBlack;
   delete pPenDarkGray;
   delete pPenWhite;
   delete pPenGray;
}




int GfxDraw3DBorder(CDC *pDC, LP3DPENS p3DPens, CRect rectBorder, BOOL bInside)
{
   if(bInside)
   {
      CPen *pOldPen = pDC->SelectObject(p3DPens->pPenDarkGray);

      pDC->MoveTo(rectBorder.left, rectBorder.top);
      pDC->LineTo(rectBorder.right, rectBorder.top);
      pDC->MoveTo(rectBorder.left, rectBorder.top);
      pDC->LineTo(rectBorder.left, rectBorder.bottom);

      pDC->SelectObject(p3DPens->pPenBlack);

      rectBorder.DeflateRect(1, 1);
      pDC->MoveTo(rectBorder.left, rectBorder.top);
      pDC->LineTo(rectBorder.right, rectBorder.top);
      pDC->MoveTo(rectBorder.left, rectBorder.top);
      pDC->LineTo(rectBorder.left, rectBorder.bottom);

      pDC->SelectObject(p3DPens->pPenWhite);

      rectBorder.InflateRect(1, 1);
      pDC->MoveTo(rectBorder.right-1, rectBorder.top);
      pDC->LineTo(rectBorder.right-1, rectBorder.bottom);
      pDC->MoveTo(rectBorder.left, rectBorder.bottom-1);
      pDC->LineTo(rectBorder.right, rectBorder.bottom-1);

      pDC->SelectObject(p3DPens->pPenGray);

      rectBorder.DeflateRect(1, 1);
      pDC->MoveTo(rectBorder.right-1, rectBorder.top);
      pDC->LineTo(rectBorder.right-1, rectBorder.bottom);
      pDC->MoveTo(rectBorder.left, rectBorder.bottom-1);
      pDC->LineTo(rectBorder.right, rectBorder.bottom-1);

      pDC->SelectObject(pOldPen);
   }
   else
   {
      // draw the borders
      CPen *pOldPen = pDC->SelectObject(p3DPens->pPenGray);

      pDC->MoveTo(rectBorder.left, rectBorder.top);
      pDC->LineTo(rectBorder.right, rectBorder.top);
      pDC->MoveTo(rectBorder.left, rectBorder.top);
      pDC->LineTo(rectBorder.left, rectBorder.bottom);

      pDC->SelectObject(p3DPens->pPenWhite);

      rectBorder.DeflateRect(1, 1);
      pDC->MoveTo(rectBorder.left, rectBorder.top);
      pDC->LineTo(rectBorder.right, rectBorder.top);
      pDC->MoveTo(rectBorder.left, rectBorder.top);
      pDC->LineTo(rectBorder.left, rectBorder.bottom);

      pDC->SelectObject(p3DPens->pPenBlack);

      rectBorder.InflateRect(1, 1);
      pDC->MoveTo(rectBorder.right, rectBorder.top);
      pDC->LineTo(rectBorder.right, rectBorder.bottom+1);
      pDC->MoveTo(rectBorder.left, rectBorder.bottom);
      pDC->LineTo(rectBorder.right, rectBorder.bottom);

      pDC->SelectObject(p3DPens->pPenDarkGray);

      rectBorder.DeflateRect(1, 1);
      pDC->MoveTo(rectBorder.right, rectBorder.top);
      pDC->LineTo(rectBorder.right, rectBorder.bottom+1);
      pDC->MoveTo(rectBorder.left, rectBorder.bottom);
      pDC->LineTo(rectBorder.right, rectBorder.bottom);

      pDC->SelectObject(pOldPen);
   }

   return 2;
}



void GfxDrawBorder(CDC *pDC, CRect rectBorder, 
                   CPen *pPen)
{
   CPen *pOldPen = NULL;
   if(pPen)
      pOldPen = pDC->SelectObject(pPen);

   pDC->MoveTo(rectBorder.left, rectBorder.top);
   pDC->LineTo(rectBorder.right-1, rectBorder.top);
   pDC->LineTo(rectBorder.right-1, rectBorder.bottom-1);
   pDC->LineTo(rectBorder.left, rectBorder.bottom-1);
   pDC->LineTo(rectBorder.left, rectBorder.top);

   if(pOldPen)
      pDC->SelectObject(pOldPen);
}


void GfxDrawBorder(CDC *pDC, CRect rectBorder, 
                   COLORREF clFill, CPen *pPen)
{
   CPen *pOldPen = NULL;
   if(pPen)
      pOldPen = pDC->SelectObject(pPen);

   pDC->MoveTo(rectBorder.left, rectBorder.top);
   pDC->LineTo(rectBorder.right-1, rectBorder.top);
   pDC->LineTo(rectBorder.right-1, rectBorder.bottom-1);
   pDC->LineTo(rectBorder.left, rectBorder.bottom-1);
   pDC->LineTo(rectBorder.left, rectBorder.top);

   if(pOldPen)
      pDC->SelectObject(pOldPen);

   CBrush brush(clFill);
   rectBorder.DeflateRect(1,1);

   pDC->FillRect(rectBorder, &brush);
}



⌨️ 快捷键说明

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