전체 글 115

[WinAPI]MDI(Multiple Document INterface)

MDI 란? 동시에 여러개의 문서를 열 수 있는 프로그램 형태 이다. 응용 프로그램이 목적이 되는 데이터를 의미하되 간단하게 하나의 차일드 윈도우 라고 생각해도 무방하다. 메모장은 한번에 하나의 텍스트 파일만 편집할 수 있기 때문에 MDI가 아닌 SDI프로그램이다. 윈도우즈는 복잡한 MDI를 쉽게 만들 수 있도록 여러가지 지원을 하기 때문에 어렵지 않게 MDI프로그램을 만들 수 있다. MDI의 많은 기능들이 이미 운영체제에 프로그래밍되어있기 때문에 불러다 쓰기만 하면 된다. 요즘은 프로그램을 MDI로 작성하는 것은 별로 권장되지 않는다. 초보자들에게 혼란을 준다는 이유에서 이다.

WinAPI 2022.01.03

[WinAPI]메타파일

그림을 저장하는 방식에는 일반적으로 래스터와 벡터 두가지 방법이 있다. 윈도우즈는 두방법 모두 지원한다. 그 중 하나가 비트맵 이고, 또 하나가 메타파일이다. 메타파일 메타파일은 GDI함수호출을 부호화하여 모아놓은 파일이다. 비트맵은 그림자체를 저장하고 있는데 비해, 메타파일은 그림을 그리는 명령을 저장하고 있다. 따라서 장치독립적이고, 비트맵보다 크기가 작다. 래스터 메타파일 그림자체 저장 그림그리는 명령 저장 크기가 큼 크기가 작음 속도 빠름 속도 느림(부호 및 명령을 꺼내고 해석 실행 하는 과정) 때문 속도나 일반적인 목적으로 그림 출력할때 사용 장치독립성이 중요할때 사용 래스터 방식 백터방식 코렐드로우, 일러스트레이터, CAD 등 프로그램 포토샵, 그림판 벡터의 그래픽은 일정한 크기의 비트맵으로 ..

WinAPI 2022.01.03

[DirectX] DXGI란

Direct3D와 함께 쓰이는 API이다. DXGI에 깔린 기본 착안은 여러 그래픽 API들리 공통인 그래픽 관련 작업들이 존재한다는 것이다. 예를 들면 매끄러운 2차원 애미메이션을 위해서는 2차원 렌더링 API에서도 3차원 렌더링API처럼 교환사슬과 페이지 전환이 필요하다. 이때문에 교환사슬을 대표하는 인터페이스인 IDXGISwpChain은 실제로 DXGI API의 일부이다. DXGI는 그밖에도 여러가지 공통그래픽 기능성을 처리한다.

DirectX 2022.01.01

[DirectX] 다중표본화의 이론1

앨리어싱 효과 : 선을 픽셀들의 행렬로 표현하려고 할때 나타나는 계단 현상 초과 표본화 (슈퍼샘플링) : 후면버퍼와 깊이버퍼를 화면 해상도 보다 4배 크게 잡고, 후면버퍼에 4배 크기의 해상도에서 랜더링 한다. 이미지를 화면에 제시할때가 되면 후면버퍼를 원래크기의 버퍼로 환원한다. 그과정에서 4픽셀블록의 네 색상의 평균을 해당하는 픽셀의 최종 픽셀로 사용한다. 다중표본화 : 초과표본화는 픽셀처리량과 메모리 소비량이 네배라서 비용이 높다. 따라서 절충적인 앨리어싱 제거 기법이 다중표본화 이다. 다중표본화는 일부 계산 결과를 부분픽셀들 사이에서 공유하기 때문에 초과표본화보다 비용이 낮다.

DirectX 2021.12.31

[WINAPI]컨트롤3(콤보박스, 스크롤, 스태틱)

콤보박스는 리스트박스와 비슷하게 사용한다. 접두어만 살짝 다르다. 접두어 CBS_ 또는 CB_ 를 붙인다. 스크롤바는 좀더 복잡한 컨트롤 이다. 수치로 정확한 값보다는 대충의 값을 신속하게 선택해야할때 스크롤바가 적합하다. 윈도우의 스크롤 상태를 관리하기 위해 사용하기 도 한다. 스크롤바는 scrollbar윈도우 클래스로 생성하고 수평스크롤 바일 경우 SBS_HORZ 스타일을 수직스크롤바일 경우 SBS_VERT스타일을 지정한다. 스크롤바는 범위와 현재 위치값을 가지는데 다음 두 함수들로 이 값들을 지정한다. SetScrollRange(hWnd, nBar, nMinPos, nMaxPos, bRedDraw); SetScrollPos(hWnd, nBar, nPos, bRedraw); 스크롤바는 부모윈도우로 통..

WinAPI 2021.12.30

[WINAPI]컨트롤2(라디오 버튼, 에디트, 리스트박스)

라디오 버튼이란 ? 일종의 버튼이다. 체크 버튼은 진위적인 옵션을 개별적으로 입력받는데 비해 라디오버튼은 여러가지 선택사항들 중 한가지만 선택할 필요가 있을 때 사용한다. 즉, 하나의 선택사항에 대해 여러개의 라디오 버튼들이 사용된다는 특징이 있다. 라디오 그룹을 구성하는 방법은 간단하다. 첫번째 라디오 버튼에만 WS_GROUP 스타일을 주고 나머지는 주지 않으면 된다. 다음 WS_GROUP스타일을 가지는 라디오 버튼 직전까지가 한 그룹이 된다. checkRadioButton(부모윈도우, 버튼 범위의 시작, 버튼의 끝, 처음에 선택할 버튼); 버튼을 만든 후 위 함수를 호출하여 처음 선택 될 라디오 버튼을 지정한다. CreateWindow로 그룹박스를 만든다. CreateWindow로 라디오 버튼을 생성..

WinAPI 2021.12.30

[WINAPI]컨트롤1(버튼, 체크박스)

컨트롤의 정의 : 사용자와의 인터페이스를 이루는 도구이다. 즉, 사용자로부터 명령과 입력을 받아들이고 출력 결과를 보여준다는 뜻이다. 컨트롤은 하나의 윈도우다. : 화면상의 일정한 영역을 차지하면 자신의 고유 메시지를 처리할 수 있는 능력을 가지고 있다. 그렇다고 해서 메모장이나 탐색기 같은 진짜 윈도우처럼 타이틀 바나 경계선을 가지고 독립적으로 사용되는 것은 아니며 보통 대화상자의 차일드 윈도우로 존재한다. (반드시 부모윈도우의 차일드 윈도우로 존재해야함) 보통 윈도우를 만들때는 WNDCLASS형 구조체를 정의 하고 RegisterClass 함수로 등록을 한 후 CreateWindow 함수를 호출한다. 그러나 컨트롤은 윈도우즈가 운영체제 차원에서 제공하기 떄문에 윈도우 클래스를 등록할 필요없이 미리 등..

WinAPI 2021.12.30

[MFC] MFC 특징 복습

MFC는 클래스 라이브러리 이다. MFC를 공부해야하는 이유 : 실무를 하다가 모르는 것이 있으면 조언을 구하거나 인터넷에 원하는 자료를 검색해서 문제를 해결 해야한다. 그 자료나 소스가 MFC로 되어 있을 경우 스스로 API에 적용 할 수 있어야 한다. MFC는 OOP 기반이므로 캡슐화 추상화 정보은폐 상속 다형성 들의 언어적인 특성을 가진다. MFC는 모든것을 객체로 표현하고 객체를 모아 프로그램을 만든다. 객체안에 포함된 멤버함수로 이 객체의 모든 속성을 조절 할 수있다. MFC는 프레임워크라는 미리 만들어진 고드의 지원을 받기 때문에 모든것을 직접 코딩하지 않아도 미리 프로그래밍 되어있는 기능들을 공짜로 가져다가 쓸 수 있다. 기반 클래스에는 각 요소의 기본 기능이 이미 프로그래밍 되어있으므로 파..

MFC 2021.12.27

[MFC] 윈도우창 관련 함수(클라이언트창 크기 셋팅)

AfxGetMainWnd(); 함수는 현재 스레드의 메인 윈도우 핸들을 리턴한다. 전역함수로 선언 되어있다. 현재스레드의 메인 윈도우의 핸들을 부르는 것이기 때문에 스레드를 사용하는 프로그램에서는 원하지 않은 결과를 리턴할 수 있다. 즉, 다른 스레드에서 이 함수를 호출 할 경우 올바른 MainWnd를 호출할 수 없게 된다. 해결 방법 : AfxGetMainWnd() // 대신 AfxGetApp()->GetMainWnd()// 를 사용 참고: https://frostguy.tistory.com/37 AfxGetMainWnd()에서 문제가 발생할 경우 -AfxGetApp AfxGetApp() 전역 함수를 호출하게 되면 MFC 응용프로그램의 최초에 생성된 스레드의 app 를 반환해 준다. - AfxGetMa..

MFC 2021.12.24