본문 바로가기

MFC36

CFileDialog의 Title 이름 변경하는 방법 https://learn.microsoft.com/ko-kr/cpp/mfc/reference/cfiledialog-class?view=msvc-170 CFileDialog 클래스 자세한 정보: CFileDialog 클래스 learn.microsoft.com CFileDialog 클래스에 m_ofn 구조체가 존재한다. CFileDialog::m_ofn Windows OPENFILENAME 구조체입니다. 기본 파일 대화 상자 매개 변수에 대한 액세스를 제공합니다. 아래와 같이 구조체의 lpstrTitle 변수에 이름을 넣으면 Title이 변경이 된다. CString name_filter = _T("Txt Files(*.txt) | *.txt; ||"); CFileDialog dlg(TRUE, NULL, NU.. 2024. 1. 16.
MFC 단축키 Accelerator 리소스 추가 https://learn.microsoft.com/ko-kr/windows/win32/learnwin32/accelerator-tables 액셀러레이터 키 테이블 - Win32 apps 액셀러레이터 키 테이블 learn.microsoft.com MFC 프로젝트에 Accelerator 리소스를 아래 이름으로 추가합니다. IDR_ACCEL1 리소스 편집기에서 관련 단축키를 지정합니다. ID_FILE_OPEN, ID_FILE_SAVE 등은 기본적으로 생성이 되는데 Main Menu, Toolbar에 관련 ID가 등록되어 있으면 아래와 같이 Accelerator를 등록하지 않아도 작동이 되는 것 같습니다. 그러나 사용자가 추가한 ID는 아래와 같이 등록을 하지 않으면 작동이 되지 않는 것을 확인 했습니다. 헤더.. 2024. 1. 16.
최근 열어본 파일 MRU Menu Items 처리 커스텀 방법 MFC의 Main Menu에 "최근 열어본 파일" 리스트를 표시하고 그 리스트를 선택 했을 때 Doc의 OnOpenDocument(LPCTSTR lpszPathName) 함수가 호출된다. MFC 프레임워크에서 처리를 하기 때문에 OnOpenDocument(LPCTSTR lpszPathName) 함수 전에 CDocTemplate을 선택 한다거나 다른 작업을 하려면 아래와 같은 방식으로 처리를 하면 된다. 내가 이 작업을 하게 된 이유는 프로그램 내부 버전 별로 CDocTemplate을 어려게 사용을 하는데 자동을 OnOpenDocument(LPCTSTR lpszPathName) 함수가 호출되니 원하는 CDocTemplate으로 표시가 되지 않는 문제가 있었다. 참고로 CDocTemplate을 선택하는 방법.. 2024. 1. 15.
UpdateData() 함수 Param 의미 MFC에서 UpdateData()를 사용해서 Control의 값을 변수로 적용하거나 반대로 처리한다. void etModalProgressThread::UpdateData(BOOL b) { etModalProgressDlg * pDlg = (etModalProgressDlg *)m_pMainWnd; pDlg->m_title = m_title; pDlg->m_Text = m_Text; pDlg->SendMessage(UM_MODAL_UPDATEDATA, (WPARAM)b, 0L); } https://learn.microsoft.com/en-us/cpp/mfc/dialog-data-exchange?view=msvc-170 Dialog Data Exchange Learn more about: Dialog Da.. 2023. 7. 7.
ON_CONTROL_RANGE를 이용해서 같은 이벤트 처리를 한 함수로 해결 방법 아래 예는 ComboBox를 3개 만들고 각각의 ComboxBox Select Change 이벤트를 처리하는 함수를 만들었다. ON_CBN_SELCHANGE(IDC_CB_1, OnCbnSelchangeCombo1) ON_CBN_SELCHANGE(IDC_CB_2, OnCbnSelchangeCombo2) ON_CBN_SELCHANGE(IDC_CB_3, OnCbnSelchangeCombo3) 위와 같이 3개의 이벤트 함수를 만들었는데 각각의 처리 내용이 비슷하다면 하나의 함수로 만들고 싶을 것이다. 이때 사용 할 수 있는 것이 ON_CONTROL_RANGE이다. ON_CONTROL_RANGE(CBN_SELCHANGE, IDC_CB_1, IDC_CB_3, OnCbnSelchangeComboByID) Contro.. 2023. 7. 5.
HEX CString to BYTE array MFC Unicode CString을 BYTE 배열로 리턴하는 함수 예제 HEX string은 "0xab 0x01 0x02 0x03 0xfa 0xFF"와 같이 Space로 구분되어 있을 경우 /// 유니코드 CString /// strData = _T("0xab 0x01 0x02 0x03 0xfa 0xFF"); /// rt[] = { 253, 1, 2, 3, 250, 255 }; byte* etUsbTestDlg::StringToHex(CString strData) { CString strValue; int i = 0; // substring index to extract TCHAR chSep = ' '; byte rt[1024] = { 0, }; while (AfxExtractSubString(strV.. 2023. 5. 8.
MFC jsoncpp 설치 jsoncpp 를 library 로 만들지 않고 source 와 header 파일을 프로젝트에 포함해서 사용 가능합니다. 1. jsoncpp download download link : https://github.com/open-source-parsers/jsoncpp 2. python를 설치하고, 다운받은 json 폴더의 amalgamate.py 파일 실행합니다. 생성된 dist 폴더를 확인합니다. 3. dist 폴더 이동해서 생성된 파일을 확인합니다. jsoncpp.cpp , json.h, json-forwards.h 파일을 프로젝트에 추가해서 함께 빌드합니다. 2022. 11. 28.
CScrollView를 이용한 Image Viewer 예제 JPG, BMP, PNG 등의 이미지 파일을 열어 스크롤이 가능한 화면에서 확대/축소를 하는 예제이다. CScrollView 클래스를 이용하면 Scroll을 계산하지 않아도 된다. 예제는 TabCtrl에 Tab을 5개 만들고 각 탭별로 이미지를 넣고 확대/축소 기능과 함께 이미지를 보는 간단한 프로그램이다. 이미지는 CImage 클래스를 이용해서 읽는다. Viewer 클래스에서 OnDraw()함수에서 확대/축소를 위한 StretchBlt 처리를 한다. CScrollView 클래스를 이용할 경우 OnInitialUpdate()함수에서 SetScrollSizes() 함수를 이용해서 크기를 초기화해야 한다. 그렇지 않으면 Scroll 처리를 위한 Size를 알수가 없어 에러가 발생한다. void ImageVi.. 2022. 7. 27.
CXTPPropertyPage OK 버튼 누르고 종료 여부 체크 방법 https://docs.microsoft.com/en-us/cpp/mfc/reference/cpropertypage-class?view=msvc-170 CPropertyPage Class Learn more about: CPropertyPage Class docs.microsoft.com MSDN을 참고하면 된다. 간단하게 설명하면 OK, Cancel 버튼을 누렀을 때 아래 함수가 각각 순서대로 호출이 된다. 먼저 OK버튼을 눌렀을 경우이다. int nCompare = 1; // The default MFC implementation of OnApply() would call OnOK(). BOOL CColorPage::OnApply() { if (nCompare == 2) return FALSE;//c.. 2022. 7. 15.
LIST