'개발이야기'에 해당되는 글 26건

  1. 폴더선택 다이얼로그와 초기폴더경로 설정
  2. MFC Control 오픈소스 모음
  3. 3D 다이아몬드
  4. MD5 Checksum 모듈
  5. Mangled Name
  6. fscanf_s 주의사항


//
// 폴더선택 다이얼로그를 구현하기 위해 사용되는 사용자정의 Callback 함수
//
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
	switch (uMsg) {
		// 폴더선택 다이얼로그의 초기화가 끝난 경우
	case BFFM_INITIALIZED:
		SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
		break;
	}
	return 0;
}

//
// 폴더선택 다이얼로그
//
void SelectFolder()
{
	ITEMIDLIST	*pidlBrowse;
	WCHAR		pszPathname[MAX_PATH];

	BROWSEINFO	BrInfo;
	BrInfo.hwndOwner = GetSafeHwnd();
	BrInfo.pidlRoot = NULL;

	memset(&BrInfo, 0x00, sizeof(BrInfo));
	BrInfo.pszDisplayName = pszPathname;
	BrInfo.lpszTitle = _T("Select folder");
	BrInfo.ulFlags = BIF_RETURNONLYFSDIRS;

	// 이벤트에 대한 사용자정의 함수
	BrInfo.lpfn = BrowseCallbackProc;

	// 사용자정의 함수에 넘겨질 인자로 사용자가 설정하고자 하는 경로를 설정한다.
	// 예를들어 초기폴더경로를 C드라이브로 설정하는 경우
	CString strInitPath = _T("C:\\");
	BrInfo.lParam = (LPARAM)strInitPath.GetBuffer();

	pidlBrowse = ::SHBrowseForFolder(&BrInfo);
	if(pidlBrowse != NULL)
	{
		// 선택된 폴더 경로얻음
		SHGetPathFromIDList(pidlBrowse, pszPathname);
		
		// 경로(pszPathname)를 이용하여 이후작업 추가
	}
}


'개발이야기 > MFC' 카테고리의 다른 글

로컬 IP주소 얻기  (0) 2012.05.17
유니코드 ↔ 안시 변환함수  (0) 2012.05.16
MFC Control 오픈소스 모음  (0) 2012.05.13
3D 다이아몬드  (0) 2012.05.13
MD5 Checksum 모듈  (0) 2012.05.13

'개발이야기 > MFC' 카테고리의 다른 글

유니코드 ↔ 안시 변환함수  (0) 2012.05.16
폴더선택 다이얼로그와 초기폴더경로 설정  (0) 2012.05.15
3D 다이아몬드  (0) 2012.05.13
MD5 Checksum 모듈  (0) 2012.05.13
fscanf_s 주의사항  (0) 2012.05.12


제작년도 : 2006

제작버전 : Visual Studio 6

프로젝트 : 3D 다이아몬드

팀  명 : Carpe Diem

팀  원 : 김정수, 권기학, 김찬현, 안재훈


대학교 수업 프로젝트 과제로 제출한 작품이다. 

MFC를 한창 배울때이고 게임을 만들어본 경험이 거의 없던지라 팀원들과 고생고생 하면서 만든 기억이 난다.

올린 버전은 풀 버전은 아니며, 풀버전은 게임 인트로, 네트워크 설정, 대화방, 멀티플레이 게임등 다양한 기능을 제공하는데

멀티플레이 게임 부분을 그때당시 시간이 부족하여 미완성으로 남기게 되었다.

단순히, 현재 버전에서는 개인 플레이만 가능하다.


당시 프리젠테이션을 했던 PPT 내용이다. 

재훈이형의 하룻밤샘 결과로... 그때당시 PPT로는 쉽게 볼수없는 애니메이션을 구현해 보는이의 대부분을 놀라게 하였다.

실제 프리젠테이션이 끝나고 PPT 소스 요청이 왔을 정도로... 멋지다.


※ 게임특징

1. 3D 공간(?) 을 활용한 원근감 표현

2. 구슬 애니메이션 

구슬이 반짝 빛나도록 애니메이션 진행

3. 2~6인 플레이 

4. 아이템전

아이템 효과는 위 PPT내용 참조

5. 타임오버

대기시간을 소모하면 다음사람의 턴으로 바뀜

6. 게임오버

모든 구슬이 목적지까지 전부 도달하면 게임 종료

※ 게임설정 정보(생성자)

m_nWaitCount = 0;          // 대기 시간 카운트 
m_nPlayer = 6;             // 플레이어 수
m_nStats = 0;              // 클릭 상태
m_nWait = 10;              // 대기 타임
m_bCheckMove = FALSE;      // ┏━━━━━━━━━━┓
m_bCheckType = FALSE;      // ┃                 
m_bCheckFire = FALSE;      // ┃                 
m_bCheckWaitAni = FALSE;   // ┃ 이 변수들은 특정  
m_bCheckGameOver = FALSE;  // ┃ 이벤트시 발생하는 
m_bCheckItemCount = TRUE;  // ┃ 애니메이션을      
m_bCheckWaitCount = TRUE;  // ┃ 컨트롤 하는 변수  
m_bCheckStartCount = TRUE; // ┃ 들이다.          
m_bCheckOverCount = TRUE;  // ┃                 
m_bCheckFireCount = TRUE;  // ┃                 
m_bCheckStart = TRUE;      // ┗━━━━━━━━━━┛ 
m_bCheckItem = TRUE;       // 아이템전 체크
m_bCheckWait = TRUE;       // 대기시간 체크
m_nCurType = HUMAN_RED;    // 처음 시작할 구슬


다운로드:  PrinceGame.ppt  PrinceGame.zip  Release.zip

'개발이야기 > MFC' 카테고리의 다른 글

유니코드 ↔ 안시 변환함수  (0) 2012.05.16
폴더선택 다이얼로그와 초기폴더경로 설정  (0) 2012.05.15
MFC Control 오픈소스 모음  (0) 2012.05.13
MD5 Checksum 모듈  (0) 2012.05.13
fscanf_s 주의사항  (0) 2012.05.12

‘미리컴파일된 헤더 사용하지 않음 ‘을 하지 않아도 되는 MD5 모듈이다.

사용법도 나름 편리한거 같고…

MD5값이 PHP에서 제공하는 MD5값과 동일하다. (MD5결과값 확인)


※ 파일구성

MD5ChecksumDefines.h

MD5Checksum.h

MD5Checksum.cpp


※ 정의

static CString GetMD5(BYTE* pBuf, UINT nLength);
static CString GetMD5(CFile& File);
static CString GetMD5(const CString& strFilePath);


※ 사용방법

프로젝트 폴더에 파일을 복사하고

프로젝트 → 기존항목추가 → 위 3파일 전부선택 후 추가하고 다음과 같이 코드작성

// 헤더파일
#include "MD5 v1.2/MD5ChecksumDefines.h"
#include "MD5 v1.2/MD5Checksum.h"


// 사용예제
char *pszInput = "test";
 
CString strCheckSum;
strCheckSum = CMD5Checksum::GetMD5((BYTE *)pszInput, strlen(pszInput));


다운로드:  MD5Checksum.zip

'개발이야기 > MFC' 카테고리의 다른 글

유니코드 ↔ 안시 변환함수  (0) 2012.05.16
폴더선택 다이얼로그와 초기폴더경로 설정  (0) 2012.05.15
MFC Control 오픈소스 모음  (0) 2012.05.13
3D 다이아몬드  (0) 2012.05.13
fscanf_s 주의사항  (0) 2012.05.12

프로그래밍에 관련된 가이드 문서를 읽던 중...

"LLVM에서 llvm-nm 툴을 이용하여 C++의 Mangled Name을 Demangled 할수 있다" 라는 말을 접하게 되었다.

하지만 아무리 읽어보아도 Mangled Name이 어떤 의미를 갖는지 잘 이해가 가지 않았다.

알아본 결과...

 

Mangled Name은 C와 C++ Linking 과정의 차이에서 알아볼 수 있었다.

  • C는 Overloading을 지원하지 않는 언어이다. 따라서 함수를 단순히 '함수의 이름(Symbol)으로 구분'하여 Linking을 한다.
  • C++은 Overloading을 지원하는 언어이다. 단순히 함수의 이름만으로 어떤 함수를 호출할지 '정확히 구분'할 수 없다. 함수의 이름과 더불어, Parameter의 종류, 개수의 정보도 포함시켜야 Linking시에 Linker가 적당한 함수를 묶어 준다. 이러한 Linkage(링크 규칙)를 'Mangled Name'이라고 부른다.

 

아직 탐험해보지 못한 신비한 세계가 많이 남아있는듯 하다. 

참조: http://blog.naver.com/supsup5642/60156876656


fscanf_s 함수를 통해 문자열(%s) 읽어올때

함수 마지막 파라미터로

케릭터 배열의 사이즈를 반드시 넣어주어야 한다!

char szData[100];

memset(szData, 0x00, sizeof(szData));

fscanf_s(fp, "%s", szData, sizeof(szData));


fscanf_s(fp, “%s”, szData, sizeof(szData));

이것때문에 한참 고생했다 ㅠ_ㅠ


'개발이야기 > MFC' 카테고리의 다른 글

유니코드 ↔ 안시 변환함수  (0) 2012.05.16
폴더선택 다이얼로그와 초기폴더경로 설정  (0) 2012.05.15
MFC Control 오픈소스 모음  (0) 2012.05.13
3D 다이아몬드  (0) 2012.05.13
MD5 Checksum 모듈  (0) 2012.05.13