일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Dijkstra
- Stored Procedure
- union find
- MYSQL
- Hash
- Two Points
- 그래프
- Brute Force
- 다익스트라
- 이진탐색
- DP
- SQL
- binary search
- 스토어드 프로시저
- Trie
- two pointer
- String
- Today
- Total
목록Windows (37)
codingfarm
우리는 앞선 과정에서 수차례 메시지를 사용했다. 앞서 메시지가 생성되는 조건은 2가지라고 배웠다 사용자의 입력에 의해 시스템이 변화를 감지했을때 메시지는 윈도우에 들어오는 여러가지 상황 변화를 통보하기 위해 쓰여진다. 상황변화 : 명시적인 입력이 될 수도 있고, 윈도우에 관한 기본적인 관리도 포함된다. 윈도우에 들어오는 여러가지 메시지에 대해 알아보겠다. 1. 생성 및 파괴 WM_CREATE와 WM_DESTROY는 윈도우가 생성 및 파괴 댈때 보내지는 메시지이다. 각 메시지들은 윈도우 생성시 해야할 일회적인 초기 및 종료 처리에 사용할 수 있다. 가령, 윈도우에서 사용하기 위한 1M의 메모리를 동적으로 할당하고자 하면 아래의 방법을 사용할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 ..
타이머 메시지인 WM_TIMER는 사용자의 동작과 관계없이 발생하는 메시지이다. 이 메시지는 한번 지정해 놓으면 일정한 시간 간격을 두고 연속적으로 계속 발생한다. 주기적으로 같은 동작을 반복해야 하거나 여러번 나누어 해야할 일이 있을 때 이 메시지를 사용한다 시계 아래는 타이머 메시지를 이용한 간단한 시계이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 #include LRESULT CALL..
docs.microsoft.com/en-us/windows/win32/inputdev/mouse-input Mouse 마우스란 일반적으로 쓰는 쥐처럼 생긴 마우스와 노트북의 터치패드, 트랙볼과 그림용 타블릿 등을 모두 포함하는 명칭이다. 마우스 입력에 관한 메시지는 아래와 같은 종류가 있다. 버튼 누름 놓음 더블클릭 좌측 WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCLK 우측 WM_RBUTTONDOWN WM_RBUTTONUP WM_RBUTTONDBLCLK 중앙 WM_MBUTTONDOWN WM_MBUTTONUP WM_MBUTTONDBLCLK 마우스 메시지는 lParam의 상위 워드에 마우스 버튼이 눌러진 y좌표, 하위워드에 x좌표를 가지며 좌표값을 검출해 내기 위해 HIWOR..
WM_CHAR 메시지 도스(콘솔) 환경에서는 getch, gets, scanf 처럼 명시적으로 입력을 받는 함수들이 따로 있다. 위 입력 함수들은 사용자로부터 입력이 완료될 때까지 프로그램의 실행은 잠시 중단된다. 이는 싱글 태스킹 환경에서는 아무 문제 없지만, 멀티태스킹의 윈도우즈 환경에서는 이런 명시적인 입력 함수가 존재하지 않으며 반드시 메시지를 받아야 한다. 윈도우즈는 포커스(focus)를 가진 프로그램에게 키보드 메시지(WM_CHAR, WM_KEYDOWN)를 보내며 프로그램은 이런 메시지를 받아 키보드 입력을 처리한다. 가령 아무 대화상자나 열어 Tab키를 눌러가면서 포커스를 이동해보면 강조표시가 이동하는것을 볼 수 있다. 한번에 하나의 프로그램만 키보드 입력을 받을 수 있는 이유는 간단하다. ..
비프음을 내는 출력을 낼 수 도 있다. BOOL MessageBeep(UINT uType); docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebeep 간단하게 매개변수에 0xFFFFFFFF를 넣으면 경고음이 스피커를 통해 출력된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 #include LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE g_hIns..
메시지 박스 : 조그만 별도의 윈도우를 열어서 사용자에게 정보를 전달하거나 질문을 하는 장치 MessageBox 함수 호출 한번으로 비교적 간단하게 만들 수 있다. int MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType ); 매개변수 기능 hWnd $\bullet$ 메시지 박스의 오너(Owner) 윈도우 $\bullet$ 메시지 박스가 떠 있는동안 오너 윈도우는 사용할 수 없는 상태가 된다. lpText 메시지 박스에 출력할 문자열 lpCaption 메시지 박스의 타이틀 바에 나타날 제목 문자열 uType 메시지 박스에 어떤 종류의 버튼이 나타날 것인가를 지정하는 여러가지 플래그들 uType에 심을 수 있는 값은 아래와 같다. 값..
그래픽 출력도 문자열 출력과 방법은 크게 다르지 않다 아래와 같은 함수들을 사용한다. COLORREF SetPixel(hdc, nXPos, nYPos, clrref) DWORD MoveToEx(hdc, x, y, lpPoint) BOOL LineTo(hdc, xEnd, yEnd) BOOL Rectangle(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect) BOOL Ellipse(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect) 모든 GDI 함수의 첫번째 인수는 항상 DC의 핸들인 hdc이다. SetPixel COLORREF SetPixel( HDC hdc, int x, int y, COLORREF color ); 화면에 점..
1. TextOut 콘솔의 printf와 대응하는 함수라 볼 수 있다. BOOL TextOut(HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cbString); docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-textouta 매개변수 매개 변수 기능 hdc DC의 핸들 nXStart 문자열이 출력될 좌표 nYStart lpString 출력할 문자열 cbString 출력할 문자열의 길이 문자열을 출력하기 위한 여러 복잡한 정보들(정렬 등)을 DC에 지정하고 TextOut의 인자로 전달함에 주목할것 TextOut 함수는 널 종료 문자열을 인식하지 않으므로 출력할 문자열의 길이를 인수로 반드시 밝..
1. DC(Device Context)의 필요성 윈도우즈는 세가지 DLL(동적 연결 라이브러리)로 구성되어 있다. KERNEL : 메모리를 관리하고 프로그램을 실행한다. USER : 유저 인터페이스와 윈도우를 관리한다. GDI : 화면 처리와 그래픽을 담당한다.(Graphic Device Interface) 윈도우즈 API 함수의 대부분은 이 세가지 DLL에 의해 제공된다. 출력을 위해선 이 중 GDI에 관심을 가져야 한다. 결론부터 말하면 DC는 GDI를 활용해 화면을 그림에 있어서 부수적인 부분을 최소화 하여 개발자들이 당장 필요로 하는 정보에만 집중하게끔 해주는 역할을 담당한다. 이 DC의 역할을 되새기며 화면 출력에 DC가 필요한 이유를 위한 예를 상황과 함께 들어본다. 상황1 화면에 선을 긋는 ..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 #include LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE g_hInst; LPCTSTR lpszClass = TEXT("First"); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance , LPSTR lpszCmdParam, int nCmdShow) { HWND hWnd; MSG Message; WNDCLASS WndClass; g_..
1. 커널 오브젝트에 대한 이해 $\bullet$ 커널 : 컴퓨터를 운영하는데 있어서 중심이되는 운영체제의 핵심 프로그램 $\bullet$ 커널을 운영체제와 똑같이 취급하는 서적도 있다. 커널오브젝트에 대한 이해 $\bullet$ 커널오브젝트 : 커널에서 관리하는 리소스의 정보를 관리하는 데이터 블록 $\bullet$ 커널오브젝트가 프로세스 관리(생성,소멸,변화,상태정보,우선순위 정보...)의 주체이다. 커널 오브젝트(Kernel Object) $\bullet$ 프로세스의 정보, 상태 등을 저장하고 관리하기 위해 정의된 구조체 $\bullet$ 프로세스의 상태정보(running, blockd, ready...)와 우선순위정보는 OS내부에 저장되어야 하며 정보가 변경될때마다 갱신되어야 한다. $\bulle..
1. 프로세스(Process)의 이해 프로세스란 무엇인가? $\bullet$ 정의 : 실행중에 있는 프로그램 $\bullet$ 프로세스의 범위 : 메모리 구조 + 레지스터 set 프로그램 프로세스 하드디스크에 저장된 실행될 수 있는 파일 메모리에 올라가서 실행되고 있는 프로그램 프로세스를 구성하는 요소 1) 프로그램 실행시 메모리 구조 프로세스 하나마다 위와같은 분리된 메모리 공간이 형성된다. 각 프로세스는 서로의 메모리 영역에 접근이 불가능하다. Register Set $\bullet$ CPU가 특정 프로그램을 실행중이라면 CPU내부 레지스테들은 프로그램 실행을 위한 데이터들로 채워지게 된다. $\bullet$ 레지스터의 상태도 프로세스의 일부로 포함시켜야 한다. -이는 Context Switching..
1. 컴퓨터 구조의 접근방법 컴퓨터 디자인 $\bullet$ CPU의 Register 만을 디자인 대상으로 삼는다. (ALU와 Control Unit은 이미 있다고 가정한다.) $\bullet$ 시스템 프로그래머 입장에서 CPU를 보는 관점은 Register에 집중된다. 여기서 시스템 프로그래머란 CPU에 종속적인 어셈블리 프로그래밍을 하는 개발자이다. 레지스터 디자인 ARM 코어를 참조하여 레지스터를 디자인 해보자. r0 r1 r2 r3 r4 ir r5 sp r6 lr r7 pc ir(instruction register), sp(stack pointer), lr(link register), pc(program counter) 명령어 구조 및 명령어 디자인 $\bullet$ 레지스터의 디자인을 바탕으로..
Windows 프로그래밍에서 GUI 프로그래밍을 하건, 시스템 프로그래밍을 하건 유니코드에 대한 이해는 필수적이다. 1. Windows 에서의 유니코드(UNICODE) 문자셋(Character Sets)의 종류와 특성 대표적인 문자셋으로 아스키코드(ASCII CODE)와 유니코드(UNICODE)가 있다. 아스키코드(ASCII CODE) 유니코드(UNI CODE) $\bullet$ 미국에서 정의하는 표준이다. $\bullet$ 크기 : 1byte (영어 + 특수문자가 256개 이하) $\bullet$ 전세계 문자를 표현하기 위한 표준 $\bullet$ 크기 : 2byte 문자셋(character set) $\bullet$ 문자들의 집합, 문자의 표현방법에 대한 약속 $\bullet$ 종류에 따라 아래와 같..
시스템 프로그램 $\bullet$ 컴퓨터 시스템을 동작(파일 복사, 이동, 삭제...) 시키는 프로그램 ex)windows나 unix 등의 운영체제들 $\bullet$ 하드웨어를 사용할 수 있도록 도와주는 프로그램 컴퓨터 시스템의 구성 요소 컴퓨터 하드웨어의 구성 CPU(Central Processing Unit) $\bullet$ 중앙 처리 장치 $\bullet$ 연산을 담당 $\bullet$ 컴퓨터 프로그램 실행에서 핵심적인 역할을 담당한다. 메인 메모리(main memory) $\bullet$ 램(RAM) 이라는 저장장치로 구성됨 $\bullet$ 컴파일이 완료된 프로그램 코드 binary code 형태로 올라가서 실행되는 영역 하드디스크 메인메모리 자료저장 프로그램의 실행이 주목적 입$\cdot$..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 #include LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE g_hInst; LPCTSTR lpszClass = TEXT("First"); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance , LPSTR lpszCmdParam, int nCmdShow) { HWND hWnd; MSG Message; WNDCLASS WndClass; g_..
API(Application Programming Interface) 응용프로그램이 OS의 기능을 편리하게 사용할 수 있도록, OS나 언어에서 제공하는 인터페이스이다. OS가 응용프로그램을 위해 제공하는 함수의 집합이라고도 정의가능하다. 즉, 프로그램끼리 서로 편리하게 소통하게 해주는 수단이라 볼 수 있다. 그러므로 API는 운영체제와 응용프로그램간의 약속이다. 왜 API를 쓰는가/제공하는가? OS에서 실행되는 응용프로그램은 OS에 종속적일 수밖에 없으므로 OS가 규정한 바대로 하드웨어에 접근해야 한다. 이때 사용자들은 어려운 전문지식 없이 그리고 제공자들은 자신들의 소프트웨어 자산을 숨긴채 사용자들이 OS의 기능을 사용하게끔 해준다. API의 예 대부분의 개발자들은 하드디스크가 파일을 저장하는 장치라는..