윈도우 프로그래밍/C, C++, MFC에 해당하는 글 27

CString 문자열 추출 함수 - Left, Mid, Right

300x250

 

 

 

※ 요약

Left  : CString 개체의 문자열에서 왼쪽을 기준으로 문자열 추출

Mid : CString 개체의 문자열에서 지정한 중간 부분의 문자열 추출

Right : CString 개체의 문자열에서 오른쪽을 기준으로 문자열 추출

 

 

※ 함수 원형 및 설명

CString  Left( int nCount ) const;
//nCount : 왼쪽 기준 추출할 문자의 수
//반환값 : 추출된 문자열을 포함하는 CString 임시 개체

CString  Right( int nCount ) const;
//nCount : 오른쪽 기준 추출할 문자의 수
//반환값 : 추출된 문자열을 포함하는 CString 임시 개체

CString  Mid( int nFirst ) const;
CString  Mid( int nFirst, int nCount ) const;
//nFirst : 추출을 시작할 문자열의 위치
//nCount : 추출할 문자의 수
//반환값 : 추출된 문자열을 포함하는 CString 임시 개체

 

 

※ 예제

#include <atlstr.h>		//CString

int main( )
{
	CString strDate( "2022-06-08" );
	
	CString strYear;
	CString strMonth;
	CString strDay;

	strYear = strDate.Left( 4 );
	strMonth = strDate.Mid( 5, 2 );
	strDay = strDate.Right( 2 );
	
	printf( "%s년 %s월 %s일", strYear, strMonth, strDay );

	return 0;
}

 

 

300x250

댓글()

SysAllocStringLen 메모리 해제

300x250

 

 

 

아래는 ANSI 문자열에서 유니코드로의 변환 방법코드다.(MultiByteToWideChar)

 

여기서 SysAllocStringLen를 사용해서 메모리 할당 하게되면

SysFreeString로 메모리를 해제 해야 메모리가 올라가지 않는다.

(옛날 코드 보면 SysFreeString 없이 사용하기도 하는데 메모리 반환이 언제되는지 모름)

 // sTime이란 ANSI 문자열을 bstr이란 이름의 유니코드(BSTR 타입) 변수로 변환
 char sTime[] = "유니코드 변환 예제";
 BSTR bstr;
 // sTime을 유니코드로 변환하기에 앞서 먼저 그 길이를 알아야 한다.
 int nLen = MultiByteToWideChar(CP_ACP, 0, sTime, lstrlen(sTime), NULL, NULL);
 // 얻어낸 길이만큼 메모리를 할당한다.
 bstr = SysAllocStringLen(NULL, nLen);
 
 // 이제 변환을 수행한다.
 MultiByteToWideChar(CP_ACP, 0, sTime, lstrlen(sTime), bstr, nLen);
 
// 필요없어지면 제거한다.
SysFreeString(bstr);

 

 

 

300x250

댓글()

MFC KEY CODE 표

300x250

http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx

 

가상 키 코드(Winuser.h) - Win32 apps

다음 표에서는 시스템에서 사용하는 가상 키 코드에 해당하는 기호 상수 이름, 16진수 값 및 마우스 또는 키보드를 보여 줍니다. 코드는 숫자 순서로 나열됩니다.

docs.microsoft.com

 

 

 vKey

 가상키 코드(Virtual-Key Codes)입니다.

 여기에 확인하고자 하는 키를 입력합니다.

아래 표는 가상키 코드입니다.

 

        if (GetAsyncKeyState(VK_SPACE) & 0x8000)

        {

            MessageBox(hWnd, TEXT("스페이스 바를 눌렀습니다."), TEXT("GetAsyncKeyState"), MB_OK);

        }

VK_LBUTTON 0x01 왼쪽 마우스 단추
VK_RBUTTON 0x02 마우스 오른쪽 단추
VK_CANCEL 0x03 제어 중단 처리
VK_MBUTTON 0x04 마우스 가운데 단추(3개 단추 마우스)
VK_XBUTTON1 0x05 X1 마우스 단추
VK_XBUTTON2 0x06 X2 마우스 단추
- 0x07 정의되지 않음
VK_BACK 0x08 BACKSPACE 키
VK_TAB 0x09 Tab 키
- 0x0A-0B 예약됨
VK_CLEAR 0x0C CLEAR 키
VK_RETURN 0x0D Enter 키
- 0x0E-0F 정의되지 않음
VK_SHIFT 0x10 SHIFT 키
VK_CONTROL 0x11 Ctrl 키
VK_MENU 0x12 Alt 키
VK_PAUSE 0x13 PAUSE 키
VK_CAPITAL 0x14 CAPS LOCK 키
VK_KANA 0x15 IME 가나 모드
VK_HANGUEL 0x15 IME 한글 모드(호환성을 위해 유지 관리됨, 사용 VK_HANGUL)
VK_HANGUL 0x15 IME 한글 모드
VK_IME_ON 0x16 IME 켜기
VK_JUNJA 0x17 IME 전자 모드
VK_FINAL 0x18 IME 최종 모드
VK_HANJA 0x19 IME 한자 모드
VK_KANJI 0x19 IME 간지 모드
VK_IME_OFF 0x1A IME 끄기
VK_ESCAPE 0x1B ESC 키
VK_CONVERT 0x1C IME 변환
VK_NONCONVERT 0x1D IME 변환 안 함
VK_ACCEPT 0x1E IME 수락
VK_MODECHANGE 0x1F IME 모드 변경 요청
VK_SPACE 0x20 스페이스바
VK_PRIOR 0x21 PAGE UP 키
VK_NEXT 0x22 PAGE DOWN 키
VK_END 0x23 END 키
VK_HOME 0x24 HOME 키
VK_LEFT 0x25 왼쪽 화살표 키
VK_UP 0x26 위쪽 화살표 키
VK_RIGHT 0x27 오른쪽 화살표 키
VK_DOWN 0x28 아래쪽 화살표 키
VK_SELECT 0x29 SELECT 키
VK_PRINT 0x2A PRINT 키
VK_EXECUTE 0x2B EXECUTE 키
VK_SNAPSHOT 0x2C 인쇄 화면 키
VK_INSERT 0x2D INS 키
VK_DELETE 0x2E DEL 키
VK_HELP 0x2F 도움말 키
  0x30 0 키
  0x31 키 1개
  0x32 키 2개
  0x33 키 3개
  0x34 4 키
  0x35 키 5개
  0x36 키 6개
  0x37 7 키
  0x38 8개 키
  0x39 9개 키
- 0x3A-40 정의되지 않음
  0x41
  0x42 B 키
  0x43 C 키
  0x44 D 키
  0x45 E 키
  0x46 F 키
  0x47 G 키
  0x48 H 키
  0x49 I 키
  0x4A J 키
  0x4B K 키
  0x4C L 키
  0x4D M 키
  0x4E N 키
  0x4F O 키
  0x50 P 키
  0x51 Q 키
  0x52 R 키
  0x53 S 키
  0x54 T 키
  0x55 U 키
  0x56 V 키
  0x57 W 키
  0x58 X 키
  0x59 Y 키
  0x5A Z 키
VK_LWIN 0x5B 왼쪽 Windows 키(자연 키보드)
VK_RWIN 0x5C 오른쪽 Windows 키(자연 키보드)
VK_APPS 0x5D 애플리케이션 키(자연 키보드)
- 0x5E 예약됨
VK_SLEEP 0x5F 컴퓨터 절전 키
VK_NUMPAD0 0x60 숫자 키패드 0 키
VK_NUMPAD1 0x61 숫자 키패드 1 키
VK_NUMPAD2 0x62 숫자 키패드 2 키
VK_NUMPAD3 0x63 숫자 키패드 3 키
VK_NUMPAD4 0x64 숫자 키패드 4 키
VK_NUMPAD5 0x65 숫자 키패드 5 키
VK_NUMPAD6 0x66 숫자 키패드 6 키
VK_NUMPAD7 0x67 숫자 키패드 7 키
VK_NUMPAD8 0x68 숫자 키패드 8 키
VK_NUMPAD9 0x69 숫자 키패드 9 키
VK_MULTIPLY 0x6A 곱하기 키
VK_ADD 0x6B 키 추가
VK_SEPARATOR 0x6C 구분 기호 키
VK_SUBTRACT 0x6D 키 빼기
VK_DECIMAL 0x6E 10진수 키
VK_DIVIDE 0x6F 키 나누기
VK_F1 0x70 F1 키
VK_F2 0x71 F2 키
VK_F3 0x72 F3 키
VK_F4 0x73 F4 키
VK_F5 0x74 F5 키
VK_F6 0x75 F6 키
VK_F7 0x76 F7 키
VK_F8 0x77 F8 키
VK_F9 0x78 F9 키
VK_F10 0x79 F10 키
VK_F11 0x7A F11 키
VK_F12 0x7B F12 키
VK_F13 0x7C F13 키
VK_F14 0x7D F14 키
VK_F15 0x7e F15 키
VK_F16 0x7F F16 키
VK_F17 0x80 F17 키
VK_F18 0x81 F18 키
VK_F19 0x82 F19 키
VK_F20 0x83 F20 키
VK_F21 0x84 F21 키
VK_F22 0x85 F22 키
VK_F23 0x86 F23 키
VK_F24 0x87 F24 키
- 0x88-8F 할당되지 않음
VK_NUMLOCK 0x90 NUM LOCK 키
VK_SCROLL 0x91 SCROLL LOCK 키
  0x92-96 OEM 관련
- 0x97-9F 할당되지 않음
VK_LSHIFT 0xA0 왼쪽 Shift 키
VK_RSHIFT 0xA1 오른쪽 Shift 키
VK_LCONTROL 0xA2 왼쪽 Ctrl 키
VK_RCONTROL 0xA3 오른쪽 Ctrl 키
VK_LMENU 0xA4 왼쪽 메뉴 키
VK_RMENU 0xA5 오른쪽 메뉴 키
VK_BROWSER_BACK 0xA6 브라우저 뒤로 키
VK_BROWSER_FORWARD 0xA7 브라우저 앞으로 키
VK_BROWSER_REFRESH 0xA8 브라우저 새로 고침 키
VK_BROWSER_STOP 0xA9 브라우저 중지 키
VK_BROWSER_SEARCH 0xAA 브라우저 검색 키
VK_BROWSER_FAVORITES 0xAB 브라우저 즐겨찾기 키
VK_BROWSER_HOME 0xAC 브라우저 시작 및 홈 키
VK_VOLUME_MUTE 0xAD 볼륨 음소거 키
VK_VOLUME_DOWN 0xAE 볼륨 다운 키
VK_VOLUME_UP 0xAF 볼륨 업 키
VK_MEDIA_NEXT_TRACK 0xB0 다음 트랙 키
VK_MEDIA_PREV_TRACK 0xB1 이전 트랙 키
VK_MEDIA_STOP 0xB2 미디어 중지 키
VK_MEDIA_PLAY_PAUSE 0xB3 미디어 재생/일시 중지 키
VK_LAUNCH_MAIL 0xB4 시작 메일 키
VK_LAUNCH_MEDIA_SELECT 0xB5 미디어 키 선택
VK_LAUNCH_APP1 0xB6 애플리케이션 1 키 시작
VK_LAUNCH_APP2 0xB7 애플리케이션 2 키 시작
- 0xB8-B9 예약됨
VK_OEM_1 0xBA 기타 문자에 사용됩니다. 키보드에 따라 달라질 수 있습니다. 미국 표준 키보드의 경우 ';:' 키
VK_OEM_PLUS 0xBB 모든 국가/지역의 경우 '+' 키
VK_OEM_COMMA 0xBC 모든 국가/지역의 경우 ',' 키
VK_OEM_MINUS 0xBD 모든 국가/지역의 경우 '-' 키
VK_OEM_PERIOD 0xBE 모든 국가/지역의 경우 '.' 키
VK_OEM_2 0xBF 기타 문자에 사용됩니다. 키보드에 따라 달라질 수 있습니다. 미국 표준 키보드의 경우 '/?' key
VK_OEM_3 0xC0 기타 문자에 사용됩니다. 키보드에 따라 달라질 수 있습니다. 미국 표준 키보드의 경우 ''~' 키
- 0xC1-D7 예약됨
- 0xD8-DA 할당되지 않음
VK_OEM_4 0xDB 기타 문자에 사용됩니다. 키보드에 따라 달라질 수 있습니다. 미국 표준 키보드의 경우 '[{' 키
VK_OEM_5 0xDC 기타 문자에 사용됩니다. 키보드에 따라 달라질 수 있습니다. 미국 표준 키보드의 경우 '\|' 키
VK_OEM_6 0xDD 기타 문자에 사용됩니다. 키보드에 따라 달라질 수 있습니다. 미국 표준 키보드의 경우 ']}' 키
VK_OEM_7 0xDE 기타 문자에 사용됩니다. 키보드에 따라 달라질 수 있습니다. 미국 표준 키보드의 경우 '큰따옴표/큰따옴표' 키
VK_OEM_8 0xDF 기타 문자에 사용됩니다. 키보드에 따라 달라질 수 있습니다.
- 0xE0 예약됨
  0xE1 OEM 관련
VK_OEM_102 0xE2 <> 미국 표준 키보드의 키 또는 \\| 미국 이외의 102 키 키보드의 키
  0xE3-E4 OEM 관련
VK_PROCESSKEY 0xE5 IME 프로세스 키
  0xE6 OEM 관련
VK_PACKET 0xE7 유니코드 문자를 키 입력인 것처럼 전달할 때 사용합니다. 키는 VK_PACKET 키보드가 아닌 입력 메서드에 사용되는 32비트 가상 키 값의 소문자입니다. 자세한 내용은 다음에서 비고를 참조하세요.KEYBDINPUTSendInputWM_KEYDOWNWM_KEYUP
- 0xE8 할당되지 않음
  0xE9-F5 OEM 관련
VK_ATTN 0xF6 Attn 키
VK_CRSEL 0xF7 CrSel 키
VK_EXSEL 0xF8 ExSel 키
VK_EREOF 0xF9 EOF 키 지우기
VK_PLAY 0xFA 재생 키
VK_ZOOM 0xFB 확대/축소 키
VK_NONAME 0xFC 예약됨
VK_PA1 0xFD PA1 키
VK_OEM_CLEAR 0xFE 키 지우기
300x250

댓글()

반올림,올림,내림,버림 - round,ceil,floor,trunc

300x250

 

소수점 처리하는 함수에 대하여 단순히 반올림, 올림, 내림, 버림으로 외우고 있다면,

아래 정수를 선택하는 방향에 대해 숙지를 하는게 좋다.

 

만약 기존처럼 

ceil = 올림, floor = 내림 으로 알고만 있다면

(-)음수 처리 시 실수 할 수 있다.

버림 floor(-2.6) 은 -2 가 되는게 아니라 -3이 된다.

 

 

round() 반올림

가장 가까운 정수 선택

round(2.1)   // 결과 : 2
round(-2.6)  // 결과 : -3

 

ceil() 올림

+(양수) 방향으로 가까운 정수 선택

ceil(2.1);  // 결과 : 3
ceil(-2.6); // 결과 : -2

 

floor() 내림

-(음수) 방향으로 가까운 정수 선택

floor(2.1);  // 결과 : 2
floor(-2.6); // 결과 : -3

 

trunc() 버림

0의 방향으로 가까운 정수 선택

trunc(2.1);  // 결과 : 2
trunc(-2.6); // 결과 : -2

 

 

 

300x250

'윈도우 프로그래밍 > C, C++, MFC' 카테고리의 다른 글

SysAllocStringLen 메모리 해제  (0) 2022.06.07
MFC KEY CODE 표  (0) 2022.06.02
Matlab fix c변환  (0) 2022.05.25
지원되지 않는 작업을 시도했습니다.  (0) 2022.05.16
c++ 함수 const 위치별 차이  (0) 2021.12.25

댓글()