'응용 프로그램 개발/C++, MFC, Windows' 카테고리의 글 목록
본문 바로가기

반응형

응용 프로그램 개발/C++, MFC, Windows

(20)
[MFC] 다이얼로그 중복 실행 방지 어플리케이션 클래스의 InitInstance()에 다음과 같은 코드를 추가한다. 이때, 다이얼로그를 여는 등의 액션이 일어나기 전인 부분에 추가해야한다. BOOL CTestApp::InitInstance() { // 중복 실행 방지 BOOL bIsDuplicateWindow = FALSE; m_hMutex = ::CreateMutex(NULL, FALSE, _T("mtx")); if (GetLastError() == ERROR_ALREADY_EXISTS)bIsDuplicateWindow = TRUE; if (m_hMutex)::ReleaseMutex(m_hMutex); if (bIsDuplicateWindow) { AfxMessageBox(L"프로그램이 이미 실행 중입니다."); return FALSE;..
[C++/MFC] 천단위 마다 구분자(,콤마) 추가하기 CString AddCommaEveryThousandUnits(int number) { int n = 0, count = 0; CString strRetrunValue = L""; while (number > 0) { count++; n = number % 10; number = number / 10; strRetrunValue.Format(L"%d" + strRetrunValue, n); if ((count % 3 == 0) && (number > 0)) strRetrunValue.Format(L"," + strRetrunValue); } return strRetrunValue; } number 를 입력받아서 10으로 나눈 나머지를 결과(strReturnValue)에 하나씩 더한다. 이 동작을 수행할때..
[C++/EXCEL] #DIV/0! 데이터 읽을 때 발생하는 오류 문제 MFC Excel Automation 을 활용하여 데이터를 읽어올 때, #DIV/0! 인 데이터를 읽을 때 오류가 발생하며, 프로그램이 종료 되어버렸다. 따라서 다음과 같이 try catch 문을 활용하여 데이터를 읽을 때 오류를 잡도록 하였다. 이 방식으로 프로그램이 종료되지는 않았지만, 메모리 누수가 발생하였다. 따라서 프로그램을 실행하기 전에 직접 파일내에서 #DIV/0!인 데이터를 없애는 방법이 최선인 것 같다... CString HsExcel::GetValue(long col, long row) { SetRange(col, row); CString strValue = L""; try{ strValue = (CString)m_range.GetValue2(); } catch (CException* ..
[Excel] 엑셀 파일 / 시트 / 데이터 비교 하기 ( 조건부 서식 ) 엑셀에 입력된 데이터를 비교해야하는데 비교 프로그램을 여러가지 실행시켜봤는데, 오류가 발생했다. 그래서 프로그램 돌리는 것을 포기하고 엑셀 서식을 사용했다. 참고로 아래와 동일한 방법으로 행/열이 다르거나, 다른 시트에 있는 값 끼리 비교도 가능하다 1. 비교할 대상을 모두 선택 (우측에 같음 여부 표시) 2. 홈 > 조건부 서식 클릭 3. 조건부 서식 > 셀 강조 규칙 > 같음 클릭 4. 다음과 같이 팝업창이 뜨면, 좌측 데이터의 첫번째 값을 클릭한 뒤, F4를 3번 클릭하여 상대값으로 변경 또는 해당 셀의 위치를 입력 5. 확인버튼을 클릭하면 다음과 같이 데이터가 같을때 빨간색으로 채워지고 데이터가 다를 경우, 색이 채워지지 않음 출처: www.oppadu.com/%EC%97%91%EC%85%80-%..
[C++/Excel] 엑셀 소수점 입력 방법 + 고려 해야 할 사항 1. 숫자 서식으로 입력 1) 엑셀 관련 클래스 생성 // HsExcel.h class HsExcel : public CDialog { ... protected: _Application*m_pApp; Workbooksm_books; _Workbookm_book; Worksheetsm_sheets; _Worksheetm_sheet; ExRangem_range; Bordersm_borders; Outlinem_outline; } // HsExcel.cpp void HsExcel::SetValue(long col, long row, double v, int decimal) { SetRange(col, row); SetValue(v, decimal); } void HsExcel::SetRange(long col..
[MFC] CString 동적 배열, 정적 배열 차이 CStirng 정적 배열 CString strText; CString strArr1[] = {L"첫번째", L"두번째", L"세번째"}; int nSize = sizeof(strArr1) / sizeof(CString); for(int i=0; i< nSize; i++) { strText = strArr1[i]; } CStirng 동적 배열 CString strText; CStringArray strArr; strArr.Add(L"첫번째"); strArr.Add(L"두번째"); strArr.Add(L"세번째"); for(int i=0; i < strArr.GetSize(); i++) { strText = strArr.GetAt(i); }
[MFC] CString에서 확장자 제거 / 파일명 변경 확장자명 제거 다음과 같이 Left 혹은 Mid 를 이용하면 문자열에서 확장자명을 제거하여 파일명을 출력하거나 파일명을 바꿀 수 있다. // 파일명 출력 int nPos = m_strInputPath.ReverseFind(L'.xlsx'); CString strInputPath = m_strInputPath.Left(nPos); // 파일명 바꾸기 int nPos = m_strInputPath.ReverseFind(L'.xlsx'); CString strInputPath = m_strInputPath.Left(nPos) + _T("추가할 문자열") + L".xlsx"; // 파일명 출력 CString strText = "통합문서1_20201223.xlsx"; // 파일명+확장자 strText.Mid(0,..
[MFC] SendMessage 예제 global.h // 공통코드 헤더 #define UWM_USER_MSG(WM_USER + 10) // 사용자 정의 메세지 선언 CDlgTest.cpp // 메세지를 받는 클래스 BEGIN_MESSAGE_MAP(CDlgTest, CDialogEX) ON_MESSAGE(UWM_USER_MSG, OnReceiveData) // 메세지를 받았을때 수행할 함수 END_MESSAGE_MAP() LRESULT CDlgTest::OnReceiveData((WPARAM)wParam, (LPARAM)lParam ) { // 메시지를 받아서 처리하는 함수 CString *msg = (CString*) wParam; AfxMessageBox(msg->GetString()); return 0; } CDlgMain.cpp //..

반응형