728x90

Application/MFC 51

[MFC] 한글 로그 파일 작성 (WideCharToMultiByte)

로그파일에 한글을 쓰고 싶다면 아래와 같은 함수를 작성하면 됩니다 BOOL CMyClass::WriteLog(CString strLog) { HANDLE hFile; SYSTEMTIME t; CString strData; CString strPath; DWORD dwWrite; GetLocalTime(&t); strPath.Format(_T("C:\\Log_%04d-%02d-%02d.txt"), t.wYear, t.wMonth, t.wDay); strData.Format(_T("%02d:%02d:%02d - %s\r\n"), t.wHour, t.wMinute, t.wSecond, strLog); int iRes = WideCharToMultiByte(CP_ACP, 0, strData, -1, NULL, ..

Application/MFC 2023.04.26

[MFC] 프로세스 우선 순위 변경

프로그램의 중요도가 높아서 프로세스 우선순위를 변경하려고 할 때는 아래와 같이 프로그램 시작 위치에서 설정을 하면 됩니다 CMyClass::CMyClass(void) { SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS); } 설정값의 경우 WinBase.h 헤더 파일에 존재하며 아래의 값들로 설정이 가능합니다 #define NORMAL_PRIORITY_CLASS 0x00000020 #define IDLE_PRIORITY_CLASS 0x00000040 #define HIGH_PRIORITY_CLASS 0x00000080 #define REALTIME_PRIORITY_CLASS 0x00000100 #define BELOW_NORMAL_PRIORITY..

Application/MFC 2023.04.18

[MFC] ReverseMemcpy 메모리값 반전

특정 통신의 경우 메모리 값을 반전해서 보낼 때가 있는데 이럴 때 유용하게 사용할 수 있는 함수를 소개합니다 void ReverseMemcpy(LPVOID pDst, LPVOID pSrc, int iSize) { for(int iCnt = 0; iCnt < iSize; iCnt++) { ((BYTE *)pDst)[iCnt] = ((BYTE *)pSrc)[iSize - iCnt - 1]; } } 위의 함수를 사용하면 쉽게 메모리값을 반전시킬 수 있습니다 제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀

Application/MFC 2023.04.17

[MFC] 디스크 Offline / Online

디스크 상태를 변경하고 싶다면 아래와 같이 함수를 작성하면 됩니다 #define IOCTL_DISK_SET_DISK_ATTRIBUTES CTL_CODE(IOCTL_DISK_BASE, 0x003d, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define DISK_ATTRIBUTE_OFFLINE 0x0000000000000001 typedef struct _SET_DISK_ATTRIBUTES { ULONG Version; BOOLEAN Persist; BOOLEAN RelinquishOwnership; BOOLEAN Reserved1[2]; ULONGLONG Attributes; ULONGLONG AttributesMask; GUID Owner; } ..

Application/MFC 2023.03.22

[MFC] 볼륨으로 디스크 번호 가져오기 (Get Volume Disk Number)

볼륨의 디스크 번호를 가져오려면 아래와 같이 코드를 작성하면 됩니다 #include int GetVolumDiskNumber(WCHAR cVolume) { CString strVolume; strVolume.Format(_T("\\\\.\\%c:"), cVolume); HANDLE hVolume = CreateFile( strVolume, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if(hVolume == INVALID_HANDLE_VALUE) { return -1; } VOLUME_DISK_EXTENTS vde; DWORD dwRet; if(DeviceIoControl(hVolume, IOCTL_VOLUME_GET_VOL..

Application/MFC 2023.03.21

[MFC] WriteFile & ReadFile & OVERLAPPED 사용 방법

비동기로 파일 입/출력을 하기 위해서는 Overlapped 를 사용해야 합니다 간단한 사용법을 소개합니다 우선 헤더 파일에 변수 선언을 진행합니다 OVERLAPPED m_overlapped; 이후 초기화 및 Event 초기화를 진행합니다 MyClass() { memset(&m_overlapped, NULL, sizeof(m_overlapped)); m_overlapped.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); } 소멸자에서도 처리해 줍니다 ~MyClass() { SetEvent(m_overlapped.hEvent); CloseHandle(m_overlapped.hEvent); m_overlapped.hEvent = NULL; } 그리고 마지막으로 아래와 같이..

Application/MFC 2023.03.17

[MFC] Static 글자 색 및 배경 색 변경

MFC에서 Static 컨트롤 및 다른 컨트롤의 글자색 및 배경색을 변경하려고 할 때는 OnCtlColor 함수를 이용하면 됩니다 MFC 클래스 마법사를 이용하여 메시지 탭에서 WM_CTLCOLOR 를 선택 후 처리기를 추가합니다 이후 추가된 처리기에 아래와 같이 작성해 주면 됩니다 HBRUSH CDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 여기서 DC의 특성을 변경합니다. switch(pWnd->GetDlgCtrlID()) { case IDC_STATIC_NOTICE: pDC->SetBkColor(RGB(0, 0, 0)); pDC..

Application/MFC 2023.03.14

[MFC] CMD로 명령어 실행 하기

CMD로 특정 명령어를 실행하고 완료시까지 대기를 하려면 SHELLEXECUTEINFO 구조체를 사용해서 ShellExecuteEx SellAPI를 이용하면 됩니다 void CMyClass::Commander(CString strCommand) { SHELLEXECUTEINFO ExecInfo; memset(&ExecInfo, NULL, sizeof(SHELLEXECUTEINFO)); ExecInfo.cbSize = sizeof(ExecInfo); ExecInfo.lpVerb = _T("open"); ExecInfo.lpFile = _T("cmd.exe"); ExecInfo.lpParameters = strCommand; ExecInfo.fMask = SEE_MASK_FLAG_NO_UI | SEE_MAS..

Application/MFC 2023.03.13

[MFC] 난수 생성하기(랜덤 값 생성)

랜덤 한 값을 생성하고 싶을 때 srand 함수를 이용해서 난수표를 만든 후 값을 가져옵니다 srand((unsigned int)time(NULL)); int iRand = rand() % 1000; 위와 같이 작성할 경우 1000 미만의 난수를 발생시킬 수 있습니다 하지만 쓰레드 같이 거의 동시에 난수를 발생할 경우 같은 값을 가지는 경우가 생깁니다 이를 회피하고자 현재 시간의 millisecond 단위를 활용해 프로그램을 구동시키면 다른 난수값을 가져올 수 있는 것을 확인할 수 있습니다 SYSTEMTIME st; GetLocalTime(&st); srand((unsigned int)st.wMilliseconds); int iRand = rand() % 1000; 위와 같이 작성하면 됩니다 제 글이 도..

Application/MFC 2023.03.08

[MFC] 응답 없음 회피하기

단일 스레드의 경우 루프문이 돌아갈 때 응답 없음이 발생합니다 이럴 때 중간중간 윈도우 메시지를 처리하는 구문만 넣으면 응답 없음 없이 프로그램을 개발할 수 있습니다 간단히 아래와 같이 작성하면 됩니다 void MyClass::Loop() { MSG msg; for(DWORD dwCnt = 0; dwCnt < MAXWORD; dwCnt++) { ..... while(PeekMessage(&msg, m_hWnd, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } } } m_hWnd의 경우 Dialog의 핸들을 가져오면 됩니다 제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀

Application/MFC 2023.02.22
728x90
반응형