총 삽질들 514

#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 즉, 보..

#004_WIndow_API_WinMain, WndProc에 대해서 (3)

안녕하세요 삽잡이입니다.이번 시간에도 마찬가지로 WinMain함수와 WndProc함수에 대해서 마져 알아보도록 하겠습니다. WndProc의 매개변수는 어떻게 생겼을까요... 1LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)cs 이런식으로 생겨먹었습니다...매개변수를 하나씩 살펴보도록 하겠습니다. 우선 hwnd의 경우 메시지가 발생한 윈도우의 핸들을 뜻합니다.다음 매개변수인 iMsg는 메시지의 종류를 뜻합니다. 그리고 하위 두개의 매개 변수는 각각 4바이트 짜리 변수를 뜻합니다.우선 wParam의 w의 경우 2Byte 크기의 WORD를 뜻했었는데 뭐....현재는 정보도 많아지고... 과거의 잔재로 그냥 w가 붙어 있는..

#003_WIndow_API_WinMain, WndProc에 대해서 (2)

안녕하세요 삽잡이입니다. 지난 시간에 이어서 ShowWindow와 UpdateWindow에 대해서 알아보려고 합니다.위의 두 함수는 CreateWindow에서 반환된 윈도우 핸들을 사용하여윈도우를 나타내는 기능을 담당하고 있습니다. 프로그램상 메모리가 생성되면 해당 프로세스를 관리할 수 있는 핸들을 OS로부터 받게됩니다.즉, ShowWindow는 핸들을 줄테니 만들어 달라는 기능을 담당하고 있는 것이지요...이때 WinMain 함수의 마지막 인수인 nCmdShow가 사용되는데,사용자가 Input한 형태로 윈도우를 띄우라는 의미가 내포되어 있습니다. UpdateWindw는 메시지를 처리하느라 화면에 안 뜰 수 있는 문제를 해결해주는 함수로,'지금 나타내!'라는 뜻을 가지고 있는 함수입니다. 다음으로는 메시..

#002_WIndow_API_WinMain, WndProc에 대해서 (1)

안녕하세요 삽잡이 입니다.이번 시간에는 지난 시간에 이어서 WinMain함수와 WndProc함수에 대해서 조금 더 알아보도록 하겠습니다. 우선, 지난 시간에 배운 내용을 간략하게 설명하자면...WinProc 함수는 프로시저이고 , 메시지를 처리하는 함수를 뜩합니다.메인 함수인 WinMain함수는 크게 세가지 영역으로 나뉠 수 있습니다. 첫번째로, 윈도우의 클래스를 등록하는 부분이 있습니다.윈도우 클래스를 등록하기 위해서는 구조체를 사용해야합니다. 즉, 윈도우 클래스라는 구조체를 설정한 다음 해당 윈도우 클래스를 등록하는 것입니다.윈도우 구조체를 잠시 살펴보도록 하기 전, MSDN의 도움을 청해보도록 하겠습니다. 자... 여러분이 지금 살펴보시는 구조체가 바로 WNDCLASS라고 부르며,해당 클래스를 등록..