본문 바로가기

c++

CString 토큰(Token)으로 분리시키기(AfxExtractSubString) C/C++에는 기본적으로 C의 strtok을 통해서 토큰으로 문자열 분리가 가능합니다.토큰(Token)이라는 지정된 문자를 기준으로 문자열을 쪼개면서 추출이 가능합니다.만약 문자열이 "Hello#World"이고 토큰이 '#'이면 다음과 같이 결과를 얻을 수 있습니다.HelloWorldMFC에서도 동일한 기능의 함수가 제공됩니다.AfxExtractSubString() 함수를 통해서 동일한 기능을 제공합니다.먼저 strtok()은 몇 가지 문제점을 가지고 있습니다.원본이 훼손되며 thread-safe하지 않다는 점입니다.strtok()은 두 번째 호출부터는 NULL을 전달합니다.토큰의 위치를 식별하기 위해서 별도의 static 변수를 관리하고 있기 때문입니다.이 변수로 인해서 strtok()을 동시에 쓰면 .. 더보기
Vista 이후 OS에서 Mic, Speaker 볼륨 셋팅 Windows XP까지 사용하던 볼륨 조절 방법은 CMixer를 사용하는 방법입니다.CMixer를 통해서 볼륨 조절이 가능했습니다.Windows Vista와 Windows 7 이후는 CMixer로 볼륨 조절이 되지 않습니다.Vista부터 Endpoint Volume Controls라는 것이 추가되었습니다.MSDN의 예제를 통해서 볼륨을 조절하는 방법에 대해서 알아봤습니다. Visual Studio 2013을 열고 Win32 Project를 생성합니다.프로젝트 이름은 VolumeControl로 생성했습니다.Empty project 옵션에 체크하고 프로젝트를 생성합니다.먼저 관련된 모든 소스 파일은 아래 링크를 클릭하면 다운로드 받을 수 있습니다.Epvolume.h 파일을 하나 추가해주시고 다음과 같은 코드.. 더보기
파일명 변경하는 API 함수 목록 콘솔창을 연 상태에서 다음 명령어를 실행하면 다음과 같은 결과를 볼 수 있습니다. ren /? 간단하게 파일 이름을 변경할 수 있는 방법을 제공합니다.다음은 코드를 통해서 파일 이름을 변경하는 방법입니다.파일 이름을 변경하는 몇 가지 방법이 존재합니다.1. MFC의 CFile::Rename()을 활용하는 방법이 함수는 두 개의 LPCTSTR 타입의 인자를 전달받습니다.첫 번째는 lpszOldName이고, 두 번째가 lpszNewName입니다.사용법은 이전 파일 파일의 경로, 변경할 파일 경로를 전달하면 됩니다.이 메소드는 static 형식이기 때문에 클래스의 인스턴스가 필요하지 않습니다.다음과 같은 형태로 사용하면 됩니다. CFile::Rename(_T("OldName"), _T("NewName")); .. 더보기
C++ REST SDK(Casablanca) 설치 방법 MS에서 제공하는 프로젝트의 하나인 REST SDK의 설치 방법입니다.Casablanca라는 코드명을 가진 프로젝트입니다.modern asynchronous C++ API 디자인을 사용하는 cloud-based client-server communication입니다.프로젝트에 대한 정보는 아래의 링크에서 확인이 가능합니다.https://casablanca.codeplex.com/이전 버전의 경우는 다운로드를 제공했지만 현재는 Nuget Package를 통해서 적용이 가능합니다.C++ REST SDK를 적용하는 방법입니다.먼저 Visual Studio 2013을 실행합니다.간단한 콘솔 프로젝트를 생성합니다.설정을 바꾸지 않고 프로젝트를 생성합니다.C++ REST SDK를 받기 위해서 임시로 생성하는 프로젝.. 더보기
특수한 폴더의 경로를 알아오기 Windows를 사용하다보면, 특수한 폴더들이 몇 군데 있습니다.일단 대표적인 게 Windows가 설치된 폴더, System 폴더가 있습니다.바탕화면 폴더, 폰트 폴더 등도 특수한 폴더에 속합니다.이러한 폴더 주소는 사용자마다 다를 수 있기 때문에 프로그래밍시에 직접 넣는 것은 위험할 수 있습니다.쉘 함수 중에 이런 특수한 폴더의 경로를 알아내는 함수가 존재합니다. HRESULT SHGetSpecialFolderLocation(HWND hwndOwner, int nFolder, PIDLIST_ABSOLUTE *ppidl) SHGetSpecialFolderLocation() 라는 함수입니다.첫 번째 인자는 미래를 위해서 예약된 인자이므로 NULL을 넣어줍니다.두 번째 인자가 가장 중요한 부분인데 원하는 폴.. 더보기
MFC 다이얼로그, SDI, MDI의 최소 크기(Size) 설정 MFC에서 프로젝트를 만들 때 SDI, MDI, 다이얼로그 중에 하나를 선택합니다.만들어진 창이 최소 크기나 최대 크기가 정해지면 좋을 때가 있습니다.버튼들이 배치가 되어있는데 창이 타이틀만 남겨놓고 줄어드는 것은 그리 좋아 보이지 않습니다.이 창들의 최소 크기를 정하는 방법을 알아보겠습니다.같은 방법으로 이 방법으로 최대 크기의 수정도 가능합니다.먼저 프로젝트를 생성하면 다음과 같이 MainFrm.h가 생깁니다.SDI, MDI에서는 MainFrm.h이지만 다이얼로그에서는 약간 다르게 생성이 됩니다.프로젝트명Dlg.h 라는 파일이 생기게 됩니다.각자 해당하는 파일을 엽니다.여기서는 SDI를 기준으로 설명하겠습니다.헤더 파일에 커서를 주면 좌측에 속성에 다음과 같이 나오게 됩니다.그럼 빨간색 네모 안의 아.. 더보기
MFC의 CFileFind를 이용한 파일명 열거 MFC에서는 파일을 찾고 나열하기 쉽도록 CFileFind라는 클래스가 존재합니다.이 클래스를 사용하면 굉장히 편리하게 파일을 나열할 수 있습니다.소스 코드는 다음과 같습니다.찾을 파일의 형식이나 파일명을 지정하고 검색을 하시면 됩니다.이것은 MSDN에 나온 예제입니다. CFileFind finder; BOOL bWorking = finder.FindFile("*.*"); while (bWorking) { bWorking = finder.FindNextFile(); cout 더보기
CRect의 DeflateRect() 메소드 CRect는 사각형의 좌표를 저장하고 이 좌표를 더 유용하게 쓸 수 있는 메소드를 갖고 있는 클래스입니다.이 클래스 중에는 DeflateRect()라는 메소드가 존재합니다.이 메소드는 Deflate의 의미(오므라들다, 수축시키다)와 같이 사각형 정보를 줄이는 역할을 합니다.DeflateRect()가 어떻게 찌그러뜨리는지 확인해 보도록 하겠습니다. 간단하게 다이얼로그 기반으로 만들고 OnPaint() 부분을 조금 수정해 줍니다. void CAlwaysOnTopDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetS.. 더보기