API 11

InternetSetCookie, InternetGetCookie 사용 밥법

// 참고) IE 쿠키 폴더 // 비스타 이상: C:\Users\사용자\AppData\Roaming\Microsoft\Windows\Cookies // XP: C:\Documents and Settings\사용자\Cookies // ======= 쿠키 처리 ======= // ★ URL은 반드시 풀네임을 입력한다. 앞의 http:// 문자열이 생략된 경우 쿠키가 생성되지 않았다. // ★ path를 입력할 경우 반드시 /로 시작해야 한다. 그렇지 않으면 아예 생성되지 않았다. // path의 끝에 /가 있는 경우와 없는 경우는 서로 다르다. /abc와 /abc/는 다른 쿠키들이며 둘 다 생성할 수 있었다. // ex) InternetSetCookie("http://www.test.com", NULL, "..

웹, HTML 2016.03.09

WideCharToMultiByte, MultiByteToWideChar 메모리 할당 관련 리턴 값

WideCharToMultiByte, MultiByteToWideChar와 관련해서 오해가 많고 헷갈리는 부분이 여섯번째 인수를 0으로 줬을 때의 리턴값이다. 리턴하는 값이 바로 인수로 집어넣을 수 있는 메모리 할당에 필요한 크기인지, 변환될 버퍼의 문자열 길이인지, 게다가 널터미네이트가 고려되었는지도 헷갈린다. 검색해서 여러 블로그와 웹페이지를 둘러보았는 데 문자열 변환결과는 맞게 나오지만 그 과정에서 잘못 의미를 이해하고 사용하는 경우도 많았다. ///////////////////////////////////////////////////////////////////2019년 추가)// WideCharToMultiByte, MultiByteToWideChar 함수는 작동이 독특하다. 특히 리턴값에 주목..

C, C++ 문법 2009.09.04

리스트뷰 아이템 스왑, 이동, 정렬 관련 API 소스

// 컬럼 수는 외부에서 입력한다. 이 함수는 빈번하게 사용하므로 Header_GetItemCount 호출은 낭비. void __stdcall ListItemSwap(HWND hList, int One, int Two, int iColCount) { // 텍스트 제외 속성 교환 LVITEM liOne={0}, liTwo={0}; liOne.mask = liTwo.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_STATE; liOne.stateMask = liTwo.stateMask = LVIS_CUT | LVIS_DROPHILITED | LVIS_FOCUSED | LVIS_SELECTED | LVIS_OVERLAYMASK | LVIS_STATEIMAGEMASK; liOne.iSubIt..

API 2009.09.03

큰 사이즈 그래픽(그림, 이미지) 화일 처리시 팁

이미지를 처리하는 경우... 보통 WM_PAINT 메시지 처리부에 리소스나 파일에서 DDB를 생성하고 화면에 뿌려주는 작업을 한다. 그런데 이경우 작은 파일의 경우는 별 상관이 없으나. 크기가 큰 파일의 경우 로딩하고 뿌리는 데 상당한 부하가 일어난다. 실제로 노트북의 경우 크기 1024*680 정도의 파일을 읽어서 화면 크기만 줄였다 늘였다 해도(WM_PAINT 메시지 발생) 상당히 버벅거림을 볼 수 있었다. 그래서 미리 DDB를 저장하는 변수를 만들어서 DDB 로딩을 먼저 시키고 그 핸들값을 저장한 후 처리해봤다. 이 경우 유효한 DDB가 있는 상태이니 WM_PAINT에서는 그냥 로딩은 하지 않고 뿌리는 작업만 하면 된다. 부하가 없어졌다. 이 결과로 비추어 볼때 화일에서 DDB를 생성하는 작업이 상..

API 2008.09.05

DialogBoxIndirect 샘플 수정 및 코딩 최적화 작업

불필요한 연산을 줄였다. LPWORD lpwAlign (LPWORD ptr) // 4의 배수 단위 설정 { return (LPWORD)((((unsigned long)ptr+3)>>2)cy=400/2; // 높이 lpdt->x=(iParentWidth-(lpdt->cx*2))/4; // 시작 X위치 lpdt->y=(iParentHeight-(lpdt->cy*2))/4; // 시작 Y위치 lpdt->cdit=4; // 자식 컨트롤의 수 lpdt->style = WS_POPUP | WS_BORDER | WS_SYSMENU | DS_MODALFRAME | WS_CAPTION; // lpdt->dwExtendedStyle=0; lpw = (LPWORD) (lpdt + 1); // 기본정보 설정후 다음 부분으로 ..

API 2008.08.06

cbWndExtra 이용 윈도우 인스턴스 별로 개별적인 메모리 할당...

cbWndExtra 이용 윈도우 인스턴스 별로 개별적인 메모리 할당... LONG SetWindowLong( HWND hWnd, int nIndex, LONG dwNewLong); 윈도우에 변경을 가하고자 할때 쓰는 api이다. 두번째는 변경하고자 하는 속성을 나타낸다. 윈도우 지정 디폴트 값 설명 GWL_EXSTYLE 확장 스타일 GWL_STYLE 윈도우 스타일 GWL_WNDPROC 윈도우 프로시저의 번지 GWL_HINSTANCE 인스턴스 핸들 GWL_ID 윈도우의 ID GWL_USERDATA 윈도우와 관련된 사용자 데이터 DWL_DLGPROC 대화상자 프로시저의 주소 DWL_MSGRESULT 대화상자 프로시저의 리턴값 DWL_USER 사용자 데이터 그런데 사용자가 임의로 윈도우에 여분 메모리가 있을 ..

API 2008.08.06

파일 사이즈 64비트로 구하는 함수

// 에러시 0xFFFFFFFFFFFFFFFF 리턴 unsigned __int64 GetBigSize(HANDLE hFile) { if(hFile==0) return 0xFFFFFFFFFFFFFFFF; // 기본적 에러검사 DWORD dwSizeHigh, dwSizeLow; dwSizeLow=GetFileSize(hFile, &dwSizeHigh); // 1. GetFileSize 함수가 실패할 경우 if(dwSizeLow == 0xFFFFFFFF && GetLastError() != NO_ERROR) return 0xFFFFFFFFFFFFFFFF; // 2. 하이사이즈가 존재할 경우 if(dwSizeHigh) return ((unsigned __int64)dwSizeHigh

API 2008.07.26

플래시 로딩 소스(api)

물어보는 분도 있고 해서 간단히 올립니다. 컴포넌트 불러들일 수 있는 다이얼로그를 생성후 플래시 컴포넌트 로딩하고 실행하는 것입니다. 그냥 다이얼로그 말고 윈도우 생성시에는 CreateWindow("AtlAxWin", 프로그아이디(컴포넌트 이름) ~~~~ 생성하면 됨... com과 atl 조금 개념이 서시면 쉽게 이해할 수 있습니다. 아니면 그냥 사용시에는 저런 형태로 사용한다는 것만 알아도 됨 원래 남이 만든 것은 사용하기는 쉽잖아요. ㅎㅎ 만들기가 귀찮지...;;; 안에 소스 참조하세요. 간단히 플레이와 스탑만 단추로 뺏구요 그외의 기능은 IShockwaveFlash 인터페이스 뒤저보시면 됩니다. 플레이어 별도로 만드실 분 참조. 재미잇는 플래시라서 용량이 좀 됨.....4메가...;;; 참고로 저 ..

COM, ATL 2008.07.24