Jiang Chuan 작가 Qi Gao와 함께 알람 기능을 위한 STATIC 클래스를 만드는 방법을 알아보세요.
소개 알람 제어는 다양한 산업용 제어 시스템에서 흔히 볼 수 있으며 텍스트로 표시하거나 그래픽으로 표시할 수 있습니다. 원리는 CDC 클래스 개체를 구성한 다음 제공되는 다양한 기본 요소를 사용하는 것입니다. 기본 속성을 사용하는 그래픽 여기서는 알람 텍스트를 표시할 수 있는 프로그램을 만들겠습니다. 알람이 발생하면 배경을 깜박여 해당 기능을 수행할 수 있습니다.
우리는 일반적으로 텍스트에서 이러한 유형의 처리를 구현하기 위해 파생된 메서드를 사용합니다.
먼저 VC 마법사를 사용하여 대화 상자 기반 프로젝트를 만듭니다.
그런 다음 대화 상자 인터페이스에 STATIC 컨트롤을 배치하고 위치를 설정합니다.
STATIC 컨트롤을 위해 CStaticRectangle이라는 CStatic 기반 클래스를 파생시키기 위한 기본 준비가 완료되었습니다. 다음 작업은 원하는 알람 화면 효과를 얻기 위해 새 파생 클래스에 콘텐츠를 추가하는 것입니다.
지난 기사에서 말한 내용에 따르면 이중 버퍼링 방법을 사용하여 MemDC.h, AutoFont.h 및 AutoFont.cpp 세 파일을 프로젝트에 추가해야 합니다. AutoFont 클래스는 CFont 클래스를 더 잘 캡슐화한 것입니다. 오늘날 인터넷에서는 CFont 객체를 생성할 때 복잡한 생성 API 기능을 고려할 필요가 없으며 몇 가지 간단한 매개변수 설정만 하면 기능을 완료할 수 있으므로 여기서는 이 클래스를 사용하여 알람 텍스트의 글꼴 제어를 구현합니다.
객체 정의
//실제 상황에 따라 색상의 정의를 늘리거나 줄일 수 있습니다.
#COLOR_RED RGB 정의(255,0,0)
#define COLOR_GREEN RGB(0,255,0)
보호됨:
CBitmap *m_pBitmapOldBackground;//이 세 가지는 이중 버퍼 그리기에 사용됩니다.
C비트맵 m_bitmapBackground;
CDC m_dcBackground;
CRect m_ectCtrl; // 제어 영역
짧은 nMillSec;
CAutoFont *m_pFnt; //알람 텍스트 글꼴 구성
공공의:
COLORREF m_BkColor;//배경색
COLORREF m_TextColor;//텍스트 색상
CString strText; //알람 텍스트 표시
BOOL bGleam;//점멸 여부
생성자에서 변수를 초기화합니다.
CStaticRectangle::CStaticRectangle()
{
m_BkColor = COLOR_RED;
m_TextColor = RGB(255,128,64);
nMillSec = 10;
b빛남 = 거짓;
m_pFnt = new CAutoFont("공식 스크립트");
m_pFnt->SetHeight(28);
m_pFnt->SetWidth(12);
m_pFnt->SetBold(TRUE);
}
메모리는 소멸자에서 해제됩니다.
CStaticRectangle::~CStaticRectangle()
{
if(m_pFnt)
m_pFnt 삭제;
}
STATIC 알람 기능을 그리려면 WM_PAINT 메시지를 매핑한 다음 인터페이스를 다시 그리고 텍스트를 표시하기만 하면 됩니다.
무효 CStaticRectangle::OnPaint()
{
CPaintDC dc(this) // 페인팅을 위한 장치 컨텍스트
// TODO: 여기에 메시지 처리기 코드를 추가하세요.
// 제어 영역을 가져옵니다.
GetClientRect(&m_ectCtrl);
CMemDC memDC(&dc, &m_ectCtrl);
if(m_dcBackground.GetSafeHdc()== NULL|| (m_bitmapBackground.m_hObject == NULL))
{
m_dcBackground.CreateCompatibleDC(&dc);
m_bitmapBackground.CreateCompatibleBitmap(&dc, m_lectCtrl.Width(), m_lectCtrl.Height()) ;
m_pBitmapOldBackground = m_dcBackground.SelectObject(&m_bitmapBackground);
}
DrawRectangleBackground(&m_dcBackground, m_ectCtrl);
memDC.BitBlt(0, 0, m_ectCtrl.Width(), m_lectCtrl.Height(),
&m_dcBackground, 0, 0, SRCCOPY);
// 메시지 그리기를 위해 CStatic::OnPaint()를 호출하지 마세요.
}
다음으로 관련 정보의 표시를 제어합니다. 여기서 주의해야 할 것은 텍스트 표시의 위치를 계산해야 합니다.
pDC->GetTextExtent();를 통해 텍스트의 CSize를 얻은 다음 컨트롤의 사각형을 사용하여 텍스트의 표시 위치를 얻을 수 있습니다.
여기서 사용한 방법은 중앙에 표시하는 것입니다.
void CStaticRectangle::DrawRectangleBackground(CDC *pDC, CRect &Rect)
{
CBrush BrushFill, *pBrushOld;
int nXSize,nYSize;
C크기 szText;
CFont *fOldFont;
nXSize = ret.Width();
nYSize = ret.Height();
BrushFill.DeleteObject();
BrushFill.CreateSolidBrush(m_BkColor);
pBrushOld = pDC->SelectObject(&brushFill);
pDC->사각형(직사각형);
pDC->SetBkColor(m_BkColor);
pDC->SetTextColor(m_TextColor);
fOldFont = (CFont *)pDC->SelectObject(m_pFnt);
szText = pDC->GetTextExtent(strText);
nXSize = (nXSize - szText.cx)/2;
nYSize = (nYSize - szText.cy)/2;
pDC->TextOut(nXSize,nYSize,strText);
pDC->SelectObject(pBrushOld);
pDC->SelectObject(&fOldFont);
BrushFill.DeleteObject();
}
알람 기능을 구현하려면 타이머 기능을 사용하여 정기적으로 배경색을 변경한 다음 디스플레이를 새로 고쳐야 합니다.
이제 기본 작업은 완료되었습니다. 다음으로 할 일은 사용자가 동적으로 수정할 수 있는 인터페이스를 제공하는 것입니다.
무효 CStaticRectangle::SetRectangleText(CString strVal)
{
this->strText = strVal;
}
void CStaticRectangle::SetBackColor(UINT nStyle)//배경색 설정
{
this->m_BkColor = nStyle;
}
void CStaticRectangle::SetBkGleam(BOOL bShow)
{
if(this->bGleam)
{
if(!b표시)
KillTimer(nMillSec);
}
또 다른
{
if(b표시)
SetTimer(nMillSec,750,NULL);
}
this->bGleam = bShow;
}
이제 함수형 클래스가 완성되었으므로 다음으로 해야 할 일은 인터페이스에서 CSTATIC과 연결하는 것입니다.
CLASSWIZARD를 통해 STATIC 컨트롤 관련 변수(컨트롤 유형)를 만든 다음 파생된 유형을 CStaticRectangle로 수정하고 깜박이는 효과를 설정하면 효과를 볼 수 있습니다.
확장하다