검색결과 리스트
MFC에 해당되는 글 5건
- 2016.06.30 [MFC] 재배포 패키지 설치하는 기능 추가하기.
- 2016.01.26 MFC에서의 SetTimer / KillTimer시 발생한 오류 해결
- 2016.01.22 MFC 프로젝트에서 CDialog 클래스를 include 하면 IDD에서 애러가 날때
- 2015.02.13 CFile을 이용해서 CString을 엑셀 파일에 저장하기.
- 2015.02.12 MFC UI 콘트롤 팁들.
MFC는 빌드 환경에 따라서 재배포 패키지가 필요하다
Microsoft Visual C++ Redistributable
VS에서 지정한 버전의 컴파일러로 빌드하면
그에 상응하는 재배포 패키지가 있어야 실행이 된다.
그러므로 사용하는 프로젝트의 빌드가 사용하는 재배포 패키지를 포함시켜서
실행의 안정성을 확보하는 것이 좋다.
예를 들어 VS2013에서 빌드한 프로젝트가 Windows 7 혹은 XP에서는 실행 안될 확율이 높다.
그럴 때는 2013 재배포 패키지를 설치하게 한다.
Microsoft Visual C++ Redistributable 2013
프로젝트 초기화 부분에서 다음 코드를 넣는다.
DWORD dwType = REG_SZ;
DWORD dwSize = 128;
HKEY hKey;
TCHAR szBuffer[128] = { '\0', };
LONG lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{F8CFEB22-A2E7-3971-9EDA-4B11EDEFC185}", 0, KEY_READ, &hKey);
if (ERROR_SUCCESS != lResult)
{
AfxMessageBox("재배포 패키지를 설치하겠습니다.");
WinExec("vcredist_x86.exe /qb!", SW_SHOW);
AfxMessageBox("설치 완료");
// xp에선 설치완료후 정확하게 뜨지만 Windows7에선 완료되지 않았는데 뜬다.
}
else
{
//AfxMessageBox("이미 설치됨");
}
본인이 재배포할 패키지의 product code는 다음 링크를 참고 하면 된다.
MFC에 클래스를 추가하고
해당 클래스 로직에서 SetTimer / KillTimer를 사용할 경우에
릴리스 모드(Release)모드에서는 애러가 나지 않으나 정상 동작 하지 않고
디버그 모드(Debug)모드에서는 하기와 같이 애러가 날 때가 있다.
---------------------------
Microsoft Visual C++ Runtime Library
---------------------------
Debug Assertion Failed!
Program: ...r\Documents\º´¿ø¿ëÇ÷´ç±â\trunk\DMTool.N\Debug\iCE DM Tool.exe
File: f:\dd\vctools\vc7libs\ship\atlmfc\include\afxwin2.inl
Line: 152
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
---------------------------
중단(A) 다시 시도(R) 무시(I)
---------------------------
사용할려는 클래스에선 상관 없는 애러가
CDiaolog를 상속 받는 include 당하는 클래스에서 다음과 같은 애러가 난다.
개 짜증.
trunk\dmtool.n\dmtool\DMToolDlg.h(24): error C2065: 'IDD_DMTOOL_DIALOG' : undeclared identifier
이런식으로....
이럴 때는 resource.h를 넣어서 간단하게 해결!!
도움 받은 포스팅은 다음과 같습니다.!!!
http://acebluebird.tistory.com/entry/%EB%8B%A4%EC%9D%B4%EC%96%BC%EB%A1%9C%EA%B7%B8-%EC%B6%94%EA%B0%80%EC%8B%9C-%EC%9D%B4%EC%9C%A0%EC%97%86%EB%8A%94-error-C2065-error-C2057-%EB%A9%94%EC%8B%9C%EC%A7%80-%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95
일반적인 파일 저장은 fopen / fprintf / fclose를 이용한다.
m_result_file = fopen(".\\DATA\\data.csv", "a");
if(m_result_file != NULL)
{
fprintf(m_result_file, 변수1, 변수 2 ... 등등 + CString("\n")
);
fclose(m_result_file);
}
해당 코드로는 CString을 이용한 파일 쓰기가 안되고 구글 검색 시에 나오는 파일 쓰기는 오류 등이 있다,
그래서 구글링 결과 다음과 같이 처리할 경우에 문제가 없어서 남겨둔다.
추가 팁으로 파일 존재 유무 코드가 있다.
WIN32_FIND_DATA finddata;
ZeroMemory(&finddata, sizeof(finddata));
HANDLE hExist = FindFirstFile(filepath, &finddata);
if(hExist == INVALID_HANDLE_VALUE) {
//이 경우에 파일이 없다는 뜻.
}
TCHAR *szPath;
int nLen;
TCHAR szTemp[2];
WORD wd = 0xfeff;
memcpy(szTemp, &wd, 2); // CString 변환하여 파일에 쓸 경우에 반드시 open 후 첫번째 이 문자열을 넣어줘야 한다.
csvfile.Write(szTemp, 2);
titleStr.Format(_T("~~~~~~~~~~~~~~~~~~~~~~~~~~~~")); //CString을 적당히 편집한다.
szPath = new TCHAR[titleStr.GetLength() + 1];
_tcscpy(szPath, titleStr);
nLen = _tcslen(szPath);
csvfile.Write(szPath, nLen * sizeof(WCHAR));
csvfile.Close();
잘 써짐. 기존에서는 CSV의 컬럼 구분자가 ","였으나 이렇게 사용할 경우에 "\t"이 구분자가 되니 참고 한다.
0. MFC에서는 각 UI Component는 멤버변수를 추가해서 처리하는 것이 훨씬 간편하다
방법은 리소스 편집기에서 멤버변수 추가를 원하는 컴포넌트를 클릭후에 우클릭을 하면 메뉴가 나온다
이 메뉴에서 "Add Variable / 변수 추가하기"를 선택하면 마법사가 나온다.
마법사에서 멤버 변수명을 추가하고 "Finish/종료"를 선택하면 된다.
1. LISTBOX Tips
a. ListBox에 CString을 추가하기
AddString으로 넣을 경우에 UI 갱신 타이밍에 따라서 순서가 엉킬수가 있다.,
그러므로 Insert(인덱스, CString 객체)가 순서에 훨씬 명시적이다.
2. CEDIT Tips
b. CEDIT 컴포넌트에서의 Text 를 Get/Set하기
길이 - m_edit_fwversion.GetWindowTextLengthW()
Get - m_edit_fwversion.GetWindowTextW(m_fw_ver); // 선언한 CString 객체로 해당 값이 들어온다,
Set - m_admin_password.SetWindowTextW(_T("what you want")); //입력된 문자열이 바로 표시된다.
글자수 제한 - m_edit_sn_date.SetLimitText(3);
숫자만 입력 - 리소스 편집기에서 "Number" 라는 속성(property)를 true를 하면 숫자만 입력받게 할수 있다.
비밀번호 창으로 쓸 때 - "Password"라는 속성을 "true"로 해주면 입력 값이 "*"로 보이게 할 수 있다.
3. COMBOBOX Tips
a. 콤보박스에서 정해진 값만 보여주고 선택한 콤보아이템을 편집하지 못하게 할때
콤보박스 속성에 "Type" 중에 "Dropdownlist"를 선택할 경우에 정해진 아이템만 선택하고 편집이 불가능하게 할 수 있다.
b. 콥보박스에서 선택된 셀의 Text를 읽어오기.
GetLBText를 사용하면 해당 콤보박스의 아이템 텍스트를 바로 가져올 수 있고 형식은 CString이다.
ex. m_cb_sn_group1.GetLBText(m_cb_sn_group1.GetCurSel(),set_p_group1);
RECENT COMMENT