著者名 Qi Gao 記事の出典 元の紹介 最近、ある人が貴州省のある場所の水力発電所の開発タスクを担当しました。インターフェイス監視システム モジュールを実装する際、多くのスイッチやその他のものを使用する必要があります。現在の機器の動作状態を表すのですが、ネットで調べたところ、この部分は制御を伴わないので、CSTATICクラスを派生してWM_PAINTメッセージをマッピングする方法で実装しました。産業制御とこの分野を研究している人たちの役に立つことを願って、このクラスと写真を投稿します。
テキスト コントロールは背景マップの形式で実装されます。つまり、さまざまな条件下でさまざまなマップ操作が実行され、デバイスの動作状態が動的に表現されます。今回はスイッチの状態を表すため、置き換えに 2 つの画像を使用しました。いろいろな場合に拡張して使用できます。この絵は私が WINDOWS 製図ボードを使って描いたものです。もし誰かがより美しいスイッチスタイルを描いたら教えてください (^_^、私のレベルは限られています)。
プログラムは非常に単純で、おおよそのコードは次のとおりです。
void CSwitchStatic::OnPaint()
{
CPaintDC dc(this); // ペイント用のデバイスコンテキスト
// TODO: ここにメッセージ ハンドラー コードを追加します
CRect;
GetClientRect(&rect);
CDC *mdc=新しい CDC;
mdc->互換DCの作成(&dc);
HBITMAP hビットマップ;
スイッチ(this->m_SystemMetric)
{
ケース STYLE_ONE:
if(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF));
それ以外
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON));
壊す;
ケース STYLE_TWO:
if(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF1));
それ以外
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON1));
壊す;
デフォルト:
if(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF));
それ以外
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON));
壊す;
}
mdc->SelectObject(hbitmap);
dc.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),mdc,0,0,SRCCOPY);
リリースDC(mdc);
::DeleteObject(hbitmap);
// メッセージをペイントするために CStatic::OnPaint() を呼び出さないでください
}
呼び出し方法は以下の通りです。
プログラムでは、2 つのスイッチ動作モードと 2 つのスイッチ ステータス スタイルをセットアップしました。このプログラムでは、動的な設定方法が提供されています。
デフォルトは SwitchOff です。状態を変更する場合は、次のコードを使用できます。
SetSwitchState(TRUE);
スイッチの表示スタイルを変更したい場合は、次のコードを使用できます。
SetSwitchStyle(STYLE_TWO);//2 番目のスタイル
SetSwitchStyle(STYLE_ONE);//最初のスタイル
拡大する