개발

    선택 정렬 (Selection Sort) - 생각

    이 나이에 꿈이 개발자란놈이 알고리즘 공부는 1도 안햿다 그래서 기본적인 알고리즘 지식도 없었다 STL Sort 만 써봤지 어떤 정렬알고리즘이 있는지 몰랐다한심 그 자체 한심한심 공부는 유투브에 동빈나 안경잡이개발자 라는 분 것을 통해서 공부하고 내 나름대로 정리해서 올린다. 그래서 먼저 선택 정렬 부터 정리한다 먼저 선택 정렬은 이름부터 선택인지 의문이 간다. Idea : 가장 작은 것을 선택해서 제일 앞으로 보내는 알고리즘 그래서 변수를 Min 이라는 가장 작은 값을 넣어줄 변수가 필요하다. 생각 1. 가장 작을 값을 넣어줄 Min 변수, 스와핑할 변수 Temp 변수, 이중 For문 돌릴 변수 i,j기본적인 변수는 이렇다 먼저 생각을 써서 필요한 것이 뭔지 정리가 좋은 것 같아서 올린다사실 코드도 중..

    드래그 앤 드랍

    1. 드래그앤 드랍을 받을 윈도우핸들에서, DragAcceptFiles(TRUE); 를 선언한다. 아마 디폴트가 FALSE일텐데, 저걸 해주면 윈도우까지 드래그가 허용된다.나는 뷰에서 진행할 예정에서, View 에서 onCreate 부분에서 선언해줬다 2. 해당 윈도우에서 View에서 WM_DROPFILES 이벤트를 생성한다. void CDragNDropTestView::OnDropFiles(HDROP hDropInfo) { UINT uiRet = DragQueryFile(hDropInfo,-1,NULL, NULL); // 드래그한 파일의 개수를 확인한다. if ( uiRet == 1) { CString sTemp; DragQueryFile(hDropInfo, 0, sTemp.GetBuffer(MAX_P..

    윈도우 사이즈 변경 시, 컨트롤 동적 크기 변경

    필자는 VIsual studio 2008을 쓰고 있다. 필자는 SDI 기준으로 코딩할 예정이다.답답해보일 수는 있지만, 그래도 충분히 나한테 도움이 될거라고 생각한다 MFC를 만지면서 내부에 컨트롤 같은건 알아서 크기가 변동할 줄 알았는데 아니였다 그렇게 친절할리가 없었지 말이 길어졌다 윈도우 사이즈 변경 시, 컨트롤 동적 크기 변경에 필요한 샘플코드 부분을 올려준다 먼저 0단계View클래스에서 속성 -> 메시지 -> WM_SIZE -> OnSize 메소드 추가 void CAgentLogViewer_NewView::OnSize(UINT nType, int cx, int cy){CView::OnSize(nType, cx, cy); // TODO: 여기에 메시지 처리기 코드를 추가합니다. } 이 부분이 추가..

    GetQueuedCompletionStatus 함수

    BOOL WINAPI GetQueuedCompletionStatus (_In_ HANDLE CompletionPort,_Out_ LPDWROD lpNumberOfBytes,_Out_ PULONG_PTR lpCompletionKey,_Out_ LPOVERLAPPED *lpOverlapped,_In_ DWORD dwMilliseconds); MSDN 에서 보면, 지정된 I/O 완료 포트에서 I/O 완료 패킷을 큐에서 제거하려고 시도합니다.큐에 완료 패킷이 없는이 없는 경우 함수는 완료 포트와 관련된 보류중인 입출력 조작이 완료되기를 기다립니다. CompletionPort : 완료포트의 핸들 .완료 포트를 만들려면 CreateIOCompletionPort 함수를 사용하세요. lpNumberOfByte : 입출..

    GetProcessMemoryInfo 함수

    BOOL WINAPI GetProcessMemoryInfo (_In_ HANDLE hProcess,_Out_ PPROCESS_MEMORY_COUNTERS ppsmemCounters,_In_ DWORD cb); hProcess : 프로세스에 대한 핸들, 이 때 주로 OpenProcess를 통해서 핸들을 통할텐데,dwDesiredAccess에 인자를 PROCESS_QUERY_INFORMATION 또는 PROCESS_QUERY_LIMITED_INFORMATION 액세스 권한을 줘야한다. ppsmemCounter : 프로세스의 메모리 사용에 대한 정보를 받는 PROCESS_MEMORY_COUNTERS 또는 PROCESS_MEMORY_COUNTERS_EX 구조체에 대한 포인터 cb : ppsmemCounters ..

    PROCESS_MEMORY_COUNTERS_EX 구조체

    typedef struct _PROCESS_MEMORY_COUNTERS_EX { DWORD cb; DWORD PageFaultCount; SIZE_T PeakWorkingSetSize; SIZE_T WorkingSetSize; SIZE_T QuotaPeakPagedPoolUsage; SIZE_T QuotaPagedPoolUsage; SIZE_T QuotaPeakNonPagedPoolUsage; SIZE_T QuotaNonPagedPoolUsage; SIZE_T PagefileUsage; SIZE_T PeakPagefileUsage; SIZE_T PrivateUsage; } PROCESS_MEMORY_COUNTERS_EX, *PPROCESS_MEMORY_COUNTERS_EX; MSDN에 보면 이렇게 나와있..

    QueryFullProcessImageName 함수

    BOOL WINAPI QueryFullProcessImageName (_HANDLE hProcess,_In_ DWORD dwFlags,_Out_ LPTSTR lpExeName,_InOut_ PDWORD lpdwSize); hProcess : 프로세스에 대한 핸들, 이 때 주로 OpenProcess를 통해서 핸들을 통할텐데,dwDesiredAccess에 인자를 PROCESS_QUERY_INFORMATION 또는 PROCESS_QUERY_LIMITED_INFORMATION 액세스 권한을 줘야한다.일반적으로 PROCESS_ALL_ACCESS 를 줬지만, QueryFullProcessImageName 함수를 사용한다. dwFlags : 0을 주면, Win32 경로 형식을 사용 PROCESS_NAME_NATIVE..

    OpenProcess 함수

    OpenProcess 함수 HANDLE WINAPI OpenProcess(_In_ DWORD dwDesiredAccess,_In_ BOOL bInheritHandle,_In_ DWORD dwProcessId,); MSDN에서 보면, dwDesiredAccess : 어떻게 접근할 것인가 정하는 옵션인데,주로 PROCESS_ALL_ACCESS 로 사용하여 모든권한을 가질 수 있었다. bInheritaHandle : PID로 접근한 object를 현재 이 함수를 실행하고있는 프로세스에 상속할지 결정하는 인자 dwProcessId : 접근할 목표 Process의 PID 0 or NULL 을 입력하면 모든 Process에 대해 접근한다. 필요 Header 는 WinBase.h 윈도우 8은 Processthread..

    ZeroMemory 와 memset

    ZeroMemory 와 memset 을 자주 본다. void ZeroMemory{PVOID Destination, SIZE_T Length}; Destination : 0 으로 채울 메모리 블럭의 시작 주소를 가리키는 포인터Length : 0으로 채울 크기 Header : WinBase.h (include Windows.h) WINBASE.H 를 보면,#define ZeroMemory RtlZeroMemory WINNT.H 를 보면 #define RtlZeroMemory(Destination, Length) memset(Destination, 0, Length) 근본적으로보면 ZeroMemory는 memset을 사용하고 있다고 볼 수 있지 않을까 생각이 든다. void *memset(void * dest..