창조유저그룹-커즈닷컴
Window close
ID :     PASS :   
   
  처음으로
  창조
  창조 소개
창조 다운로드
CUGz.com 소개
온라인 도움말
  커뮤니티
  가입인사
자유게시판
Q/A게시판 (1/0)
TIP/TECH
열린강좌
자주하는질문
아이디어게시판
  자료실
  소스자료실
프로그램자료실
기타자료실
명예의 전당
이미지 자료실
  지원/기타
  표준용어재정
구글 웹서치  
관리자 전용


창조 팁
- '창조' 에 관한 팁을 올리는 곳입니다. 다수의 이미지가 필요하시면 아래 '이미지 자료실' 에 업로드 후 불러와 주세요..


LIST ALL
Posted by 지상현2005-11-13 12:28:10, Hit : 4810
[re] 나른한 일요일 오후에의 잡설
Homepage : http://ssidang.x-y.net
Post URL : http://cugz.sjworks.net/bbs/zboard.php?id=tip&no=251
간만의 좋은 팁 감사합니다.
그런데, 제가 어찌나 참견을 좋아하는지 한 마디 더 적어보도록 하겠습니다. -_-


먼저, 윈도우즈는 메시지 드리븐 방식이라는 말을 어디선가 들어보신 분들이 계실겁니다.
윈도우는 메시지라는 것을 주고 받으며 동작합니다.
사건(이벤트)라는 것도 있죠. 이런 것은 메시지의 부분 집합입니다. 다시 말해, 중요한 몇 가지 메시지를 이벤트로 만들어 둔 것이죠.

여하튼... 이러한 메시지는 정말로 윈도우 시스템 전반을 가지고 놀 수 있습니다.
이렇게 하라고 메시지를 보내면, 이렇게 하기 때문이죠.(일반적인 경우... 꼭 그렇다고 할 순 없지만)

그리고 메시지는 시스템 메시지 큐 라는 곳에, 자동으로 발생하는 모든 메시지가 들어갑니다.
예를 들어, 하드웨어로부터 들어오는 메시지... 키보드 상태가 변했다, 마우스가 움직였다 같은.
또, 각각의 프로그램은 자신만의 메시지 큐를 가지고 있습니다(쓰레드마다 하나씩). 시스템은 시스템 메시지 큐에서 메시지를 하나 꺼내서, 이걸 누구에게 주나 고민하다가 적당한 놈에게 주는 겁니다.

그래서, 내 프로그램 위에서 마우스를 움직이면 내 프로그램의 창에서 마우스 움직임 메시지를 받게 됩니다. 창조에서는 그 것을 이벤트로 제공하고 있습니다.

여기까지가 윈도우 메시지 드리븐 방식의 수박 겉핥기식의 설명이었습니다 -_-;



중요한 것은... 메시지는 (제 마음대로) 크게 두 종류로 나눌 수 있다는 겁니다.

먼저, 통보 메시지란 것이 있습니다. 통보 메시지란 그저 어떤 사건을 알려주는 역할로...
위의 예에서처럼 마우스가 움직였다...같은 것이 있습니다.

또 하나는, 인위적으로 만들어진 메시지가 있지요.
예를 들면, 창을 닫을 때 창이 닫힌다고 메시지가 날아옵니다. 어? 창이 닫힐 때 닫힌다고 통보해주는 메시지가 아닌가요?

사실 X 버튼을 눌러 창을 닫는 동작은 마우스 메시지만으로 해결할 수 있습니다.
먼저 마우스 버튼이 눌릴 때, X 버튼이 있는 영역인지 검사하여 클릭되었다면 창 닫기 버튼이 눌렸다는 메시지를 날립니다. 그리고 창의 기본 동작(바꿀 수도 있음을 의미합니다)은 창을 닫아버리는 거지요.
닫을 때 인가 하는 사건에서 창을 닫지 않게 할 수 있음을 아실겁니다.



자... 그럼 이 두 종류의 메시지는 뭐가 다를까요?
바로 진짜로 발생한 사건과 가짜로 발생한 사건이라는 뜻이지요 -_-;
간단히 마우스의 예로만 들겠습니다.
마우스 왼쪽 버튼을 누르면 "마우스 왼쪽 버튼 눌림" 이라는 메시지가 발생합니다.
오른쪽 버튼을 누르면 "마우스 오른쪽 버튼 눌림" 메시지가 발생합니다.
떼면, 뗐다고 발생하겠죠.
실제로 이 4가지의 메시지가 전부입니다(문제를 단순화해서 생각하는 중입니다...).

실제로, 마우스는 클릭했다, 더블 클릭했다 라는 메시지를 만들어주지 않습니다.
그럼 그런 메시지가 어떻게 들어오는 걸까요?
바로 범인은 윈도우입니다.

C로 창을 띄우는 프로그램을 보신 적이 있는 분이라면 아시겠지만, 창을 가진 모든 프로그램은 무한 루프 하나씩을 가지고 있습니다. 그러나 메시지가 들어왔을때만 동작하고, 나머지는 메시지가 들어올때까지 무한정 대기하기 때문에 CPU 사용률이 거의 0입니다.
(메시지 발생 회수는 제한이 있습니다.)
여튼, 이런 것을 메시지 루프라고 하며, 모든 창을 사용하는 프로그램이 가지고 있습니다.
창조에는 없다구요? 창조가 내부적으로만 동작하고 숨겨두는 것이지요.

이러한 메시지 루프에서 메시지를 처리하게 되는데, 이 때 메시지를 그냥 두지 않고 일종의 조작을 거칩니다.

예를 들면, 전에 마우스 왼쪽 버튼이 눌렸는데 지금 왼쪽 버튼이 떼졌다면, 이 것은 클릭 메시지로 새로 메시지를 만든다.
저번에 클릭했는데 일정 시간(제어판 설정을 따름) 뒤에 또 클릭이 들어왔으면 더블 클릭 메시지로 메시지를 만든다.

이런 식입니다.




슬슬 결론을 내려보겠습니다 -_-;

기본적인 입력 장치, 그러니까 글판과 마우스에서 발생하는 메시지는 실제로 몇 개 안됩니다.
극도로 단순화 시켜서, 마우스의 경우 왼쪽, 오른쪽, 가운데 버튼이 눌렸다 뗐다 이렇게 6개 + 휠 버튼이 스크롤 됐다 1개... 7개 정도 있습니다.
글판은 더 쉽지요. 어느 키가 눌렸다 뗐다 2개 뿐입니다.(이 경우 A 키가 눌렸다, B 키가 눌렸다 같은 메시지가 따로 있는 것은 아니죠. 개수가 너무 많으니 -_-; 다만 마우스는 모든 키에 대해 따로 따로 있습니다.)

그러나, 저런 기초적인 메시지만 받고는 프로그램을 짜기가 쉽지 않겠죠?
더블 클릭이라는 동작만 봐도, 모든 프로그램이 똑같은 부분을 항상 새로 짤 순 없겠죠.
바로 이런 경우 운영체제가 지원해주는 거고, 실제로 지원해주고 있습니다.

운영체제에 의해 만들어지는 메시지는, 클릭, 더블 클릭, 드래그, 글판에서 문자를 눌림(영어나 한글... 한글은 더 특별합니다. 한글 조합 상태에 대한 메시지도 들어오거든요...).... 그리고 "창"과 관련된 모든 메시지가 그러한 것입니다.

어찌보면 우리는 속고 있다는 거죠. 실제로 발생하지 않은 일을, 여러 상황을 조합해서 한번 더 알려주는 것일 뿐입니다.(그렇지만 그로 인해 발생하는 생산성이 낭비를 훨씬 능가합니다.)



왜 이런 글을 쓰냐 하면,

1. 일요일 오후에 할 짓이 없어서
2. 윈도우 내부도 사실 알고보면 복잡하면서도 재미있다는 사실을 알려주고 싶어서
3. 당연하게 알고, 쓰고 있는 사실도 어쩌면 거짓일 수도 있다는 것
4. 우리가 노는 사이 윈도우는 항상 열심히 일한다는 것
5. 윈도우를 더 잘 이해하면 윈도우 프로그램을 더 잘 만들 수 있기 때문에

...라는 거창한 이유 때문이니 너그럽게 봐주시기 바랍니다.

qkrwhdgns   2005-11-13 PM 4:10:01  
[ 4. 우리가 노는 사이 윈도우는 항상 열심히 일한다는 것 ]
윈도우가.. 열심히 일하다가.. 지쳐서.. 오류를 내보내는 것은 아닐지;;;;;;;;
LIST ALL               GO TO THE TOP


N
   Subject
Posted by
Date
H
192
     [+] 비슷한 오류(?) 하나더... [7]
이희창(빙고) 2006/02/25  5370
191
   Filetr32.dll 를 이용해서 FTP 파일 다운로드&업로드 할때... [6]
이희창(빙고) 2006/02/19  5479
190
   VB - 창조 명령어 비교(?) [2]
박종훈 2006/02/15  7871
189
   WinAPI 레퍼런스 창조로 쓸수있는것들? [4]
박재성[날개달기] 2006/02/11  5150
188
   [편한 Tip^^] 객체 위치 조정 [4]
박종훈 2006/02/11  4507
187
   & 입력하기 -_-+ [7]
박종훈 2006/02/05  4486
186
   창조에서 창없이 사용하기(?) [10]
박종훈 2006/01/30  5119
185
   "문을실수" 함수 완성! [10]
지상현 2006/01/15  5237
184
   [버그보고] "문을수" 함수 버그... [8]
지상현 2006/01/14  5584
183
   멀티버튼의 그림분할 속성... [5]
qkrwhdgns 2005/12/20  4501
182
   창조파일 연결 바꾸기.. / 창조 nhpro.ini 파일 요리하기?? [6]
qkrwhdgns 2005/12/11  5289
181
   팝업메뉴-표시... [4]
qkrwhdgns 2005/11/27  4928
180
   XP 루나 어쩔수 없다..;; [15]
qkrwhdgns 2005/11/26  4993
179
     [re] 그룹박스는 밑판+이름표(밑판)?;; [2]
박종훈 2006/01/13  4118
178
   1145 번째의 비밀(?);; [2]
qkrwhdgns 2005/11/21  5563
177
     [re] 1145 번째의 비밀(?);; [2]
최재일 2005/11/21  4643
176
   마우스/키보드 누를때,눌렀을때.. 속도(?) [1]
qkrwhdgns 2005/11/13  5604

     [re] 나른한 일요일 오후에의 잡설 [1]
지상현 2005/11/13  4810
174
   확실한 시스템/윈도우/임시 폴더 알아오기 [6]
지상현 2005/10/28  6312
173
   창조에서 음수를 사용할 때 주의하자! [1]
지상현 2005/10/08  6813
172
   창조 도움말이 뻥을 쳤다! [5]
지상현 2005/10/08  5313
171
   [팁#3] 파일에 정수값 쓰기, 또 다른 방법!
지상현 2005/10/05  5537
170
   [팁#2] 파일에서 정수값 읽기!
지상현 2005/10/05  5748
169
   [팁] 파일에 정수값 쓰기
지상현 2005/10/05  5489
168
   팁입니다 ㅡ,ㅡ;; 확장자없는 미디어 사용하기 ㅡㅡ; [1]
만물 2005/10/04  6152
LIST ALL   Prev [1][2][3][4][5][6] 7 [8][9][10]..[14] Next
Copyright 1999-2024 Zeroboard / skin by reedyfox in miniwini style
로그인
지우개 Expert 3.0
제작자 : 천호성 님 [LINK]
로그인
대박로또2005
제작자 : 최재일 님 [LINK]
로그인
1박종훈15292 점
2지상현8809 점
3손상진7388 점
4권선중6060 점
5이진백5174 점
로그인
가입일닉네임
05/31김동률
03/31홍형기
09/01o00pp99oo
12/27이재민
11/20이희철
로그인