본문 바로가기

c++

제어판의 전원 옵션 구현하기 제어판의 전원 옵션 메뉴에는 전원을 관리하기 위한 옵션들을 수정할 수 있습니다.기본적으로 균형 조정, 고성능, 절전의 옵션이 존재합니다. 일부 노트북이나 대기업 PC의 경우 다른 옵션이 있을 수도 있습니다.설정 변경에 들어가면 디스플레이 끄기 시간과 절전 모드로 진입하는 시간을 설정할 수 있습니다.그리고 고급 전원 관리 옵션 설정 변경(C)를 누르면 세부 설정이 가능합니다.이 설정을 직접 가져오고 수정할 수 있는 API가 제공됩니다.Power Management Reference는 아래 링크를 통해서 확인할 수 있습니다.https://msdn.microsoft.com/en-us/library/windows/desktop/aa373170(v=vs.85).aspx실제 값을 가져오기 위한 간단한 코드는 다음과.. 더보기
MFC에서 커스텀 리소스(Custom Resource) 사용 방법 MFC를 활용해서 개발할 경우 Resource View에서 리소스를 확인할 수 있습니다.비트맵이나 아이콘, 다이얼로그, 메뉴 등이 포함되어 있습니다.이런 타입은 MFC 자체에서 지원하는 리소스 형식입니다.지원하는 타입이 아닌 다른 타입의 리소스를 추가해서 사용하기 위해서는 커스텀 리소스를 사용해야 합니다.바이너리나 텍스트 파일 등을 추가해서 가져오는 것이 가능합니다.간단하게 텍스트 파일을 리소스에 추가하고 가져오는 방법입니다.먼저 Resource View로 이동해서 새로운 리소스를 추가합니다.프로젝트명.rc라고 되어 있는 부분에 마우스 오른쪽 클릭을 하면 Add resource 메뉴를 선택합니다.리소스를 추가할 수 있는 다이얼로그가 표시됩니다. 오른쪽에 있는 Import... 버튼을 클릭합니다.파일 선택.. 더보기
MFC에서 엔터(Enter), ESC 입력시 종료되는 문제 해결 방법 MFC에서 프로그램을 개발할 때 엔터나 ESC를 누를 경우 프로그램이 종료되는 문제가 존재합니다.개발을 MFC로 진행하면 누구나 한 번쯤은 경험하게 됩니다.이 문제를 해결하기 위해 다음과 같은 방법으로 처리하면 됩니다.1. PreTranslateMessage() 메소드 재정의(Override)다이얼로그 베이스의 프로젝트를 생성하면 해당 프로젝트명Dlg.cpp와 .h파일이 생성됩니다.해당 클래스의 PreTranslateMessage() 메소드를 오버라이딩하는 방법입니다.이 메소드는 메시지가 처리되기 전에 호출이 되는 함수입니다.여기서 키보드의 엔터와 ESC 메시지를 거르게 하면 됩니다.먼저 Class Wizard를 실행(Ctrl + Shift + X)합니다.Class name에는 Dlg가 뒤에 붙은 클래스.. 더보기
shared_ptr에서 배열(array) delete[]로 해제하는 방법 shared_ptr은 C++에서 제공하는 스마트 포인터입니다.메모리의 관리가 까다로운 C++에서 유용하게 사용이 가능합니다.shared_ptr은 참조 카운트(Reference Count)를 통해서 메모리 해제 시점을 결정합니다.shared_ptr은 기본적으로 사용된 메모리를 delete로 해제하게 됩니다.배열(new [])이 저장되어 있을 경우에 배열의 해제를 할 수 있는 방법은 다음과 같습니다.1. delete[]를 호출하는 함수 객체를 생성초기화를 할 때 포인터와 함께 메모리를 해제할 때 사용할 함수를 전달하는 방법입니다.shared_ptr은 생성자에 메모리 해제를 위한 deleter를 전달할 수 있습니다.메모리 할당을 위한 함수를 전달하는 것도 가능합니다.함수 객체 혹은 함수를 전달해서 shared.. 더보기
IDesktopWallpaper를 활용한 윈도우 배경화면 변경하기 윈도우8에 IDesktopWallpaper 인터페이스가 추가되었습니다. 이 인터페이스를 활용하면 바탕화면의 배경화면을 변경할 수 있습니다. MSDN에서 다음과 같이 확인할 수 있습니다. https://msdn.microsoft.com/en-us/library/windows/desktop/hh706946(v=vs.85).aspx 메소드의 이름이 직관적이기 때문에 기능을 쉽게 알 수 있습니다. 배경화면의 색을 지정하거나 이미지, 슬라이드쇼의 설정이 가능합니다. 또한 화면의 해상도를 가져올 수도 있습니다. #include #include #include #include int main() { ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); CComPtr pWall.. 더보기
AfxMessageBox의 타이틀 변경 MFC에서 AfxMessageBox를 이용해서 팝업 메시지를 띄우면 exe파일의 이름을 타이틀로 사용합니다.MFCTest.exe에서 AfxMessageBox를 사용하면 다음과 같이 타이틀이 표시됩니다. AfxMessageBox(_T("Popup Test")); 화면에 다음과 같이 표시가 됩니다.MFCTest라는 타이틀로 표시가 됩니다.기본적인 타이틀 대신 새로운 타이틀로 사용하는 방법은 다음과 같습니다.1. exe 파일명 변경가장 간단한 방법은 exe 파일명을 변경하는 방법입니다.이 방법은 간단하지만 exe 파일명과 다른 타이틀을 사용하고 싶을 때는 사용할 수 없습니다.2. Resource의 String Table에 AFX_IDS_APP_TITLE을 추가String Table에 AFX_IDS_APP_TI.. 더보기
DLL을 dumpbin으로 볼 때 함수명 = _함수명 형태로 나올 때 dumpbin이라는 명령어를 사용해서 DLL이 노출하는 함수들을 확인할 수 있습니다.dumpbin은 일반 cmd에서는 실행되지 않습니다.Visual Studio를 설치한 이후에 Tools 메뉴의 Visual Studio Command Prompt에서 실행합니다.실행 방식은 다음과 같습니다. dumpbin /exports Mydll.dll 실행했을 때 다음과 같이 숫자(서수 정보)와 함께 함수명이 출력되는 것이 정상입니다.이렇게 표시되지 않고 함수명이 함수명 = _함수명의 형태로 출력되는 경우가 있습니다.다음과 같이 출력되는 경우입니다.AddFloat와 AddInteger만 표시되어야 하는데 다른 형태로 표시되고 있습니다.이 문제의 해결 방법은 다음과 같습니다.먼저 프로젝트 속성(Alt + F7)의 좌측 .. 더보기
Dialog 내부에 FormView 추가하기 Dialog를 생성하고 내부의 화면만 계속 변경하고 싶을 때가 있습니다.예를 들자면 Visual Studio에서 제공하는 환경설정 메뉴같은 경우입니다.좌측의 트리 형태의 메뉴를 선택하면 우측이 변경되는 모습을 확인할 수 있습니다. 이것을 구현하기 위해서 FormView 활용하는 방법을 고려할 수 있습니다.FormView는 Dialog과 유사하게 다른 컨트롤을 추가해서 사용할 수 있는 View입니다.필요에 따라 FormView를 작성하고 교체하는 방법을 사용하면 됩니다.먼저 MFC 프로젝트를 생성합니다.Dialog based로 변경하고 그 외에 필요한 설정을 합니다.나머지는 기본 설정으로 그냥 두고 생성하도록 하겠습니다.기본 Dialog에 버튼 2개를 추가합니다.이 버튼을 누르면 각각 다른 FormView.. 더보기