2008/02 10

잘 알려진 폴더구하기(XP, Vista)

잘 알려진 폴더구하기 (XP까지만 적용) SHGetFolderPath TCHAR szPath[MAX_PATH] = {0, }; // system32 폴더 ::SHGetFolderPath(NULL, CSIDL_SYSTEM, NULL, 0, szPath); // Programe Files 폴더 ::SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, 0, szPath); // 임시폴더 구하기 ::SHGetFolderPath(NULL, CSIDL_APPDATA , NULL, 0, szPath); Vista 를 고려하면... 다음은 비스타에서 Low 권한에서 쓰기 가능한 폴더를 찾는 함수입니다. SHGetKnownFolderPath 근데, XP 를 포함한 이하 버전에는 이 함수..

Windows Programming 2008.02.15

함수 호출 방식(cdecl, stdcall, pascal)

함수 호출 방식(cdecl, stdcall, pascal) 1.인수를 스택에 집어넣는 방향에 따라서 다음과 같이 나뉘고 pascal : 인수를 스택에 저장하는 순서를 왼쪽에서 오른쪽으로 한다. cdecl : 인수를 스택에 저장하는 순서를 오른쪽에서 왼쪽으로 한다. stdcall : 인수를 스택에 저장하는 순서를 오른쪽에서 왼쪽으로 한다. 2.스택에 인수를 pop 하는 주체에 따라서 다음과 같이 나뉘고. pascal : 호출을 당하는 쪽이 스택공간을 삭제한다. stdcall : 호출을 당하는 쪽이 스택공간을 삭제한다. cdecl : 호출을 하는 쪽이 스택공간을 삭제한다. 이렇게 stdcall은 pascal방식과 cdecl방식을 혼합한 형태를 띄운다

Windows Programming 2008.02.15

창의 임의의 위치 클릭&드래그해서 창 이동시키기

// 창의 꼭대기서부터 밑으로 27픽셀까지 클릭&드래그 하면 윈도우가 이동함. LRESULT CMyDlg::OnNcHitTest(CPoint point) { // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다. CPoint pt = point; ScreenToClient(&pt); CRect rect; GetWindowRect(rect); RECT rcTitleBar = { 0, 0, rect.Width(), 27 }; if( ::PtInRect(&rcTitleBar, pt) == TRUE ) { CDialog::OnNcHitTest(point); return HTCAPTION; } else return CDialog::OnNcHitTest(point); }

Windows Programming 2008.02.15

typeid 를 이용한 실시간 타입 알아내기

#include #include class myclass { }; void main() { int a, b; char c; myclass ob1; printf("%s %s %s\n", typeid(a).name(), typeid(b).name() , typeid(c).name()); printf("%s\n", typeid(ob1).name()); bool isTrue = ( typeid(a) == typeid(b) ); // true } 컴파일 옵션에는 Enable Run-time type information (런타임 형식 정보 사용) 이 체크되어 있어야 함. 자세한 사항은 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/..

Windows Programming 2008.02.14

#File Error#

#File Error# 1.요약 프로그램이 끝날 때 메모리 릭이 난 부분은 가르쳐주는 거 아시죠? 근데 거기에 파일이름이 #File Error# 이라고 나오는 경우가 있습니다. 2.본문 우선은 누가 친절하게 메모리 릭을 잡아주느냐를 알아봐야겠죠. CRT의 디버그 힙이 바로 그 일을 해줍니다. 즉 메모리 할당할 당시에 ( new, malloc 문장) 그 라인 번호와 파일 이름을 CRT 자체적으로 어딘가에 저장하고 있는데, 그곳이 망가져버리거나 쓸 수 없게 되어버리면 #File Error# 이라고 대신해서 나온답니다. 우선 망가지는 경우로는 누군가가 그곳을 overwrite 해버리는 경우가 있겠고, 정말 있어서는 안될 일이겠습니다. 다음으로 우리에게 일어날 수 있는 시나리오로, dll 에서 할당한 메모리를 ..

Windows Programming 2008.02.12