전체 글 52

ATL 베이스 ActiveX 에서 키보드 이동키가 안먹을 때

ATL 베이스에서 ActiveX 컨트롤을 만든후, 에디트 컨트롤 등에서 키보드 방향키나 Home, End 키가 안 먹을 때 처리 방법. BOOL CMyCom::PreTranslateAccelerator(LPMSG pMsg, HRESULT& hRet) { // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다. if(pMsg->message == WM_KEYDOWN && (pMsg->wParam == VK_LEFT || pMsg->wParam == VK_RIGHT || pMsg->wParam == VK_UP || pMsg->wParam == VK_DOWN || pMsg->wParam == VK_HOME || pMsg->wParam == VK_END)) { hRet = S_FALSE;..

Windows Programming 2008.03.05

잘 알려진 폴더구하기(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