컴퓨터/프로그래밍2011. 4. 2. 21:16

'컴퓨터 > 프로그래밍' 카테고리의 다른 글

DB 쿼리 비교 (Index 비교)  (0) 2011.04.06
[WIKIBOOKS] More C++ Idioms 소개  (0) 2011.04.02
[링크] LLVM 퍼포먼스 비교  (0) 2011.04.02
OpenMP 소개  (0) 2011.04.02
MS SQL Server 테이블 수정 명령어  (0) 2011.04.01
Posted by jungtae17
컴퓨터/프로그래밍2011. 4. 2. 20:46
Compilers status: Visual C++, GCC and LLVM http://www.g-truc.net/post-0372.html



'컴퓨터 > 프로그래밍' 카테고리의 다른 글

[WIKIBOOKS] More C++ Idioms 소개  (0) 2011.04.02
[WIKIBOOKS] Optimizing C++ 소개  (0) 2011.04.02
OpenMP 소개  (0) 2011.04.02
MS SQL Server 테이블 수정 명령어  (0) 2011.04.01
UNICODE, ANSI 인코딩 변환  (0) 2011.01.27
Posted by jungtae17
컴퓨터/프로그래밍2011. 4. 2. 20:09


OpenMP http://www.openmp.org/

Official OpenMP Specifications
  1. C/C++ version 2.0 (March 2002) http://www.openmp.org/mp-documents/cspec20.pdf
  2. Version 3.0 Complete Specifications (May, 2008) http://www.openmp.org/mp-documents/spec30.pdf

OpenMP in Visual C++ (vs2008, vs2010) http://msdn.microsoft.com/en-us/library/tt15eb9t.aspx

Posted by jungtae17
컴퓨터/프로그래밍2011. 4. 1. 15:19


ALTER TABLE {테이블명}
    ADD {열이름} {데이터형} [[NOT] NULL] [CONSTRAINT {제약이름} DEFAULT (기본값)]
    DROP COLUMN {열이름}
    ALTER COLUMN {열이름} {데이터형} [[NOT] NULL] [CONSTRAINT {제약이름} DEFAULT (기본값)]

참고> http://msdn.microsoft.com/ko-kr/library/ms190273.aspx

EXEC sp_rename '테이블명.열이름', '새로운 열이름', 'COLUMN'

참고> http://msdn.microsoft.com/ko-kr/library/ms188351.aspx
Posted by jungtae17
컴퓨터/프로그래밍2011. 1. 27. 18:58
UNICODE 와 ANSI 문자열 사이에서 변환이 쉽지 않다.

C/C++ 에서는 간단한 함수를 제공하고 있어서 소개한다.
// STEP 0: 로케일 설정 (시스템의 기본 언어로 설정)
setlocale( LC_ALL, "" );

// STEP 1: 문자 변환
//   	STEP 1-1 ANSI ==> UNICODE
mbtowc( UNICODE 문자, ANSI 문자 );
//   	STEP 1-2: UNICODE ==> ANSI
wctomb( ANSI 문자, UNICODE 문자 );

// STEP 2: 문자열 변환
//	STEP 2-1: ANSI ==> UNICODE
mbstowcs( UNICODE 문자열, ANSI 문자열, UNICODE 문자열 최대길이 );
// 	STEP 2-2: UNICODE ==> ANSI
wcstombs( ANSI 문자열, UNICODE 문자열, ANSI 문자열 최대길이 );

UNICODE 사용 시 유용한 매크로

  • _countof() 매크로 : 문자 배열의 크기(문자 개수)
  • sizeof 연산자 : 문자배열의 Byte 수

Posted by jungtae17
컴퓨터/프로그래밍2011. 1. 21. 20:16
라이브러리나 API 호출 없이 간단한 방법으로 변환할 수 있다.
// std::string ==> std::wstring 변환
std::string  _str( "string" );
std::wstring _wstr;

_wstr.assign( _str.begin(), _str.end() );


// std::wstring ==> std::string 변환
std::wstring _wstr( L"string" );
std::string  _str;

_str.assign( _wstr.begin(), _wstr.end() );
Posted by jungtae17
컴퓨터/프로그래밍2011. 1. 20. 11:16
윈도우 프로그래밍 시 주로 MFC 를 사용하는데 파일 선택 대화상자(CFileDialog)는 있지만 폴더 선택 대화상자는 없다.

그래서 Win32 API로 간단히 폴더 선택 대화상자를 만드는 방법이 있어서 정리해 본다.


void OnBnClickedSelectFile()
{
	BROWSEINFO bi;

	TCHAR szTemp[ MAX_PATH ] = { 0, };

	TCHAR * pszPath = _T( "D:\\" );

	::ZeroMemory( &bi, sizeof( BROWSEINFO ) );

	bi.hwndOwner	= hWnd;
	bi.lpszTitle	= _T( "파일이 저장될 폴더를 선택해 주세요." );
	bi.ulFlags		= BIF_NEWDIALOGSTYLE | BIF_EDITBOX | BIF_RETURNONLYFSDIRS
						| BIF_STATUSTEXT | BIF_VALIDATE;
	bi.lpfn			= BrowseCallbackProc;
	bi.lParam		= (LPARAM)pszPath;

	LPITEMIDLIST pItemIdList = ::SHBrowseForFolder( &bi );

	if( ::SHGetPathFromIDList( pItemIdList, szTemp ) )
	{
		MessageBox( szTemp );
	}
}

static int CALLBACK BrowseCallbackProc( HWND hWnd, UINT uMsg, LPARAM lParam,
										LPARAM lpData )
{
	switch( uMsg )
	{
	case BFFM_INITIALIZED:		// 폴더 선택 대화상자를 초기화 할 때, 초기 경로 설정
		{
			::SendMessage( hWnd, BFFM_SETSELECTION, TRUE, (LPARAM)lpData );
		}
		break;

	// BROWSEINFO 구조체의 ulFlags 값에 BIF_STATUSTEXT 가 설정된 경우 호출
	// 단, BIF_NEWDIALOGSTYLE 가 설정되어 있을 경우 호출되지 않음
	case BFFM_SELCHANGED:		// 사용자가 폴더를 선택할 경우 대화상자에 선택된 경로 표시
		{
			TCHAR szPath[ MAX_PATH ] = { 0, };

			::SHGetPathFromIDList( (LPCITEMIDLIST)lParam, szPath );
			::SendMessage( hWnd, BFFM_SETSTATUSTEXT, 0, (LPARAM)szPath );
		}
		break;

	// BROWSEINFO 구조체의 ulFlags 값에 BIF_VALIDATE 가 설정된 경우 호출
	// BIF_EDITBOX 와 같이 설정된 경우만 호출됨
	case BFFM_VALIDATEFAILED:	// 에디터 콘트롤에서 폴더 이름을 잘못 입력한 경우 호출
		{
			::MessageBox( hWnd, _T( "해당 폴더를 찾을 수 없습니다." ), _T( "오류" ),
				MB_ICONERROR | MB_OK );
		}
		break;
	}

	return 0;
}
Posted by jungtae17
컴퓨터/프로그래밍2011. 1. 16. 22:15
Direct X 의 왼손 좌표계를 기준으로한 회전 공식입니다.

좌표 축 회전 공식
// Z축에 의한 회전
float DeltaX =  ( x * cos(q) ) + ( y * sin(q) );
float DeltaY = -( x * sin(q) ) + ( y * cos(q) );

// Y축에 의한 회전
float DeltaX = ( x * cos(q) ) - ( z * sin(q) );
float DeltaZ = ( x * sin(q) ) + ( z * cos(q) );

// X축에 의한 회전
float DeltaY =  ( y * cos(q) ) + ( z * sin(q) );
float DeltaZ = -( y * sin(q) ) + ( z * cos(q) );
Posted by jungtae17