API 73

비트맵을 파일(png, jpg, bmp)로 저장하기 / 파일을 비트맵으로 생성하기

// GDI+ library를 사용해 bmp, png, jpg, gif 등 대부분의 이미지 형식 모두 처리 가능하다. #include #pragma comment(lib, "gdiplus") using namespace Gdiplus; int __stdcall GetEncoderClsid(const WCHAR *mime, CLSID *clsid) { UINT i, num, size; ImageCodecInfo *info; GetImageEncodersSize(&num, &size); if (!size) return -1; if (!(info = (ImageCodecInfo*)malloc(size))) return -1; GetImageEncoders(num, size, info); for (i = 0; ..

API 2022.08.21

모달리스 다이얼로그에 탭키 포커스 이동처럼 편리한 다이얼로그 키 처리 적용하기

모달리스 다이얼로그에 탭키 포커스 이동처럼 편리한 다이얼로그 키 처리 적용하기 모달 다이얼로그의 탭키로 컨트롤을 이동하고 스페이스로 선택하거나 에디트에 포커스 존재시 엔터를 누르면 디폴트 버튼이 눌리는 기능은 편리하다고 한다.; 탭키이동은 많이 해봤어도 마지막 에디트에 커서 있는 상태에서 엔터치면 디폴트 버튼이 작동한다는건 모르는 사람이 훨씬 많을거다.ㅎㅎ 아무튼 일단 모달리스 다이얼로그를 CreateDialog, ShowWindow만 해놓고 아무런 처리를 하지 않으면 오로지 마우스로만 작동한다. 탭키를 눌러도 도무지 변화가 없으니 무빙이 답답한 고구마 같은 느낌이랄까... 위 문제 두가지 다른 형태로 나타나는데 각각의 코드를 작성해 해결할 수 있다. 먼저 호출부 윈도우를 CreateWindow로 생성한..

API 2020.06.21

SHGetSpecialFolderPath 윈도우의 각종 경로 얻기(비스타 이상은 SHGetKnownFolderPath 추가됨)

1.요약 SHGetSpecialFolderPath를 이용하여 윈도우에서 사용하는 특별한 폴더들의 패스를 얻어오는 방법을 설명합니다. Window Vista 이후 버전은 SHGetKnownFolderPath 함수가 추가되었다.Vista에서는 보안 기능(UAC)이 강화됨에 따라 일반 사용자 계정에서 접근(Writable) 가능한 폴더가 제한적으로 바뀌었습니다. Vista 이전에는 SHGetFolderPath() 함수를 이용해서 특수 폴더의 경로를 구할 수 있었는데, Vista에서는 쓰기 가능한 폴더를 구할 수 있는 SHGetKnownFolderPath() 함수가 추가되었습니다. SHGetKnownFolderPath 이용시는 함수 내부에서 경로 메모리를 할당하므로 호출부 측에서 CoTaskMemFree(경로)..

API 2016.03.05

에디트에 숫자 입력시 천단위로 자동 컴마(콤마) 찍기(Edit Comma)

// 음수, 소수점 고려 // 버퍼 길이에 0 전달시 필요한 크기(NULL 포함 길이) 리턴 int __stdcall AddComma(LPCTSTR src, LPSTR buf, int lenbuf) { int len, lenCommaRange, cCommas, res; TCHAR szError[256]; if (!src)// 기본 체크 return 0; if (!(len = lstrlen(src))) // 기본 체크 return 0; // 컴마의 수는 (컴마를 찍을 수 있는 영역의 길이 - 1) / 3 // 소수점이 존재하는 경우는 . 앞 부분까지 길이로 설정하면 된다. // 음수인 경우 처음에 -가 붙으므로 1을 빼준다. for (lenCommaRange = 0; src[lenCommaRange] !=..

API 2016.02.03

SetForegroundWindow 작동 잘 안될 때 AttachThreadInput 사용

구글링등 사이트 검색하면 SetForegroundWindowForce라는 프로그램 소스가 보이는데 이것은 좀 잘못된 소스이다. 이 잘못된 소스에서는 AttachThreadInput 첫번째 인수와 두번째 인수를 거꾸로 줬다. 원래의 foreground 윈도우의 tid를 두번째 인수로 줘야 된다. 좀 이상하게 작동해서 msdn에서 함수 설명 읽어보고 첫 인수와 두번째 위치를 바꾸니 제대로 되었다. 아래는 올바르게 수정한 소스이다. void __stdcall SetForegroundWindowForce(HWND hWnd) { HWND hForeground; DWORD id, foreground_id; hForeground = GetForegroundWindow(); if (hForeground == hWnd)..

API 2012.12.10

CreateDibSection 이용 비트맵 생성하기

CreateCompatibleBitmap의 경우 실패할 경우가 종종 생긴다. 위 api로 생성한 비트맵 자원들의 총합이 16메가인 초과한 경우 실패하다라나 색표현이 제대로 안된다던가 깨진다더거나 그런 경우도 생긴다고 한다. 이 경우에 CreateDibSection api를 사용하면 된다. 이 함수를 통해 비트맵 생성시는 프로그램이 제공하는 메모리 허용량까지 가능하다. 인터넷에 돌아다니는 소스는 색상(bpp)부분과 팔레트 설정부분이 누락된 코드가 많았다. // 색상(bpp)이 8비트 이하인 경우 팔레트 설정이 필요하다. HBITMAP __stdcall CreateBitmapByCreateDIBSection(HDC hdc, int cx, int cy, int bpp = 0) { int i; unsigned ..

API 2012.10.29

리스트뷰 컨트롤(ListView Control) 팁 앤 트릭스

리스트뷰 컨트롤(ListView Control) Zafir 의 홈페이지는 http://www.dsp.com/zafir/ 입니다. 리스트뷰 컨트롤(ListView Control) Tips & Tricks #1 1. 서론 (Introduction) 파생된 CListCtrl 을 CListView 와 같이 쓸려면 어떻게 하나요 ? 파생된 CListCtrl 을 CListView 안에서 사용하기 - Undocumented 2. 이미지 사용하기 (Using Images) 이미지 리스트초기화 아이템에 대한 이미지를 설정하거나 제거하기 비규격(Non-Standard)크기의 이미지 설정하기 이미지의 Late Binding(음.. 이걸 한글로 뭐라 하죠?) - I_IMAGECALLBACK 3. 뷰(View) 보기형태(Vie..

API 2012.10.27

PdhCollectQueryData 함수 복수 호출 및 멀티 코어 프로세서 산출시 유의점

읽어 보면 알겠지만 비율 카운터 값을 구하는 경우 최소 2회,,, 슬립타임을 두고 호출이 필요하다. 이전 호출시와 현재호출시의 샘플을 비교하여 값을 산출한다고 한다. 멀티 코어의 경우 프로세서 타임은 각 코어 하나당 100으로 계산한다. 예를 들어 4코어 cpu를 백프로 맥시멈으로 사용시 개별 프로세스들의 Processor Time 카운터 값 총합은 400이 된다. 개별 프로세스 사용률을 백분율로 표시하려면 당연히 코어수로 나눠주면 될 것이다. This topic has not yet been rated - Rate this topic After creating a query and adding counters to it, call the PdhCollectQueryData function to retr..

API 2012.10.26

CPU 코어별, 토탈 사용률과 개별 프로세스별 사용률 구해보기

PDH(performancer data helper)를 사용해서 구한다. 주의할 게 있는데, 프로세스 이름이 같은 경우 가령 svchost라든지 iexplorer의 경우는 #인덱스를 붙여줌으로써 구분할 수 있다.(인덱스는 0부터 시작) 그리고 PdhCollectQueryData 함수로 값을 수집하는 경우 첫 실행으로는 값이 항상 99.9999이므로 Sleep(타임)을 줘서 최소 2번 실행해야 제대로 값을 구할 수 있다.(이전 샘플과 현재 샘플을 비교해서 값을 산출한다고 한다.) 참고로 주기적으로 갱신된 프로세스 목록을 구하려면 PdhEnumObjects(NULL, szMachine, NULL, &cchBuffer, PERF_DETAIL_WIZARD, TRUE); // 이 과정이 시스템 부하가 좀 걸리는 ..

API 2012.10.26