삽질의 현장/- 윈도우 API 17

#014_WIndow_API_비트맵

안녕하세요 삽잡이 입니다.이번 시간에는 비트맵에 대해서 알아보려고 합니다. 비트맵은 MS에서 만든 이미지 포멧입니다.대표적으로 이미지 포멧에는 JPG, PNG 등이 있습니다.이는, 표준화 기구, 범용 기구, 회사에서 만들었다는 차이를 가지고 있습니다.MS에서는 자신의 것들로 그리자고 만든 것이 바로 비트맵입니다. 화면에 그리기를 시도할 때에는 디바이스 컨텍스트 (DC)를 얻어야합니다.DC를 얻어서 사용하기 위해서는 해당 DC의 핸들을 얻어서 사용하게 됩니다.즉, DC는 화면에 그리기 위한 정보입니다.그 중에서 우리가 사용했던 DC는 클라이언트 영역에 그리기 위한 DC였습니다. 우리가 보고 있는 화면은,비디오 메모리 비트맵으로 보관되어 있고, 해당 화면에 그림을 그리게 된다면 비트맵이 바뀌면서 화면이 그려..

#013_WIndow_API_부모와 자식이 함께해요_자식 프로세스

안녕하세요 삽잡이입니다.이번 시간에는 몇가지 윈도우를 함께 다뤄보는 시간을 가지려 합니다. 대부분의 윈도우에는 메시지 루프, Dispatcher, CreateWindow, Proc가 있습니다.그렇다면 여러 윈도우를 생성할 때를 생각해보도록 하지요...윈도우 생성을 할 때에는 CreateWindow를 사용합니다.또한, Window 생성 시 반드시 윈도우 클래스 이름이 필요합니다. 어플리케이션에서 메인 윈도우는 어딜 가나 하나입니다.그리고 나머지는 모두 메인 윈도우의 자식 윈도우들이라고 할 수 있습니다.(참고로, 팝업 윈도우는 메인 윈도우의 영역을 벗어날 수 있는 자식 윈도우를 말합니다. 뜬금...) 어찌됬건, 메인 윈도우는 단 하나입니다.또한, 자식 윈도우는 메인 윈도우보다 먼저 만들어질 수 없습니다. 자..

#012_WIndow_API_GUI 프로그래밍에서 주의할 점

안녕하세요 삽잡이입니다. 이번 시간에는 잠시 GUI 환경의 프로그램에서 신경써야할 사항들에 대해서 알아보려고 합니다. GUI에는 크게 UI 부분인 View와 코드 영역인 Data가 있습니다.이 둘은 서로 일대일로 부합해야 되며, 이를 싱크라고 합니다. View는 사용자에게 직접 보이는 곳으로써, 사용자의 Input을 받고 Output을 제공하는 역할을 담당하고 있습니다.그말인 즉, Input으로 받은 데이터를 가공하는 역할을 담당하는 부분이 Data라는 것입니다. 다시 한번 강조하지만,GUI에서는 View와 Data가 정말로 중요합니다.따라서 데이터를 어떻게 조직하고 어떻게 UI로 나타낼지에 대해 고민하는 것이바로 개발 공부를 하는 저와 같은 허접들의 고충이 되겠지요... 아무튼... API를 공부하며 ..

#011_WIndow_API_SendMessage와 PostMessage

안녕하세요 삽잡이입니다.이번 시간에는 메시지를 날리는 즉, 통신을 위한 Message 함수들에 대해서 알아보려고 합니다. 정확하게 말씀드리자면, 메시지를 발생시키는 SendMessage와 PostMessage에 대해서 알아보려고 합니다. 우선 SendMessage함수와 PostMessage 함수는 어떻게 생겨먹었는지 살펴보도록 하겠습니다.도와줘 MSDN~ 짜잔... 이렇게 생겨먹었습니다. 그렇다면, PostMessage에 대해서 살펴보도록 하지요... 비슷하게 생긴 듯하며 약간은 다른... 이 두 함수...결과적으로 말하면 똑같이 메시지를 날리는 기능을 가지고 있습니다.핸들은 기본적으로 첫번째 매개변수에 들어가고요...다음으로는 발생시키고자 하는 메시지, 메시지에 대한 부가정보들이 순차적으로 각각 매개변..

#010_WIndow_API_다이얼로그 (2)

안녕하세요 삽잡이입니다.지난 시간에 모달 다이얼로그에 대해서 알아보는 시간을 가졌습니다.이번 시간에도 이어서 달려보도록 하겠습니다. DialogBox 함수를 통해 우리는 모달 다이어그램을 생성할 수 있었습니다.하지만, 모달 다이어그램을 사용하기 위해서는 WndProc 함수에서 다이얼로그를 생성하고다이얼로그 프로시저에서 다이얼로그를 소멸시켜야 된다는 사실에 대해 알게 되었습니다. 그렇다면 우리는 위의 말을 참고해서 이와 같은 코드를 작성할 수 있습니다. 이 조건문에 대해서 간략하게 설명 드리자면,'IDOK 즉, 확인 버튼을 뜻하는 ID 값과 DialogBox의 반환 값이 같다면' 해당 조건문을 실행하겠다는 뜻입니다. 제가 지금 뜬금없이 x 소리를 하는 것이 아니라는 이유를 설명하기 전에 EndDialog ..

#009_WIndow_API_다이얼로그 (1)

안녕하세요 삽잡이 입니다.이번 시간에는 지난시간에 이어서 리소스에 대해 조금 더 살펴보고자 합니다. 여러분은 이와 같은 메시지 창을 보신적이 있으신가요?물론 없으시겠지요... 저런 혐오스러운 메시지창을 하하... 아무튼... 어떤 확인을 위해 띄우는 윈도우를 바로 MessgeBox라고 합니다.이 메시지 박스를 띄우기 위해서는 MSDN에서 우리에게 알려주는 것과 같이,부모 윈도우 핸들과, 출력될 내용, 캡션의 이름, 스타일이 순서대로 매개변수에 입력되어져야 됩니다.여기서 의문이 듭니다... 왜 부모 윈도우 핸들을 넣어줘야할까요?왜냐하면, 메시지박스는 윈도우이기 때문입니다. 정리하자면, 윈도우 상에 어떠한 작업 중 '확인을 위해 띄우는' 목적에 의해 생성되는 윈도우가 메시지 박스이기 때문에 결과적으로 이 메..

#008_WIndow_API_리소스 (Resource)

안녕하세요 삽잡이입니다.이번 시간에는 리소스에 대해서 알아보도록 하겠습니다. 리소스라는 단어는 이곳 저곳에서 굉장히 많이 사용되는 용어입니다.리소스의 한글 뜻은 '자원'으로써 스타크래프트에서는 SCV가 캐는 미네랄이 바로 '자원'이죠... 아무튼... IT 분야에서 리소스란 '코드와 분리되어 실행 파일에 포함되는 데이터'라고 정의 할 수 있습니다...코드는 리소스와 어떤 차이가 있기에 코드와 분리한다고 하는 것일까요? 우리가 프로그램을 만들게 되면 해당 프로그램은 바이너리 코드 .exe에 만들어집니다.프로그램이란 무수히 많은 데이터와 명령어의 집합으로 구성 되어있습니다.이 집합을 로직 코드로 나누어 따로 데이터를 관리해보자는 취지에서 만들어진 개념이 바로 리소스입니다. 우선 리소스에 대해서 이야기하기전,..

#007_WIndow_API_그리기 (I/O) (3)

안녕하세요 삽잡이입니다.이번시간에는 지난 시간들에 이어서 그리기에 대해서 알아보도록 하겠습니다. 우선 클라이언트의 사각 영역을 얻기 위해서는 어떻게 해야할까요?GetClientRect 함수를 통해 얻어올 수 있게 됩니다.해당 함수는 각기 다른 윈도우 창의 크기를 구하기 위해서 유용하게 사용할 수 있는 함수입니다.즉, 전체 사각 영역을 그릴 수 있는 기능을 가지고 있습니다. 다음으로 마우스로 넘어가보도록 하겠습니다.마우스를 눌렀다가 떼는 과정에서 이벤트를 발생시키기 위해서는 어떻게 해야할까요? WM_LBUTTONDOWN과 WM_LBUTTONUP이라는 메시지들을 발생시키면 되겠지요... 모든 마우스의 이벤트는최상의 윈도우 즉, 마우스 포인터가 위치한 제일 위에 떠있는 윈도우가 받게 됩니다.프레임 밖에까지 가..

#006_WIndow_API_그리기 (I/O) (2)

안녕하세요 삽잡이입니다. 지난 시간에 이어서 Input/ Output 즉... 그리기 영역에 대해서 더 살펴보도록 하겠습니다. 무효화 영역이 발생하게 된다면, WM_PAINT 메시지가 발생하게 되는데이는 다시 그리기를 해놓지 않게 되면 모든 윈도우에 그려졌던 것들이 사라지게 됩니다. GUI에 정말 중요한 사실중 하나는,우리가 그리는 UI에는 항상 sync를 이루는 데이터가 있어야 한다는 것입니다.UI는 View와 View Model로 구성되어있는데 이 두 구성요소에는 서로 부합하는 데이터가 있어야한다는 것이죠... 예를들어서 UI에 사각형 하나를 그리기 위해서는 해당 데이터가 있어야합니다.사각형을 두 개 그린다면 그에 맞도록 두개의 데이터가 있어야한다는 것이고요... UI는 사용자의 Input을 받아들이..

#005_WIndow_API_그리기 (I/O) (1)

안녕하세요 삽잡이 입니다. 지난 시간까지 윈도우가 어떻게 동작하는지, GUI가 어떤 형태로 처리되는지에 대해서 공부했었습니다.이번 시간에는 그리기와 입력에 대하여 공부해보도록 하겠습니다.그리기는 결국 출력을 말하는 것으로,결론적으로 Input / Output에 대해서 알아보도록 하겠습니다. GUI 프로그램에서 그리기 방식은 두가지로 나눌 수 있습니다.윈도우가 다른 윈도우에 겹쳐졌다가 (가려져 있다가) 뒤에 있던 윈도우를 활성화 시킨다면,활성된 윈도우가 앞으로 나오는 것은 당연한 결과라고 생각하실 수 있을 텐데요...사실 이러한 모습은, 겹친 부분을 복원하는 과정을 거치는 것입니다. 지난시간에 언급했었지만, 어플리케이션을 살펴보게 되면 UI부분과 Code 영역으로 나뉠 수 있습니다.그 중에서 UI 즉, 보..