본문 바로가기

분류 전체보기

(49)
사각영역 잘라내기 (Image Crop) 어떤 이미지를 불러온다는 것은 이미지를 줄이든 확대하든 파일명 or 확장자를 변경하든 뭔가 필요로 인해서 불러온다.고객 얼굴이미지 or 제품 이미지를 등록해서 관리하는 프로그램에서는 이미지를 DB에 저장하고 다시 보여주기 위해서는사이즈 조정이 필요하다. 이번에 제품을 등록/관리하는 프로그램에서 추가기능 구현을 위해 이미지를 Open하고 원본 사이즈의 이미지가 뜨면 사각영역을 움직이고 키우고(비율유지)해서 저장하는 기능이다. 몇가지 고려할 사항이 있었는데,Image Open 시1. Image가 해상도 보다 클 경우 (Width or Height)2. Image가 해상도 보다 작지만, Dialog영역이 해상도를 벗어나는 경우 Image Save 시 (원본 저장)1. 사각영역(200x250)보다 Image가 ..
유니코드를 멀티바이트로 변환 아직 많은 개발을 하지 않았지만 국내에서만 사용하는 프로그램이 아니라면 유니코드로 개발하는것이 정말 편하다. 근데, 외부 라이브러리를 써야되는 경우 char* 로 받는 경우가 굉장히 많기 때문에 부득이 멀티바이트로 변환해야하는 경우가 생긴다. http://eslife.tistory.com/253 위 블로그에서 유니코드에 대해 설명을 잘해놓아서 링크함. 검색해보면 여러가지 방법이 많이 있지만, WideCharToMultiByte()가 정확하다. CString strPath; strPath.Format(L"%s\\%s",path,m_arrPath->GetAt(i)); wchar_t* wchar_str; char* char_str; int char_str_len; wchar_str = strPath.GetBu..
간단하게 Excel 읽고 쓰기 (BasicExcel 사용) http://www.codeproject.com/Articles/13852/BasicExcel-A-Class-to-Read-and-Write-to-Microsoft MFC에서 Excel의 모든기능을 사용하기위해서는 Excel Automation을 사용해야하며 관련 드라이버와 배포가 필요하다. BasicExcel 클래스는 이름 그대로 기본적인 Sheet를 읽고 쓰기의 기능만 지원하고 장점은 배포 시 추가내용이 없다는 점. 다만 최신 엑셀파일은 지원하지않고 2003 엑셀 파일(Microsoft Office Excel 97-2003 워크시트(.xls)) 을 지원하기 때문에 제약이 있다. 알고 있기로는 엑셀이 한글명일 경우 안된다고 하는데 테스트는 안해보았다. 사용법은 해당 Page에 잘 나와 있으나, 내가 테..
VB6.0 호환 DLL 제작 우선 Visual Basic 6.0의 데이터 형식을 알아야된다. 저장용량과 범위를 체크해서, Visual Studio의 데이터형과 맞는 값을 보내주거나 받으면 된다. 빈프로젝트에서 시작해도 되지만 VS는 친절하게 DLL 제작에 필요한 프로젝트를 지원한다. Win32 프로젝트 -> DLL -> 마침 그러면 소스파일에 dllmain.cpp , dlltest.cpp, stdafx.cpp 와 헤더파일에 dlltest.h, stdafx.h, targetver.h 요렇게 생긴다 (dlltest는 프로젝트명) dlltest.h에다가 함수를 정의한다. VB에서 String형은 char* 형이므로 문자열을 보내고, 나머지는 구조체로 보낸다. #ifdef DLLTEST_EXPORTS #define DLL_TEST_API ..
CFile 클래스사용 csv파일로 저장 (유니코드) 저장 CFile file; CString str,str2; USHORT nShort = 0xfeff;str2.Format(L"%s\t%s\t%s\t%s\t%s\n",m_List1.GetItemText(0,0),m_List1.GetItemText(0,1),m_List1.GetItemText(0,2),m_List1.GetItemText(0,3),m_List1.GetItemText(0,4)); str.Format(L"제품\t단가\t테스트1\t테스트2\t테스트3\n"); if(file.Open(L"test.csv",CFile::modeCreate | CFile::modeWrite | CFile::typeBinary)){ file.Write(&nShort,2);file.Write(str, str.GetLength..
spreadsheet activex control https://www.microsoft.com/ko-KR/download/details.aspx?id=22276
MFC 관련 팁들 아래 항목만 다 알면 코딩하는데 많은 도움이 되리라 생각됩니다.저도 사실 전부 모릅니다 ㅡㅡ;;너무 많은 걸~~ 1. DC얻기 CClientDC dc(this); 2. Client 영역 구하기 GetClientRect(&rect); WM_SIZE 메시지발생후 cx,cy 사용 3. 문자열 사각형안에 그리기 pDC->DrawText(문자열,사각형,Style); Style: DT_BOTTOM - 문자열을 사각형 맨아래줄에배열 반드시 DT_SINGLELINE과 함께사용 DT_CENTER - 문자열을 가로중앙에 배치 DT_VCENTER - 문자열을 세로중앙에 배치 DT_LEFT,RIGHT - 문자열을 좌,우로 배치 DT_SINGLELINE - 문자열을 한줄로만 쓴다 4. Brush 사용법 CBrush brushn..
컴파일 옵션 (/MT /MD 등등) opencv 라이브러리와 다른 라이브러리 2개를 같이 사용하는 DLL을 만들게 되었는데 DLL제작하는 프로젝트와 DLL 을 테스트하는 프로젝트에서 모두 "~정의가 이미 되었습니다" 라는 에러를 발생하였다.찾아보았더니, 링크버전이 다를 경우 이런 에러가 발생하게 되었고 모든 프로젝트의 컴파일 옵션을 /MT로변경하였더니 잘 작동이 되었다.DLL 을 만드는것이기 때문에 당연히 /MD로 컴파일을 하려고했으나 외부 라이브러리가 /MT 로 제작된것이라면 이런 에러가 발생한다. 따라서 하나로 통일하는것이 중요하다.또한 굳이 /MD로 컴파일 안하더라도 DLL 제작에 문제는 없다. 추가적으로, 프로그램와 라이브러리가 런타입 옵션이 다른 경우에 정상적으로 빌드가 되는 경우가 있는데,그냥 사용할 경우 사용 도중 프로그램이 ..