일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스토어드 프로시저
- binary search
- two pointer
- Dijkstra
- Stored Procedure
- Trie
- 그래프
- SQL
- DP
- 다익스트라
- MYSQL
- String
- Hash
- union find
- 이진탐색
- Brute Force
- Two Points
- Today
- Total
목록Windows/윈도우즈 API (30)
codingfarm
0. 개요 https://docs.microsoft.com/en-us/windows/win32/dlgbox/using-dialog-boxes 대화상자에는 컨트롤들이 배치되며 사용자는 대화상자를 호출한 후 컨트롤을 통해 자신의 의사를 표시하고 명령을 내리며 프로그램은 대화상자에 배치된 컨트롤을 통해 현재 상태를 사용자에게 보여준다. 대화상자는 크게 모달형과 모델리스형으로 나뉘어진다. 모달(Modal)형 : 대화상자를 닫기 전에 다른 윈도우로 전환할 수 없으며 반드시 OK버튼이나 Cancel 버튼을 눌러 대화상자를 닫아야 다른 윈도우로 전환할 수 있다. MessageBox 함수에 의해 만들어지는 메시지 박스도 모달형 대화상자이다 모델리스(Modeless)형 : 대화상자를 열어 놓은 채로 다른 윈도우로 전환할..
0. 개요 사용자로부터 입력을 받는 기능 없이, 오로지 문자열을 보여주는것이 전부인 컨트롤 그렇기에 부모 윈도우로 통지 메시지를 보낼 필요도, 메시지를 받을 필요도 없다. 그러므로 여러개의 스태틱 컨트롤 모두 ID를 -1로 지정해도 된다. 즉, 별다른 목적이 없다면 사용자가 선택할 이유도, static control 끼리 구분되어야할 필요도 없다. 가령 위 윈도우에서 Header, Footer, Left, Top 등의 문자열이 static control이다. 주로 다른 컨트롤 옆에서 해당 컨트롤에 대해 수식하는 역할을 담당한다. 1. 스타일 static control에 즐겨 쓰이는 스타일은 아래와 같다. 스타일 설명 SS_LEFT 왼쪽으로 정렬되는 텍스트이며 자동으로 개행된다. SS_LEFTNOWORDW..
0. 개요 "scrollbar" 윈도우 클래스로 생성 수평의 경우 SBS_HORZ 스타일을, 수직일 경우 SBS_VERT 스타일을 지정 다음 함수를 통해 허용 가능한 설정값 범위와 스크롤의 위치값을 설정할 수 있다. 1 2 BOOL SetScrollRange( HWND hWnd, int nBar, int nMinPos, int nMaxPos, BOOL bRedraw ); int SetScrollPos( HWND hWnd, int nBar, int nPos, BOOL bRedraw ); cs 스크롤바는 자신의 변화에 대해 WM_HSCROLL(수평일 경우), WM_VSCROLL(수직일 경우) 이라는 별도의 메시지를 부모 윈도우로 보내며 추가 정보는 아래와 같다. 인수 설명 LOWORD(wParam) 스크롤 ..
0. 개요 에디트 컨트롤과 리스트 박스를 결합시킨 형태의 컨트롤 목록에 있는 항목중 다수를 선택할 수 있고, 원하는 항목이 없으면 에디트를 통해 직접 입력할 수도 있다. 항상 열려있는 리스트박스에 비해 필요한 경우에만 목록을 열어 선택 가능하다. 1. 스타일 스타일 설명 CBS_SIMPLE 에디트만 가진다. CBS_DROPDOWN 에디트와 리스트 박스를 가진다. CBS_DROPDOWNLIST 리스트 박스만 가지며 에디트에 항목을 입력할 수는 없다. 이외의 특징이나 메시지들에 대해서는 MSDN을 참고한다. https://docs.microsoft.com/en-us/windows/win32/controls/combo-boxes 사용법의 예는 아래와 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13..
https://docs.microsoft.com/en-us/windows/win32/controls/about-list-boxes 0. 개요 선택 가능한 여러개의 항목들을 나열해놓고 그 중 하나 이상을 선택하도록 하는 컨트롤 선택가능한 항목은 주로 문자열임 listbox 라는 윈도우 클래스를 사용 1. 스타일 스타일 설명 LBS_MULTIPLESEL 여러개의 항목을 선택할 수 있도록 한다. 이 스타일을 적용하지 않으면 디폴트로 하나만 선택할 수 있다. LBS_NOTIFY 사용자가 목록중 하나를 선택했을 때 부모 윈도우로 통지 메시지를 보내도록 한다. LBS_SORT 추가된 항목들을 자동 정렬하도록 한다. LBS_OWNERDRAW 문자열이 아닌 비트맵이나 그림을 넣을 수 있도록 한다. LBS_STANDAR..
0. 개요 문자열을 입력받을때 쓰이는 에디트 "edit" 윈도우 클래스를 사용하며 아래의 스타일들을 지정 가능하다. 스타일 설명 ES_AUTOHSCROLL 수평 스크롤을 지원한다. ES_AUTOVSCROLL 여러줄 편집시 수직 스크롤을 지원한다. ES_LEFT 왼쪽 정렬한다. ES_CENTER 중앙 정렬한다. ES_RIGHT 오른쪽 정렬한다. ES_LOWERCASE 소문자로 변환하여 표시한다. ES_UPPERCASE 대문자로 변환하여 표시한다. ES_MULTILINE 여러줄을 편집할 수 있도록 한다. ES_NOHIDESEL 포커스를 잃더라도 선택된 영역을 표시한다. ES_READONLY 읽기전용으로 만들어 편집을 금지한다. 자세한 설명은 14장에서 진행 에디트는 자신에게 발생한 변화에 대해 부모 윈도우에..
0. 개요 "button" 윈도우 클래스에 BS_RADIOBUTTON, BS_AUTORADIOBUTTON 둘 중 하나의 스타일을 지정하면 라디오 버튼이 된다. 체크 버튼은 하나의 속성에 대한 참/거짓 속성만을 가지는 반면 라디오 버튼은 그룹에 속한 여러개의 버튼 중 하나만 선택가능하다. 라디오 버튼의 그룹을 구성하는 방법 그룹을 이루는 첫번째 라디오 버튼에만 WS_GROUP 스타일을 주고 나머지 라디오 버튼은 WS_GROUP 스타일을 주지 않으면 된다. 그룹 박스 컨트롤 : 어떤 라디오 버튼들이 같은 그룹에 속하는지 나타내기 위해 사용되는 오브젝트. 그룹 박스는 BS_GROUPBOX 스타일을 가지는 버튼의 일종이지만 화면으로 보여지기만 할 뿐 사용자의 입력을 받아들이거나 어떤 기능을 가지는 것은 아니다...
0. 개요 CreateWindow 함수를 사용하여 버튼 컨트롤 생성시 3번째 매개변수인 dwStyle 를 통해서 버튼의 스타일을 설정할 수 있다. 스타일 속성 BS_PUSHBUTTON 푸시 버튼 BS_DEFPUSHBUTTON 디폴트 푸시 버튼 BS_CHECKBOX 체크 박스 BS_3STATE 3가지 상태를 가지는 체크 박스 BS_AUTOCHECKBOX 자동 체크 박스 BS_AUTO3STATE 3가지 상태를 가지는 자동 체크 박스 BS_RADIOBUTTON 라디오 버튼 BS_GROUPBOX 그룹 박스 푸시버튼은 앞서 살펴보았다. 여기서는 체크박스를 살펴보겠다. 위표에서 보듯이 체크박스는 스타일에 따라 4가지가 존재한다. 3가지 상태의 경우 선택, 비선택 이외에 grayed라는 상태를 의미하는데, 아마 한번..
1. 버튼 CreateWindow를 함수의 원형을 다시 살펴본다. 1 2 3 4 5 6 7 8 9 10 11 12 13 void CreateWindowW( [in, optional] lpClassName, [in, optional] lpWindowName, [in] dwStyle, [in] x, [in] y, [in] nWidth, [in] nHeight, [in, optional] hWndParent, [in, optional] hMenu, [in, optional] hInstance, [in, optional] lpParam ); cs 우리는 윈도우를 생성하기 위해 첫번째 매개변수인 lpClassName에 registerehls WNDCLASS인스턴스의 lpszClassName 필드에 설정했던 문자열..
0. 개요 컨트롤 정의 : 사용자와 인터페이스를 이루는 입,출력 도구 도스나 콘솔환경의 getch, scanf 등의 함수라 볼 수 있음 대표적인 표준 컨트롤러들 버튼, 에디트, 리스트 박스, 콤보 박스, 스크롤 바, 스태틱 컨트롤은 대화상자의 차일드 윈도우로 존재한다. 생성방법 윈도우 : WNDCLASS 형의 구조체를 정의, RegisterClass 함수로 등록, CreateWindow 함수로 생성 컨트롤 : 부팅시 OS에 의해 미리 등록되는 WNDCLASS 구조체를 사용한다. 즉, Register 할 필요없이 CreateWindow 함수를 호출하여 생성 컨트롤을 위한 윈도우 클래스의 종류 윈도우 클래스 컨트롤 button 버튼, 체크, 라디오 static 텍스트 scrollbar 스크롤 바 edit 에..
0. 개요 폰트도 펜이나 브러쉬처럼 GDI 오브젝트이다. 폰트 오브젝트를 만들고 DC로 전송한 후 문자열을 출력하면, DC에 선택된 폰트를 사용하여 문자열이 출력된다. 1. CreateFont 폰트의 생성에 쓰이는 함수 반환되는 핸들을 HFONT형의 변수에 대입한다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 HFONT CreateFontW( [in] int cHeight, [in] int cWidth, [in] int cEscapement, [in] int cOrientation, [in] int cWeight, [in] DWORD bItalic, [in] DWORD bUnderline, [in] DWORD bStrikeOut, [in] DWORD iCharSet, [in] D..
1. 비트맵 출력 비트맵 컴퓨터 분야에서 디지털 이미지를 저장하는 데 쓰이는 이미지 파일 포맷 또는 메모리 저장 방식의 한 형태 화면 상의 각 점들을 직교좌표계를 사용하여 화소 단위로 나타냄 가로 곱하기 세로 만큼의 픽셀 정보를 다 저장해야 하기 때문에 벡터 방식의 이미지나 텍스트 자료에 비해 상대적으로 용량이 크고 처리 속도가 느림 GDI 오브젝트로 취급됨 파일저장형식 : JPEG, GIF, PNG winapi는 gdi+를 추가하지 않으면 PNG를 출력할 수 없다. 윈도우에 비트맵 출력하기 비트맵을 선택하고 가져오기를 눌러, PC에 저장된 파일 중 리소스로 쓸 BMP 파일을 가져온다. 우리는 아래의 파일을 쓸것이다. 추가된 리소스의 ID를 확인한 후 아래 코드를 작성한다. 1 2 3 4 5 6 7 8 ..
1. 흑백에서의 그리기 모드 그리기 모드 : 도형이 그려질 때 원래 그려져 있던 그림과 새로 그려지는 그림과의 관계를 정의하는것 ex : 예전 그림 위에 새그림 덮기, 적절히 혼합하기 가령 2개의 흑백 그림을 4가지 비트 연산으로 합처보면 아래와 같다. 2. 그리기 모드의 종류 그리기 모드를 변경하는 함수와 현재 설정된 그리기 모드를 구하는 함수는 아래와 같다. 1 2 int SetROP2( HDC hdc, int rop2 ); int GetROP2( HDC hdc); cs hdc : 그리기 모드를 변경(또는 조사) 하고자 하는 DC의 핸들 rop2 : 변경할 그리기 모드 값 그리기 모드 설명 R2_BLACK 항상 검정색이다. R2_WHITE 항상 흰색이다. R2_NOP 아무런 그리기도 하지 않는다. R..
1. GDI 오브젝트 GDI(Graphic Device Interface) 3장에서 간략히 설명한 적 있다. 윈도우즈 프로그램을 구성하는 세가지 DLL 중 하나 KERNEL, USER, GDI 화면, 프린터 등의 출력장치를 통제하는 윈도우즈의 핵심 모듈 윈도우즈 프로그램에서 모든 출력은 GDI를 통해서 화면과 프린터로 나가게 되어 있음 GDI Object GDI가 그래픽 출력 및 출력조정에 사용되는 도구 ex : 펜(선 그리기), 브러시(면 채우기), 비트맵, 폰트(문자열 출력)... 사용자는 그래픽을 그리기전에 DC에 원하는 오브젝트를 선택해줌으로써 원하는 모양과 속성으로 그래픽을 출력할 수 있다. GDI 오브젝트는 모두 핸들로 관리되므로 사용자는 GDI 오브젝트 생성 함수를 부르고, 이 함수가 리턴하..
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 #include #include "resource.h" LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE g_hInst; LPCTSTR lpszClass = TEXT("StrTable"); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance , LPSTR lpszCmdParam, ..
흔히들 말하는 단축키이지만 윈도우즈에서 단축키(ShortCut)라는 말은 다른 의미로 사용되므로 엄격히 구분지어야 한다. ShortCut Accelerator $\bullet$ 메뉴 이름에 &을 넣어 Alt키와 함께 사용하는 키 $\bullet$ 메뉴에 있는 항목을 키보드로 선택하는 방법 $\bullet$ 메뉴와 상관없이 사용 가능 액셀러레이터 만들기 우선 리소스뷰에서 메뉴 리소스 파일을 더블클릭하여 편집기를 연다. 메뉴만 봐도 한눈에 단축키가 무엇인지 알 수 있도록 이름 옆에 단축키 값을 입력해준다. 그러기위해 각 메뉴 항목들의 캡션을 아래처럼 바꾼다. 이제 실행해보면 Alt + F 키를 누르면 File 메뉴가 열리는것을 볼 수 있다. 아직은 이름만 수정한것이므로 실제 단축키가 작동하진 않는다. 엑셀러..
0. 메뉴 윈도우즈용 프로그램이 제공하는 가장 표준적인 UI 구조와 기능, 내부적인 운용 방법은 간단치 않지만, 개발툴을 활용하면 비교적 쉽게 구현 가능하다. 프로젝트 내의 리소스파일 폴더를 우클릭하고 새항목을 클릭한다 좌측의 리소스 탭에서 리소스 파일(rc)을 선택한다. 솔루션 탐색기에서 생성된 rc파일을 볼 수 있으며, 리소스 뷰에서 프로젝트에 포함되어 있는 리소스들의 목록을 계층적으로 보여준다. 리소스뷰의 Menu.rc 폴더를 우클릭하여 Menu 리소스를 추가해본다. 솔루션 탐색기 툴바에서 Menu.rc와 resource.h가 추가되었으며 리소스 뷰 툴바에서 메뉴 리소스가 추가된것을 볼 수 있다. 메뉴 리소스를 더블클릭하여 파일을 열면 작업영역 메뉴창의 모습을 볼 수 있다. 작업영역을 아래처럼 수정..
1. 리소스의 분리 프로그램은 코드와 데이터로 구성된다. 코드 : 데이터를 처리하는 수단, 프로그램의 동작을 제어 데이터 : 프로그램의 처리 대상, 코드가 아닌 모든것 ex : 비트맵 아이콘, 메뉴, 문자열... 리소스 : 코드의 논리와 무관한 데이터 ex : 메뉴, 비트맵, 단축키, 문자열, 아이콘, 커서... 별도의 편집기로 만들어져 컴파일되며 링크시에 실행파일에 결합됨 컴파일 과정은 API에서나 MFC에서나 동일하다 도스와 달리 윈도우는 리소스를 만드는 과정과 코딩 과정이 분리되어서 생기는 강점들 디자이너와 프로그래머의 분업이 편리 리소스의 수정과 소스의 컴파일이 분리됨 리소스와 소스를 따로 컴파일하고, 실행파일 생성시에만 함께 링크되면됨 모듈 분할 컴파일의 장점과 비슷 리소스의 재사용이 용이 리소..
우리는 앞선 과정에서 수차례 메시지를 사용했다. 앞서 메시지가 생성되는 조건은 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..