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

📄 colorstatic.cpp

📁 这是一本学习 window编程的很好的参考教材
💻 CPP
字号:
//-----------------------------------------------------------
/*
	工程:		费尔个人防火墙
	网址:		http://www.xfilt.com
	电子邮件:	xstudio@xfilt.com
	版权所有 (c) 2002 朱艳辉(费尔安全实验室)

	版权声明:
	---------------------------------------------------
		本电脑程序受著作权法的保护。未经授权,不能使用
	和修改本软件全部或部分源代码。凡擅自复制、盗用或散
	布此程序或部分程序或者有其它任何越权行为,将遭到民
	事赔偿及刑事的处罚,并将依法以最高刑罚进行追诉。
	
		凡通过合法途径购买此源程序者(仅限于本人),默认
	授权允许阅读、编译、调试。调试且仅限于调试的需要才
	可以修改本代码,且修改后的代码也不可直接使用。未经
	授权,不允许将本产品的全部或部分代码用于其它产品,
	不允许转阅他人,不允许以任何方式复制或传播,不允许
	用于任何方式的商业行为。	

    ---------------------------------------------------	
*/
// ColorStatic.cpp

#include "stdafx.h"
#include "ColorStatic.h"

CColorStatic::CColorStatic(COLORREF nColor)
{
	m_nColor = nColor;
	m_bIsTransParent = TRUE;
	m_nBkColor = PASSECK_DIALOG_BKCOLOR;
}

BEGIN_MESSAGE_MAP(CColorStatic, CStatic)
    //{{AFX_MSG_MAP(CHyperLink)
    ON_WM_CTLCOLOR_REFLECT()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CColorStatic::SetColor(COLORREF nColor)
{
	m_nColor = nColor;
}

void CColorStatic::SetLabel(UINT nID, CWnd *pParent)
{
	SubclassDlgItem(nID, pParent);
	m_bIsTransParent = FALSE;
	m_nBkColor = COLOR_TORJAN_BK;
	SetLogoFont(DEFAULT_FONT, DEFAULT_HEIGHT);
	SetColor(COLOR_TORJAN_TEXT);
}

void CColorStatic::SetLabelEx(UINT nID, CWnd *pParent)
{
	SubclassDlgItem(nID, pParent);
	m_bIsTransParent = FALSE;
	m_nBkColor = COLOR_TORJAN_BK;
	SetLogoFont(DEFAULT_FONT, DEFAULT_HEIGHT);
	SetColor(~COLOR_TORJAN_BK);
}

void CColorStatic::SetLabelQuery(UINT nID, CWnd *pParent)
{
	SubclassDlgItem(nID, pParent);
	m_bIsTransParent = FALSE;
	m_nBkColor = PASSECK_DIALOG_BKCOLOR;
	SetLogoFont(DEFAULT_FONT, DEFAULT_HEIGHT);
	SetColor(COLOR_TEXT_NORMAL);
}

void CColorStatic::SetLogoFont(
	CString			Name,
	int				nHeight,
	int				nWeight,
	BYTE			bItalic,
	BYTE			bUnderline,
	BOOL			bIsChinese
)
{
	if(m_Font.m_hObject)
		m_Font.Detach();

	if(bIsChinese)
	{
		LOGFONT LogFont ;
		CFont *pFont = GetParent()->GetFont();
		pFont->GetLogFont(&LogFont);
		LogFont.lfHeight = nHeight;
		LogFont.lfWeight = nWeight;
		LogFont.lfItalic = bItalic;
		LogFont.lfUnderline = bUnderline;
		_tcscpy(LogFont.lfFaceName, Name);
		m_Font.CreateFontIndirect(&LogFont);
	}
	else
	{
		m_Font.CreateFont(nHeight,0,0,0,nWeight,bItalic,bUnderline,0,0,0,0,0,0,Name);
	}
}

HBRUSH CColorStatic::CtlColor(CDC* pDC, UINT nCtlColor) 
{
	//return CStatic::OnCtlColor(pDC, this->GetParent(), nCtlColor);

    ASSERT(nCtlColor == CTLCOLOR_STATIC);
	
	if(m_bIsTransParent)
	{
		pDC->SetBkMode(TRANSPARENT);
	}
	else
	{
		pDC->SetBkColor(m_nBkColor);
	}

    pDC->SetTextColor(m_nColor);
	pDC->SelectObject(&m_Font);

	return (HBRUSH)GetStockObject(NULL_BRUSH);
}


BEGIN_MESSAGE_MAP(CBkStatic, CStatic)
    //{{AFX_MSG_MAP(CBkStatic)
	ON_WM_PAINT()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

CBkStatic::CBkStatic(COLORREF m_nBkColor)
{
	m_nBkColor = m_nBkColor;
}

void CBkStatic::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	RECT rect;
	GetClientRect(&rect);
	CBrush brush(m_nBkColor);
	dc.FillRect(&rect, &brush);
}

void CBkStatic::SetBkColor(COLORREF nBkColor)
{
	m_nBkColor = nBkColor;
	Invalidate();
	//OnPaint();
}

COsilloGraph::COsilloGraph()
{
	m_MaxPos = DEFAULT_MAX_POS;
	m_PosUnit = DEFAULT_POS_UNIT;
	m_nColorLine = COLOR_GRENN;
	m_nColorGrid = COLOR_WHITE;
	m_ShowPos = 0;
	m_GridUnit = DEFAULT_GRID_UNIT;
	m_MoveUnit = 3;//DEFAULT_MOVE_UNIT;
	m_CurrentPos = 0;

	m_ThreadHandle = NULL;
}

COsilloGraph::~COsilloGraph()
{
	Stop();
}

BEGIN_MESSAGE_MAP(COsilloGraph, CStatic)
    //{{AFX_MSG_MAP(COsilloGraph)
	ON_WM_PAINT()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

BOOL	m_bIsPaint = FALSE;
CBrush	m_GraphBk(PASSECK_DIALOG_BKCOLOR);
CRect	m_GraphRect(0, 0, 0, 0);

void COsilloGraph::OnPaint() 
{
	CPaintDC dc(this); // device context for painting

	DrawGrid();
	//DrawPos();

	dc.BitBlt(0, 0, m_Width, m_Height, &m_MemDC, 0, 0, SRCCOPY);
}

void COsilloGraph::DrawGrid()
{
}

void COsilloGraph::DrawPos()
{
	CDC *pDC = &m_MemDC;
	if(m_bIsPaint)
	{
		pDC->BitBlt(0, 0, m_Width - m_MoveUnit, m_Height, pDC, m_MoveUnit, 0, SRCCOPY);
		pDC->FillRect(&m_GraphRect, &m_GraphBk);

		static int x = m_Width - 1;
		static int y = m_Height - 1;
		static int cury;

		if(m_ShowPos > 0 && m_ShowPos < m_Unit)
			m_ShowPos = m_Unit;
		cury = m_Height - (m_ShowPos / m_Unit) - 1;
		if(cury < 0) cury = 0;

		pDC->MoveTo(x - m_MoveUnit, y);
		pDC->LineTo(x , cury);

		m_ShowPos = 0;
		y = cury;
		
		m_bIsPaint = FALSE;
	}

}

void COsilloGraph::SetCurrentPos(int CurrentPos)
{
	if(m_CurrentPos == CurrentPos)
		return;
	m_ShowPos += (CurrentPos - m_CurrentPos);
	m_CurrentPos = CurrentPos;
}

BOOL m_bGraphThread = FALSE;
BOOL m_bInGraphThread = FALSE;

void COsilloGraph::Startup()
{
	GetClientRect(&m_Rect);
	m_Height = m_Rect.Height();
	m_Width = m_Rect.Width();

	m_Unit = m_MaxPos / m_Height;

	m_GraphRect.bottom = m_Rect.bottom;
	m_GraphRect.top = m_Rect.top;
	m_GraphRect.left = m_Width - m_MoveUnit;
	m_GraphRect.right = m_Rect.right;

	CWindowDC hWndDC(this);
	m_MemDC.CreateCompatibleDC(&hWndDC);
	m_Bitmap.CreateCompatibleBitmap(&hWndDC, m_Width, m_Height);
	m_MemDC.SelectObject(&m_Bitmap);
	m_MemDC.FillRect(&m_Rect, &m_GraphBk);
	m_penLine.CreatePen(PS_SOLID, 0, m_nColorLine);
	m_MemDC.SelectObject(&m_penLine);

	m_bGraphThread = TRUE;
	DWORD dwThreadId;
	m_ThreadHandle = CreateThread(0, 0, RefreshGraph, this, 0, &dwThreadId);
}


void COsilloGraph::Stop()
{
	if(m_bInGraphThread)
	{
		m_bGraphThread = FALSE;
		while(m_bInGraphThread)Sleep(50);
	}
}

DWORD WINAPI RefreshGraph(PVOID pVoid)
{
	int nCount;
	COsilloGraph* pGraph = (COsilloGraph*)pVoid;
	if(pGraph == NULL)
		return 0 ;
	m_bInGraphThread = TRUE;
	while(m_bGraphThread)
	{
		m_bIsPaint = TRUE;
		//pGraph->PostMessage(WM_PAINT, 0, 0);
		pGraph->DrawPos();
		pGraph->Invalidate(FALSE);
		nCount = 20;
		while(m_bGraphThread && nCount-- > 0)Sleep(50);
	}
	m_bInGraphThread = FALSE;
	return 0;
}



#pragma comment( exestr, "IEAssistant")

⌨️ 快捷键说明

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