2011년9월22일_winAPI_Label과 비슷한 static컨트롤
WLW2010의 글꼴 대화상자를 보면 “글꼴(F):”, “글꼴 스타일(Y):”, “크기(S):”, “색상(C):” 문자열이 보인다.
이들 문자열이 바로 스태틱(static)컨트롤로 주로 다른 컨트롤의 용도를 설명하기 위해 근처에 배치하여 사용한다.
VS2005에서는 Label이라고 부르고 거의 비슷하다.
CreateWindow(TEXT("static"), // 윈도우 클래스 = static = 텍스트 |
windows API정복 page.222 예제: Static의 소스코드 중 핵심코드만 설명하였다.
단순히 문자열을 출력하는 컨트롤인데 TextOut()와 뭐가 다른가?
TextOut()는 화면에 출력한 문자열이 그냥 문자열일 뿐이므로 언제든지 지워질 수 있고 그래서 WM_PAINT메시지 처리 코드에서,
저장된 문자열을 계속 출력하여 복구시켜야 한다.
반면 스태틱 컨트롤은 스스로 메시지를 처리할 수 있는 윈도우이기 때문에 일단 배치해 놓기만 하면 더 이상 신경 쓰지 않아도 된다.
또한 색상, 글꼴 크기 등 운영체제의 세팅이 바뀔 경우 이런 변화에 대해서도 스스로 대처한다는 장점이 있다.
(컨트롤 == 윈도우)
★ 컨트롤을 잘 다루기 위해서 필요한 컨트롤의 3요소
① 스타일
② 통지메세지
③ 부모 윈도우가 보내는 메세지
(왠지 중요해 보여서 적어 놓음;;;)
● 전체소스코드 중 메시지처리 함수들만 미리보기
1: LPCTSTR lpszClass = TEXT("MyStatic"); 2: WndClass.lpszClassName = lpszClass;
|
WinMain()내부…윈도우클래스 구조체를 정의하는 부분에서 클래스의 이름을 “Static”으로 정하니,
아무리 실행해도 컨트롤이 보이지 않았다. (스태틱이외의 어떤 컨트롤도..)
한 30분 동안 코드에 이상이 없나 살펴보아도 없자...
클래스명이 의심스러워 책소스CD를 보니 “MyStatic”이라고 되어 있지 않은가!!
그래서 이름을 바꿔 보니 컨트롤이 화면에 제대로 표시되었다.
대소문자 구분 안하는가 보다!!