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


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


LIST ALL
Posted by 지상현2005-11-13 12:28:10, Hit : 4826
[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
342
   [창조 V1.1a 16p] DB관련 명령어 중 도움말 없는 명령어와 숨...
바람 2023/02/03  307
341
   창조에도 goto문이 존재했었습니다.
바람 2018/01/05  2506
340
   메뉴제목 깔끔하게 사용하기
바람 2018/01/05  2287
339
   [창조 1.0] 팝업메뉴 사용 시 '제어'와 '보이기' 사용
바람 2018/01/05  2574
338
   [창조 1.0] 0.9b 대비 반복문 속도 향상.
바람 2018/01/05  2229
337
   [창조 1.0] '폴더선택창보여'와 '폴더선택창보여줘'의 차이.
바람 2018/01/05  2488
336
   [창조 1.0] 'ㅎ메모'의 '문자찾아'
바람 2018/01/05  2556
335
   관리자 권한이 포함 된 manifest
바람 2018/01/05  2196
334
   여러개의 DLL 사용 시 사용자함수 충돌 피하기
바람 2017/11/21  2208
333
   32비트 프로그램으로 64비트 윈도우의 'Redirection' 폴더 제...
바람 2017/10/18  2470
332
   '끝내' 쓸 때 유의할 점
성인e 2015/09/09  3072
331
   shr, 소반올림, bAND, % 시간 비교
성인e 2013/07/25  4531
330
   곱하기 버그 [2]
성인e 2013/07/07  5515
329
   작업 중 필요해서 만든 문자열내에서 서열 위치찾기 함수.
바람 2012/12/08  4030
328
     [re] 작업 중 필요해서 만든 문자열내에서 서열 위치찾기 함수.
바람 2017/10/18  2157
327
   'ㅎ메모' 문자찾아 최종.
바람 2012/11/11  5037
326
   "ㅎ리스트박스" 다중선택 처리
지상현 2012/01/26  5313
325
   배경을 다룰 때 유의할 점.
바람 2012/01/10  5507
324
   사용자함수 버그 관련 나름 사용중인 해법.
바람 2012/01/10  4708
323
   '사용자함수' 불러올 때 버그
지상현 2012/01/04  4441
322
   'ㅎ메모'의 문자찾아 속도 비교 2탄.[2011.12.20 12:45 내용... [1]
바람 2011/12/20  4625
321
     [re] 마지막 부분에서 속도 느려짐 해결.
바람 2012/01/10  4423
320
     문자함수 사용하는 방법 추가 [1]
지상현 2011/12/22  4889
319
   ㅎ메모의 64k 제한..
바람 2011/11/19  5507
318
     [re] ㅎ메모의 64k 제한..
바람 2017/10/19  2516
LIST ALL   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이희철
로그인