본문 바로가기

Programming

[DirectSound] 2. Wave 파일을 읽기 DirectSound를 통해서 Wave(wav)를 재생하기 위해서 먼저 파일을 읽어야 합니다. Wave 파일의 포맷은 다음 링크를 통해서 확인할 수 있습니다. 2015/06/13 - [Programming/DirectX] - [DirectSound] 1. Wave 파일의 구조 포맷을 알면 일반적인 파일 I/O를 통해서 읽는 것도 가능합니다. 윈도우에서는 좀 더 효율적인 방법으로 읽을 수 있도록 Multimedia API를 제공합니다. Multimedia API가 제공하는 기능 중의 하나가 Wave 파일을 읽고 재생하는 기능입니다. 이것을 사용하기 위해서는 먼저 다음과 같이 헤더를 추가해야 합니다. #include 그리고 프로젝트 속성의 Linker 메뉴에서 Additional Dependencies(추가.. 더보기
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.. 더보기
Visual Studio 2012 Update 1 다운로드(XP 호환성 문제 해결) Visual Studio 2012에서 작성하는 C++ 프로그램들이 정상적으로 실행이 되지 않는 문제점이 있습니다.Visual Studio 2012에서 작성한 프로그램을 XP에서 실행하면 다음과 같은 오류를 보게 됩니다.MFC 다이얼로그 프로그램이 정상적으로 실행되지 않습니다.이러한 이유로 Visual Studio 2012가 문제가 되었습니다.해당 이슈는 Visual Studio 2012 Update 1를 설치하면 해결됩니다.업데이트는 Visual Studio의 Tools 메뉴의 Extensions and Updates를 설치하면 됩니다.현재는 업데이트가 많이 진행되었기 때문에 최신 업데이트를 설치하면 됩니다.기존의 C++ 프로젝트의 속성을 확인하면 다음을 확인할 수 있습니다.업데이트를 받아서 설치하면 X.. 더보기
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.. 더보기
IAutoComplete를 이용한 자동 완성(Auto Complete) 기능 구현 웹 브라우저나 탐색기의 주소창에서 글자가 입력될 때마다 하단의 리스트가 갱신되는 것을 볼 수 있습니다. 이 기능은 자동 완성(Auto Complete)라는 기능입니다. 자동 완성은 SHAutoComplete()라는 API를 사용해서 간단하게 구현이 가능합니다. 이 함수를 사용하면 URL이나 폴더 경로를 간단하게 자동 완성이 가능하게 할 수 있습니다. 웹 브라우저나 탐색기의 주소창과 동일한 기능을 하는 텍스트 박스를 만들 수 있습니다. SHAutoComplete() 함수는 에디트 컨트롤의 핸들(HWND)과 플래그를 전달 받습니다. 함수의 원형은 다음과 같습니다. HRESULT SHAutoComplete(HWND hwndEdit, DWORD dwFlags); 이 방법으로 주소를 쉽게 적용하는 것이 가능합니다.. 더보기
라디오 버튼의 Warning: skipping non-radio button in group. 경고 제거 MFC에서 라디오 버튼을 추가해서 사용하다보면 간혹 이런 경고를 보게 됩니다.Warning: skipping non-radio button in group.에러가 아니기 때문에 실행에는 문제가 발생하지 않습니다.라디오 버튼을 추가할 때 처음 라디오 버튼의 Properties의 Group 속성을 True로 합니다.그리고 그 이후의 라디오 버튼들은 False로 설정합니다.처음 Group 속성이 True인 컨트롤부터 다음 Group 속성이 True인 컨트롤이 나오기 전까지가 그룹이 됩니다.첫 번째 라디오 버튼이 Group 속성이 True이고 그 이후의 라디오 버튼은 False입니다.그리고 그 다음에 다른 컨트롤이 Group 속성이 True이면 라디오 버튼이 정상적으로 그룹이 되는 것입니다.이 경고가 발생했을 .. 더보기
DLL을 dumpbin으로 볼 때 함수명 = _함수명 형태로 나올 때 dumpbin이라는 명령어를 사용해서 DLL이 노출하는 함수들을 확인할 수 있습니다.dumpbin은 일반 cmd에서는 실행되지 않습니다.Visual Studio를 설치한 이후에 Tools 메뉴의 Visual Studio Command Prompt에서 실행합니다.실행 방식은 다음과 같습니다. dumpbin /exports Mydll.dll 실행했을 때 다음과 같이 숫자(서수 정보)와 함께 함수명이 출력되는 것이 정상입니다.이렇게 표시되지 않고 함수명이 함수명 = _함수명의 형태로 출력되는 경우가 있습니다.다음과 같이 출력되는 경우입니다.AddFloat와 AddInteger만 표시되어야 하는데 다른 형태로 표시되고 있습니다.이 문제의 해결 방법은 다음과 같습니다.먼저 프로젝트 속성(Alt + F7)의 좌측 .. 더보기