Jiang Chuan の著者 Qi Gao と一緒にアラーム機能の STATIC クラスの作成方法を学びましょう
はじめに アラーム制御はさまざまな産業用制御システムでよく見られ、テキストでマークしたりグラフィックで表現したりできるアラームの方法は数多くあります。その原理は、CDC クラス オブジェクトを構築し、提供されているさまざまな基本機能を使用することに他なりません。ここでは、アラームが発生したときに背景を点滅させるプログラムを作成します。
通常、この種の処理をテキストに実装するには、派生メソッドを使用します。
まず、VC ウィザードを使用してダイアログベースのプロジェクトを作成します。
次に、ダイアログ ボックス インターフェイスに STATIC コントロールを配置し、位置を設定します。
STATIC コントロールの CStaticRectangle という名前の CStatic ベースのクラスを派生するための基本的な準備が完了しました。次のタスクは、新しい派生クラスにコンテンツを追加して、目的のアラーム画面効果を実現することです。
前回の記事で述べたとおり、ダブル バッファリング方法を使用して、MemDC.h、AutoFont.h、および AutoFont.cpp の 3 つのファイルをプロジェクトに追加する必要があります。AutoFont クラスは、CFont クラスをより適切にカプセル化したものです。現在のインターネットでは、ユーザーは CFont オブジェクトを作成するときに複雑な作成 API 関数を考慮する必要はなく、いくつかの簡単なパラメーター設定を行うだけで機能を完了できるため、ここではこのクラスを使用してアラーム テキストのフォント コントロールを実装します。
オブジェクトの定義
//実際の状況に応じて色の定義を増減できます。
#define COLOR_RED RGB(255,0,0)
#define COLOR_GREEN RGB(0,255,0)
保護されています:
CBitmap *m_pBitmapOldBackground;//これら 3 つはダブル バッファー描画に使用されます
CBitmap m_bitmapBackground;
CDC m_dc背景;
CRect m_rectCtrl; // コントロール領域
短い 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;
bGleam = FALSE;
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 メッセージをマップし、インターフェイスを再描画してテキストを表示するだけです。
void CSticRectangle::OnPaint()
{
CPaintDC dc(this); // ペイント用のデバイスコンテキスト
// TODO: ここにメッセージ ハンドラー コードを追加します
// コントロール領域を取得します
GetClientRect (&m_rectCtrl);
CMemDC memDC(&dc, &m_rectCtrl);
if(m_dcBackground.GetSafeHdc()== NULL|| (m_bitmapBackground.m_hObject == NULL))
{
m_dcBackground.CreateCompatibilityDC(&dc);
m_bitmapBackground.CreateCompatibilityBitmap(&dc, m_rectCtrl.Width(), m_rectCtrl.Height()) ;
m_pBitmapOldBackground = m_dcBackground.SelectObject(&m_bitmapBackground);
}
DrawRectangleBackground(&m_dcBackground, m_rectCtrl);
memDC.BitBlt(0, 0, m_rectCtrl.Width(), m_rectCtrl.Height(),
&m_dcBackground、0、0、SRCCOPY);
// メッセージをペイントするために CStatic::OnPaint() を呼び出さないでください
}
次に、関連情報の表示を制御します。ここで注意する必要があるのは、テキストの表示位置です。
pDC->GetTextExtent(); を通じてテキストの CSize を取得し、コントロールの四角形を使用してテキストの表示位置を取得できます。
ここでは中央に表示する方法をとります。
void CStaticRectangle::DrawRectangleBackground(CDC *pDC, CRect &rect)
{
CBrush ブラシフィル、*pBrushOld;
int nXSize,nYSize;
CサイズszText;
CFont *fOldFont;
nXSize = 長方形幅();
nYSize = 長方形の高さ();
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();
}
アラーム機能を実装したい場合は、タイマー機能を使用して定期的に背景色を変更し、表示を更新する必要があります。
この時点で、基本的な作業は完了しました。次に行うことは、ユーザーが動的に変更できるインターフェースを提供することです。
void CSticRectangle::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 に変更して、点滅効果を設定すると、その効果を確認できます。
拡大する