본문 바로가기

프로그래밍 언어들

[MFC(Visual C++)] 다이얼로그 타이틀(border) 및 프레임 없애기 ModifyStyle(WS_CAPTION, 0); 을 하면 된다. #define WS_CAPTION 0x00C00000L /* WS_BORDER | WS_DLGFRAME */ ModifyStyle(0, WS_CAPTION); 을 하면 다시 보인다. 더보기
[MFC(Visual C++)] 자식 다이얼로그 최상위로 생성하기 // 자식 다이얼로그를 생성한다. (최상위로)m_pChildDlg= new CCapturedScreen();m_pChildDlg->Create(IDD_DLG_SCREEN, GetDesktopWindow());m_pChildDlg->SetWindowPos(&CWnd::wndTopMost, 0, 0, 1920, 1080, SWP_NOMOVE|SWP_SHOWWINDOW); CCapturedScreen은 자식 다이얼로그의 이름 위와 같이하면, 자식 다이얼로그를 생성하여 맨 앞에 둘 수 있다. 더보기
[MFC(Visual C++)] 바탕화면의 해상도 얻어오기 // CWindowDC 형식으로 DC를 얻어온다.HDC hScrDC= ::GetDC(NULL); // 현재 스크린의 해상도를 얻어온다.int nWidth= ::GetDeviceCaps(hScrDC, HORZRES);int nHeight= ::GetDeviceCaps(hScrDC, VERTRES); 더보기
[MFC(Visual C++)] 다이얼로그 기반 OnDraw 호출하기 다이얼로그 기반 환경에서는 기본적으로 OnPaint 함수만 존재한다. OnDraw 함수는 OnPaint 함수에서 호출하는 식으로 구성되어 있다. 보통 OnPaint는 화면 출력을 위한 함수이고, OnDraw는 화면 출력 및 프린터에도 관여하는 함수이다. 1. 헤더파일에 OnDraw 함수 선언 2. OnPaint 함수에서 OnDraw 호출 3. OnDraw 함수의 내용 구현 더보기
MFC(Visual C++) 엔터 및 백스페이스 종료 방지 1. PreTranslateMessage 함수 재정의 2. 아래와 같이 내용 삽입 더보기
CHAPTER16 - C++의 형변환 연산자 1. C++에서의 형 변환 연산 C언어의 형 변환 연산자는 강력하기 때문에, 아래 예제에서 보이는 실수를 해도 컴파일러는 이를 잡아내지 못한다. class car { private: int fuelgauge; public: car(const int fuel) : fuelgauge(fuel) {} void showcarstate(void) const { cout 기초 클래스로 형 변환 뿐만 아니라, 기초 -> 유도 클래스로 형 변환이 가능하다. 하지만 그에 대한 책임은 프로그래머가 져야 한다. 따라서, static_cast는 dynamic_cast 연산자와 달리, 보다 많은 형 변환을 허용한다. 그러나 dynamic_cast를 사용할 수 있는 경우에는 해당 연산자를 사용하여 안정성을 높여야 한다. 또한, .. 더보기
CHAPTER15 - 예외처리(Exception Handling) 1. 예외상황과 예외처리의 이해 예외처리에서의 '예외'는 프로그램 실행 도중에 발생하는 '예외적인 상황'을 의미한다. 그리고 C++은 이러한 예외적인 상황의 처리를 위한 문법을 별도로 제공하고 있다. 1.1 예외상황을 처리하지 않았을 때의 결과 C++에서 말하는 '예외(exception)'는 프로그램의 실행 도중에 발생하는 문제상황을 의미한다. 따라서 컴파일 시 발생하는 문법적인 에러는 예외의 범주에 포함되지 않는다. 몇 가지 상황을 예로 들면 다음과 같다. (1) 나이를 입력하라고 했는데, 0보다 작은 값이 입력되었다. (2) 나눗셈을 위한 두 개의 정수를 입력 받는데, 제수(나누는 수)로 0이 입력되었다. (3) 주민등록번호 13자리만 입력하라고 했더니, 중간에 -를 포함하여 14자리를 입력하였다. .. 더보기
CHAPTER14 - 템플릿(Template) 2 1. CHAPTER13에서 공부한 내용의 확장 C++ 표준 라이브러리는 템플릿을 기반으로 디자인된다. 따라서 템플릿을 잘 알면, 그만큼 라이브러리에 대한 이해도와 활용능력이 향상된다. 1.1 클래스 템플릿과 배열 클래스 템플릿 클래스 템플릿을 기반으로, 템플릿 클래스의 객체를 저장할 때에는 어떻게 생성해야 할까? 클래스 템플릿 기반의 객체 생성에는 일정한 규칙이 존재하기 때문에, 이는 어려운 문제가 아니다. 다음과 같이 객체를 생성하면, => BoundCheckArray arr(5); int형 데이터의 저장이 가능한 것처럼, 저장 대상의 자료형이 템플릿 클래스이니, 다음과 같이 객체를 생성할 수 있다. => BoundCheckArray arr(5); 그리고 저장 대상이 Point 템플릿 클래스의 객체가 .. 더보기
CHAPTER13 - 템플릿(Template) 1 1. 템플릿(Template)에 대한 이해와 함수 템플릿 1.1 함수를 대상으로 템플릿 이해하기 함수 템플릿은 함수를 만들어 낸다. 함수의 기능은 결정되어 있지만, 자료형은 결정되어 있지 않아서 결정해야 한다. 즉, '함수 템플릿'이란 함수를 만드는 도구이다. 함수 템플릿이 만들어 내는 함수의 자료형은 결정되어 있지 않다. int Add(int num1, int num2) { return num1 + num2; } 위 함수의 기능과 자료형은 다음과 같다. - 함수의 기능 : 덧셈 - 대상 자료형 : int형 데이터 이러한 함수를 만들어 낼 수 있는 템플릿은 다음과 같이 정의한다. T Add(T num1, T num2) { return num1 + num2; } 앞서 정의한 Add 함수와 비교해 보면, i.. 더보기
CHAPTER12 - String 클래스의 디자인 1. C++의 표준과 표준 String 클래스 string 클래스를 모델로 삼아서 연산자가 어떠한 형태로 오버로딩 되어 있는지 고민해 보고, 이와 유사한 문자열 처리 클래스를 직접 구현해 보는데 목적이 있다. 1.1 표준 string 클래스의 분석 먼저, string 클래스의 정의를 위해서 어떠한 것들이 요구되는지 하나씩 정리해 보겠다. (1) 문자열을 인자로 전달받는 생성자의 정의 (2) 생성자, 소멸자, 복사 생성자 그리고 대입 연산자의 정의 (3) 결합된 문자열로 초기화된 객체를 반환하는 + 연산자의 오버로딩 (4) 문자열을 덧붙이는 += 연산자의 오버로딩 (5) 내용비교를 진행하는 == 연산자의 오버로딩 (6) 콘솔입출력이 가능하도록 >>, 더보기