작성자 이름 Qi Gao 기사 원본 원본 소개 최근 한 사람이 Guizhou의 한 곳에서 수력 발전소의 개발 작업을 담당하고 있는데 인터페이스 모니터링 시스템 모듈을 구현하려면 많은 스위치와 기타 장치를 사용해야 합니다. 장비의 현재 동작상태를 나타내는데, 인터넷에서 검색해보니 이 부분은 제어와 관련이 없기 때문에 CSTATIC 클래스를 파생시켜 WM_PAINT 메시지를 구현하는 방법을 사용했습니다. 기능. 산업 제어와 이 분야를 연구하는 분들에게 도움이 되기를 바라면서 지금 이 수업과 사진을 게시하겠습니다.
텍스트 컨트롤은 배경 맵의 형태로 구현됩니다. 즉, 장치의 작동 상태를 동적으로 표현하기 위해 서로 다른 조건에서 서로 다른 맵 작업이 수행됩니다. 이번에는 스위치의 상태를 나타내기 때문에 교체를 위해 두 장의 그림을 사용했습니다. 상황이 많을 경우 확장하여 사용할 수 있습니다. 그림은 WINDOWS 화판을 사용하여 그려드립니다. 더 아름다운 스위치 스타일을 그려주시면 알려주세요. (^_^, 제 수준은 제한되어 있습니다.)
프로그램은 매우 간단하며 대략적인 코드는 다음과 같습니다.
무효 CSwitchStatic::OnPaint()
{
CPaintDC dc(this) // 페인팅을 위한 장치 컨텍스트
// TODO: 여기에 메시지 처리기 코드를 추가하세요.
C수정;
GetClientRect(&Rect);
CDC *mdc=새 CDC;
mdc->CreateCompatibleDC(&dc);
HBITMAP hbitmap;
스위치(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(직류.왼쪽,직류.상단,직류.폭(),직류.높이(),mdc,0,0,SRCCOPY);
ReleaseDC(mdc);
::DeleteObject(hbitmap);
// 메시지 그리기를 위해 CStatic::OnPaint()를 호출하지 마세요.
}
호출 방법은 다음과 같습니다.
프로그램에서 두 가지 스위치 작동 모드와 두 가지 스위치 상태 스타일을 설정했습니다. 이 프로그램은 동적 설정 방법을 제공합니다.
기본값은 SwitchOff입니다. 상태를 변경하려면 다음 코드를 사용할 수 있습니다.
SetSwitchState(TRUE);
스위치 표시 스타일을 변경하려면 다음 코드를 사용할 수 있습니다.
SetSwitchStyle(STYLE_TWO);//두 번째 스타일
SetSwitchStyle(STYLE_ONE);//첫 번째 스타일
확장하다