윈도우의 정의 / 구성요소 / 클래스 / 스타일 


1. 윈도우의 정의
2. 윈도우의 구성요소
3. 작업 영역이란 무엇인가 ?
4. 비작업 영역이란 무엇인가 ?
5. 윈도우 클래스란 무엇인가 ?
6. 윈도우 클래스의 종류
7. WNDCLASS 구조체
8. WNDCLASSEX 구조체
9. 윈도우 스타일
10. 확장 윈도우 스타일


1. 윈도우의 정의
-> 윈도우의 정의 : 프로그램이 출력 결과를 내보내고 사용자로부터 입력을 받아들이는 화면상의 사각영역


2. 윈도우의 구성요소

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지

3. 작업 영역이란 무엇인가 ?

-> 방금 예시한 첫번째 그림의 파란색 네모칸 안쪽은 작업 영역(Client Area)이다.
   작업 영역이란 출력을 내보내고 사용자에게 명령을 받아들이는 부분을 말하며
   이 부분이 주 프로그래밍 대상이다.
   프로그램은 일반적으로 작업 영역에만 출력을 할 수 있으며 작업 영역의 좌상단이
   원점인 (0, 0) 이 된다.

4. 비작업 영역이란 무엇인가 ?

-> 작업 영역 이외의 부분, 즉 메뉴, 타이틀 바, 경계선 등의 영역을
   비작업영역( Non Client Area ) 이라고 하며 이 부분은 운영체제가 대신 관리해주므로
   프로그램에서 특별히 신경써주지 않아도 된다.

5. 윈도우 클래스란 무엇인가 ?

-> 윈도우 클래스는 “WIN 32 API 기본틀”에서 간략하게 알아본적이 있다.
   이번에는 윈도우 클래스를 좀더 자세히 알아보기로 하자.

   윈도우 클래스(window class)는 윈도우를 만들기 위한 형틀이며 생성될 윈도우의 여러 가지 특징들을
   모아놓은 구조체를 말한다.

6. 윈도우 클래스의 종류

① 시스템 전역 클래스 (System global class)

-> 이것은 운영체제가 부팅될 때 등록되는 클래스이며 주로 컨트롤 윈도우를 만들 때 사용된다.
   button, edit, scrollbar, listbox 등이 그 예이며 클래스 이름이 시스템에 의해 미리 정해져 있다.
   운영체제가 직접 등록하기 때문에 응용 프로그램은 이 클래스를 등록할 필요가 없으며
   파괴할 수도 없다.

② 응용 프로그램 전역 클래스 (Application global class)
-> 이것은 주로 DLL에 의해 등록되며 프로세스의 모든 모듈에서 이 클래스를 사용할 수 있다.
   주로 여러 프로그램이 함께 공유해야 할 커스텀 컨트롤을 만들 때 사용된다.

③ 응용 프로그램 로컬 클래스 (Application local class)

-> 이것은 응용프로그램 자신이 메인 윈도우(또는 커스텀 윈도우)를 만들기 위해 프로그램 선두에서
   등록하는 클래스이며 프로그램 내부에서만 사용된다. 윈도우 클래스를 등록한 프로그램이
   종료되면 윈도우 클래스도 같이 파괴된다.
   WNDCLASS 의 구조체를 채워서 그것을 등록하고(RegisterClass) 그 클래스로부터 윈도우를
   만들어(CreateWindow) 사용하는 것은 모두 응용 프로그램 로컬 클래스를 이용한 것이다.

7. WNDCLASS 구조체

----> 이 구조체의 멤버의 특성에 대해서는 Win 32 API 의 기본틀을 분석할 때 알아보았다.

① lpszClassName
-> 등록하고자 하는 윈도우 클래스의 이름을 나타내는 문자열이며 윈도우 클래스의 구분에 사용된다.

② hInstance
-> 이 윈도우 클래스를 등록한 응용 프로그램의 인스턴스 핸들이다.
   메인 윈도우를 만들 때는 hInstance 또는 HInstance 인수를 그대로 대입해 주면 된다.

③ lpfnWndProc
-> 메시지 처리 함수를 지정한다. 이 클래스로부터 만들어진 윈도우에 메시지가 전달되면 이 멤버가
   지정하는 함수로 메시지가 전달되어 윈도우 고유의 처리를 하게 된다.
   이 멤버의 값은 메시지 처리 함수의 이름을 적어주면 된다. 이름은 아무렇게 해도 좋으며,
   메인 윈도우의 경우에는 WndProc 를 적는 것이 보통이다.

   <예> Test_WndClass.lpfnWndProc := @WndProc;

④ hCursor
-> 클래스 커서를 지정한다. 이는 LoadCursor 함수로 읽어들이는데,
   이 함수의 첫인자에 인스턴스 핸들을, 두번째 인자에 커서의 값을 대입해 주면 된다.
   두번째 인자는 리소스가 될수도 있고, 윈도우즈가 제공하는 디폴트 커서가 될수도 있다.
   다음은 윈도우즈가 제공하는 커서이다.

   - IDC_ARROW : 일반적으로 윈도우즈에서 사용하는 화살표 (일반적으로 사용함.)
   - IDC_CROSS : 십자모양의 커서
   - IDC_IBEAM : 영문자 I 자모양의 커서
   - IDC_NO : 동그라미에 대각선이 그어진 모양의 커서
   - IDC_WAIT : 모래시계 모양의 커서

⑤ hIcon
-> 윈도우 아이콘을 지정한다. 이는 LoadIcon 함수로 읽어들이는데,
   이 함수의 첫인자에 인스턴스 핸들을, 두번째 인자에 커서의 값을 대입해 주면 된다.
   두번째 인자는 리소스가 될수도 있고, 윈도우즈가 제공하는 디폴트 아이콘이 될수도 있다.
   디폴트 아이콘은 보통 IDI_APPLICATION 이 쓰인다.

⑥ hbrBackground
-> 윈도우의 작업영역을 칠한 배경 브러시를 지정한다. GetStockObject 나 그 외 브러시를
   만드는 함수를 사용하여 브러시 핸들을 얻은 후 핸들을 이 멤버에 대입해 주면 윈도우의
   배경을 칠할 때 이 브러시를 사용하게 된다.
   윈도우즈가 기본적으로 제공하는 브러시는 GetStockObject 함수를 사용하며,
   이 함수의 인자는 다음 중에서 쓰일 수 있다.

    - WHITE_BRUSH : 흰색
    - BLACK_BRUSH : 검정색
    - LTGRAY_BRUSH : 회색

⑦ lpszMenuName
-> 이 클래스로부터 만들어진 윈도우가 사용할 메뉴를 지정한다. 메뉴는 윈도우 클래스에서뿐만
   아니라 CreateWindow 함수에서 개별 윈도우를 만들 때도 지정할 수 있다.
   메뉴는 주로 리소스에서 불러와 사용된다.

⑧ cbClsExtra
-> 윈도우 클래스에서 사용하고자 하는 여분의 메모리 양을 바이트수로 지정한다.
   운영체제는 윈도우 클래스를 등록할 때 이 멤버가 지정하는만큼의 메모리를 추가로 할당해준다.
   여분의 메모리이므로 사용목적은 프로그램에서 정하기 나름이며 SetClassLong, GetClassLong 등의
   함수로 이 메모리를 사용한다. 여분의 메모리를 사용하지 않는 윈도우는 이 값을 0 으로 해줘야
   한다.

⑨ cbWndExtra
-> 기능은 cbClsExtra 와 유사하다. 단, cbClsExtra와는 달리 개별 윈도우에서 사용하고자 하는
   여분의 메모리 양을 지정한다는데 차이점이 있다.

⑩ style
-> 윈도우 클래스의 스타일을 지정한다. 이는 CreateWindow 에서 지정하는 개별 윈도우의
   스타일과는 다른 것으로서, 다음과 같은 스타일들이 있다.

   CS_HREDRAW : 작업영역의 폭이 변경되면 윈도우를 다시 그리도록 한다.
   CS_VREDRAW : 작업영역의 높이가 변경되면 윈도우를 다시 그리도록 한다.
   CS_DBLCLKS : 마우스 더블클릭 메시지를 보내도록 한다. 이 스타일을 지정하지 않으면
                더블클릭은 무시된다.
   CS_NOCLOSE : 시스템 메뉴의 닫기 명령을 사용하지 못하도록 한다.
   CS_BYTEALIGNWINDOW : 윈도우를 X축으로 바이트 정렬하도록 하여 이동이나 크기조정의
                        속도를 빠르게 한다.
   CS_BYTEALIGNCLIENT : 작업영역을 X축으로 바이트 정렬하도록 하여 이동이나 크기조정의
                        속도를 빠르게 한다.
   CS_CLASSDC : 이 클래스로부터 만들어진 모든 윈도우가 하나의 DC를 공유하도록 한다.
   CS_OWNDC : 각 윈도우가 하나의 DC를 독점적으로 사용하도록 한다.
   CS_PARENTDC : 차일드 윈도우가 부모 윈도우의 DC를 사용하도록 한다.
   CS_GLOBALCLASS : 응용 프로그램 전역 클래스로 등록한다.
   CS_SAVEBITS : 이 윈도우가 차지하는 화면 영역을 비트맵으로 저장하도록 한다.

8. WNDCLASSEX 구조체

-> 이 구조체는 기존의 WNDCLASS 멤버의 특성에 몇가지가 추가된 것이다.
   클래스 등록은 RegisterClassEx 함수가 사용된다.
   추가된 것은 cbSize 와 hIconSm 멤버이다.

① cbSize
-> 버전 확인을 위해 구조체의 크기를 대입해주는 멤버이다.

② hIconSm
-> 기존의 hIcon 이 32 * 32 크기의 큰 아이콘을 지정하는데 비해,
   hIconSm 은 16 * 16 크기의 작은 아이콘을 지정한다.

9. 윈도우 스타일
-> 윈도우 스타일을 대입하여 윈도우 창을 생성할 때는 CreateWindow 함수를 사용한다.
   다음은 윈도우 스타일을 나열한 것이다.

 // 윈도우 스타일 ;

 WS_OVERLAPPED : 디폴트 윈도우
 WS_POPUP : WS_CHILD 와 함께 쓸 수 없다.
 WS_CHILD : WS_POPUP 과 함께 쓸 수 없다.
 WS_VISIBLE : 윈도우를 만들자마자 화면에 출력
 WS_DISABLED
 WS_CAPTION
 WS_BORDER : 단선으로 된 경계선을 만들며 크기 조정은 할 수 없다.
 WS_SYSMENU
 WS_THICKFRAME
 WS_MINIMIZE
 WS_MAXIMIZE
 WS_MINIMIZEBOX
 WS_MAXIMIZEBOX
 WS_VSCROLL
 WS_HSCROLL

 ( WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICHFRAME |
    WS_MINIMIZEBOX | WS_MAXIMIZEBOX == WS_OVERLAPPEDWINDOW )

 ( WS_POPUP | WS_BORDER | WS_SYSMENU == WS_POPUPWINDOW )


 WS_CLIPSIBLINGS : 차일드끼리 상호 겹친 영역은 그리기영역에서 제외된다.
 WS_CLIPCHILDREN : 차일드가 위치한 영역은 그리기영역에서 제외된다.
 WS_DLGFRAME : 두꺼운 경계선을 가지며 타이틀바를 가질수 없다.
 WS_GROUP : 라디오버튼등 그룹을 이루는 컨트롤의 그룹지정에 사용
 WS_TABSTOP : Tab키로 포커스를 이동할 수 있도록 한다.

10. 확장 윈도우 스타일

-> 윈도우 스타일과는 별개로 확장 윈도우 스타일이 있다.
   윈도우 스타일을 대입하여 윈도우 창을 생성할 때는 CreateWindow 함수를 사용한다.
   윈도우 확장 스타일의 경우에는 CreateWindowEx 함수가 사용된다.
   다음은 확장 윈도우 스타일을 나열한 것이다.

 // 확장 윈도우 스타일 ;

 WS_EX_DLGMODALFRAME : 이중 경계선을 가진 윈도우를 만든다.
 WS_EX_NOPARENTNOTIFY : 생성되거나 파괴될 때 부모 윈도우에게
                 WM_PARENTNOTIFY 메시지를 보내지 않도록 한다.
 WS_EX_TOPMOST : 모든윈도우보다 수직적으로 위에 있는 윈도우를 만든다.
 WS_EX_ACCEPTFILES : 드래그되는 파일을 받을 수 있다.
 WS_EX_TRANSPARENT : 형제 윈도우가 다 그려지기 전에 그려지지 않아 투명하게 보이는
                            윈도우를 만든다.
 WS_EX_MDICHILD : MDI 차일드 윈도우를 만든다.
 WS_EX_TOOLWINDOW : 플로팅 툴바 형식의 윈도우를 만든다.
 WS_EX_WINDOWEDGE : 양각 모양의 경계선을 가진 윈도우를 만든다.
 WS_EX_CLIENTEDGE : 작업영역이 쑥 들어간 음각 모양으로 만든다.
 WS_EX_CONTEXTHELP : ? 모양의 도움말 버튼 표시
 WS_EX_LAYERED : 2000에서 추가된 속성이며 레이어드 윈도우를 생성한다.
 WS_EX_CONTROLPARENT : TAB키로 차일드 사이를 전환할 수 있도록 한다.
 WS_EX_STATICEDGE : 사용자의 입력을 받아들이지 않는다는 의미의 삼차원 장식을 한다.
 WS_EX_APPWINDOW : 윈도우가 보일때 강제로 태스크바 위에 있도록 한다.
 WS_EX_OVERLAPPEDWINDOW : (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE)
 WS_EX_PALETTEWINDOW : (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST)

출처 : http://blog.naver.com/kirin9?Redirect=Log&logNo=140037804816

'Information' 카테고리의 다른 글

Musicovery (자기에게 어울리는 음악 찾기?)  (1) 2008.01.11
Chris Tomlin, Lincoln Brewster 벨소리  (0) 2007.11.05
오버 클럭 테스트 완료  (1) 2007.10.27
네이트온 메모짱  (0) 2007.10.24
Java 란??  (0) 2007.10.24
사용자 삽입 이미지


컴퓨터 구입 한지도 엄청 오래(3달??) 되었고

오버 클럭도 2.66 기가(1.8@2.66)로 사용한 지 오래 되었다.

사실 2.7기가가 찍히긴 하는데 내장 그래픽 성능 향상을 위해

HT Link 값을 높이기 위해서 2.66으로 사용 해왔다.

그러나...

그래픽 카드를 어제 구입 하였기에 세팅을 조금 변경해서

2.7기가 성공.

이 때까지 4시간 정도만 프라임 테스트 했었는데

어젠 테스트 도중에 잠 들어서 제대로(?) 테스트를 하게 되었다.

7시간 이상 정상 동작 ^^;

사용자 삽입 이미지
사용자 삽입 이미지

'Information' 카테고리의 다른 글

Chris Tomlin, Lincoln Brewster 벨소리  (0) 2007.11.05
Win API 개념  (2) 2007.10.29
네이트온 메모짱  (0) 2007.10.24
Java 란??  (0) 2007.10.24
Ben Gowell  (0) 2007.09.21
사용자 삽입 이미지

프로젝트에 돌입하고 나니 이런 저런 메모 할 것도 많고 일정

정해야 할 일도 많아서 일정 & 메모 프로그램 알아 보다가

네이트온 메모짱을 사용해 봤다.

네이트온이 메신져 시장에 대세인 지금 간단하게 설치 가능하고

집이든 밖이든 공유가 된다는 사실이 참 맘에 들었다.

현재로써는 매우 만족 ^_^;;

'Information' 카테고리의 다른 글

Win API 개념  (2) 2007.10.29
오버 클럭 테스트 완료  (1) 2007.10.27
Java 란??  (0) 2007.10.24
Ben Gowell  (0) 2007.09.21
U1010 후지쯔 UMPC 2 Generation  (0) 2007.06.16
사용자 삽입 이미지



자바란?


자바(Java)를 이야기할 때 크게 두 가지로 나누어 이야기 할 수 있습니다. 먼저, 기계어, 어셈블리어(Assembly), 포트란(FORTRAN), 코볼(COBOL), 파스칼(PASCAL), 또는 C 등과 같이 프로그래밍을 하기 위해 사용하는 자바 언어가 있고, 다른 하나는 자바 언어를 이용하여 프로그래밍 하기 위해 사용할 수 있는 자바 API(Application Programming Interface)와 자바 프로그램을 실행시켜 주기 위한 자바 가상머신(Java Virtual Machine) 등을 가리키는 자바 플랫폼(Platform)이 있습니다. 다시 말해서, 자바 언어는 Visual C++와 비유될 수 있고, 자바 플랫폼은 윈도우 95/98/NT 및 윈도우 95/98/NT API와 비유될 수 있습니다.


자바 언어(Java Language)를 이용하여 작성한 자바 프로그램(Java Program)은 자바 컴파일러(Java Compiler)를 이용하여 자바 바이트코드(Java Byte code)로 컴파일 되고, 이 자바 바이트코드는 자바 가상머신에 의해 해석되어 실행되는데, 이때 자바 가상머신은 자바 바이트코드에 대한 해석기 즉 인터프리터(interpreter)로 동작하게 됩니다. 이렇게 자바 프로그램은 컴파일 방식 및 인터프리터 방식이 모두 적용된다는 것입니다.

자바 컴파일러(Java Compiler):
자바 언어로 작성된 자바 프로그램을 중간 언어(intermediate language) 형태인 자바 바이트코드로 컴파일 합니다.
 
자바 바이트코드(Java Byte code):
컴퓨터는 각 CPU에 따라 서로 다른 기계어를 갖습니다. 이러한 이유 때문에 도스 또는 윈도우 95/98/NT 등이 설치되어 있는 컴퓨터에서 실행되는 프로그램이 유닉스가 설치되어 있는 컴퓨터에서는 실행되지 않는 것입니다. 그러나, 자바 바이트코드는 이러한 플랫폼에 상관없이 자바 가상머신에 의해 실행될 수 있도록 정의된 중간코드입니다. 따라서, 자바 바이트코드로 컴파일 되기만 하면, 자바 인터프리터인 자바 가상머신이 설치되어 있는 곳이면 어디에서든 실행시켜 줄 수 있습니다. 이는 자바 개발자 또는 사용자로 하여금 자바 프로그램을 개발하거나 사용할 때 그 플랫폼이 윈도우 95/98/NT, 유닉스, 또는 매킨토시인지 전혀 신경 쓰지 않아도 되도록 합니다.

자바 인터프리터(Java Interpreter) 또는 자바 가상머신(Java Virtual Machine):
자바 바이트코드 명령어를 해석하고, 이를 자바 인터프리터가 설치되어 있는 플랫폼(윈도우 95/98/NT, 유닉스, 매킨토시 등)에 맞게 실행시켜 줍니다. 자바 인터프리터는 자바 바이트코드를 실행시켜 주기 위한 기능을 명세하고 있는 자바 가상머신을 구현해 놓은 것으로서 자바 가상머신과 같은 의미로 사용되며, 주로 자바 가상머신으로 많이 사용됩니다.

자바 바이트코드는 자바 가상머신에서 실행되는 기계어라고 생각하면 됩니다. 그리고, 모든 자바 인터프리터는 자바 가상머신을 구현해 놓은 것으로, 자바 가상머신과 자바 인터프리터를 같은 것으로 생각할 수 있습니다. . 이러한 자바 가상머신은 JDK(Java Development Kit)에 포함되어 있을 수도 있고, 자바 호환 웹 브라우저 내에 내장되어 있을 수도 있습니다. 또는, 자바 칩과 같이 하드웨어에 직접 구현될 수도 있습니다. 자바 바이트코드는 “write once, run anywhere”라는 말을 가능하게 해 줍니다. 다시 말해서, 자바 언어를 이용하여 작성한 자바 프로그램을 각 플랫폼(윈도우 95/98/NT, 리눅스, 유닉스, 매킨토시 등)에 맞게 제공되는 자바 컴파일러를 통해서 바이트코드로 컴파일 할 수 있습니다. 그리고, 이 바이트코드는 자바 가상머신이 있는 어떤 곳에서도 실행될 수 있습니다.


플랫폼 독립적인 자바

플랫폼이란 프로그램이 실행되는 하드웨어 또는 운영체제와 같은 소프트웨어적인 환경을 말합니다. 대부분의 플랫폼은 하드웨어와 운영체제를 함께 일컬어 말합니다. 그러나 자바 플랫폼은 하드웨어와 무관하게 동작하는 오직 소프트웨어적인 플랫폼이란 점에서 다른 플랫폼과 다릅니다. 이를 위해 자바 플랫폼은 다음과 같은 두 가지의 구성요소를 갖습니다.

자바 가상머신(Java Virtual Machine; Java VM):
자바 가상머신은 자바 플랫폼의기반을 이루며, 다양한 하드웨어기반 플랫폼에 포팅(poring) 됩니다. 다시 말해서, 자바 가상머신은 윈도우 95/98/NT, 유닉스, 또는 매킨토시 등과 같은 기존의 운영체제 또는 인터넷 익스플로러와 넷스케이프 등과 같은 웹 브라우저 등, 여러 가지 플랫폼에 설치되어 사용될 수 있으며, 사용자는 자바 바이트코드로 컴파일된 자바 프로그램을 실행시키기 위해서 이 자바 가상머신을 이용하면 됩니다.

자바 API(Java Application Programming Interface):
자바 API는 윈도우 API와 같이 운영체제에서 제공해 주는 라이브러리와 같은 것입니다. 다시 말해서, 자바 프로그램을 개발하기 위해 사용할 수 있는 라이브러리 또는 클래스들이라 할 수 있습니다. 이러한 자바 API는 서로 관련된 클래스들을 묶어서 패키지 단위로 제공되고 있습니다.

'Information' 카테고리의 다른 글

오버 클럭 테스트 완료  (1) 2007.10.27
네이트온 메모짱  (0) 2007.10.24
Ben Gowell  (0) 2007.09.21
U1010 후지쯔 UMPC 2 Generation  (0) 2007.06.16
Ubuntu에서 와이드 사용하기  (2) 2007.06.02

사용자 삽입 이미지


요술망토 허재~~

후드 뒤집어 쓰는 걸 좋아라 합니다.

가려야 세계에 평화를 가져다 줄 수 있기 때문이라죠 =_=a

이제 곧 저녁 시간 ... 밥 나와라 뿅~~

'Pictures of My Life > 일상' 카테고리의 다른 글

발로 치는 기타  (2) 2007.12.21
교회 사람들...  (0) 2007.12.11
경배와 찬양, 영도 연합 기도회 사진 몇장  (0) 2007.09.27
오늘 학교 갔다 오면서 폰카로 ...  (0) 2007.01.04
소심한 나  (1) 2006.12.23



외모가 나랑 닮은 재즈 기타리스트 -_-;;;;

연주가 참 괜찮은거 같다 ㅎㅎ

'Music > Pop & etc' 카테고리의 다른 글

Power of Love - Sohyang  (0) 2009.01.24
천상지희 선데이 ...  (0) 2008.01.29
Eva Cassidy - Autumn Leaves  (0) 2007.10.22
EBS 공감, 드렁큰 타이거  (0) 2007.10.15
코다쿠미 - 큐티하니  (2) 2006.12.23
 



사용자 삽입 이미지

소연이 때문에 알게 된 가수

Eva Cassidy

고음이 강조되어 있고 맑으면서도 힘이 있는 목소리의 소유자

정말 이 분의 노래를 듣고 있으면 소름이 돋는다.


'Music > Pop & etc' 카테고리의 다른 글

천상지희 선데이 ...  (0) 2008.01.29
임현기 - 내 친구 개구장이  (0) 2007.10.23
EBS 공감, 드렁큰 타이거  (0) 2007.10.15
코다쿠미 - 큐티하니  (2) 2006.12.23
Mariah Carey & Westlife - Against All Odds  (0) 2006.10.30


간단하게 코드와 음표, 가사로 구성 된 집에서 띵가 띵가 할 수 있는 악보여요.

'Lecture > Music' 카테고리의 다른 글

Joyful Sounds 2007  (0) 2007.10.31
Once OST 중 'Falling Slowly' 타브 악보  (1) 2007.10.30
Ben Gowell Lesson  (0) 2007.10.14
이정선 기타 레슨  (0) 2007.09.28
쓰리 핑거 레슨  (0) 2007.08.11

+ Recent posts