본문 바로가기

김탱 개발자/윈도우프로그래밍

(12)
윈도우의 폰트 선택 기준? 1. GetStockObject()로 얻어오는 SYSTEM_FONT or DEFAULT_GUI_FONT 는 윈도우의 UI 시스템폰트와 다르다?Windows10 기준으로 윈도우의 UI폰트는 '맑은 고딕'이다. 근데 GetStockObject에서 얻어오는 폰트는 '굴림'이다.
데이터베이스 관련 회사의 클라이언트 DB가 MS Access 의 mdb인데, 여기저기 들리기로는 문제점이 많은 DB라 한다.물론, 네트워크의 연결되어봤자 4~5개 PC정도의 네트워크 공유 수준인데다가, 그리 큰 규모의 데이터복잡성이 없다.(A/S 담당자님의 말로는 DB문제 얘기하면 날을새도 모자란다고....)만약 새 프로젝트를 작업하게 되면은 DB를 교체해볼까해서 정리해본다. 필요와 수준에 맞는 DB를 사용하면 되지만, 멀티플랫폼 세상에서 Local로만 이용하는 클라이언트는 한계가 있을듯 싶다 1. 데이터베이스의 분류와 종류(링크) 2. MS Access (mdb)의 장단점Access vs SQLite(링크)장점- 인터페이스의 편의성(DB관리 용이)- 데이터 엑세스에 대한 접근을 레이어 단위로 분리- 비즈니스 객체에 대한..
유니코드 텍스트 파일 읽기/쓰기 작성중 유니코드로 인코딩된 텍스트파일을 읽을경우 CString 비교가 안되어서 골치아팠는데일반적으로 코딩상에서 CString str=L"김태영" 을 저장하고 str.Compare(L"김태영") 은 되지만CFile로 읽어들여와서 CString에 저장된것을 비교하기위해서는 뒤에 \r\n을 붙여줘야 비교가되더라.. 읽기는 여러방법 중 직접 해본 두가지 방법이 있다. CFile의 Read()로 전체파일 사이즈를 구해서 통으로 읽는방법데이터를 분류하기위해서는 토큰을 써야하지만, 유니코드 데이터는 깔끔하게 들어온다. CFile pFile; if(pFile.Open(m_PathCur+L"파일명",CFile::modeRead | CFile::typeBinary)) { CString str; pFile.Seek(2,CF..
다국어를 지원하는 여러가지 방법 국내에서만 프로그램이 유통된다면 필요없다. 그러나! 그 프로그램은 국내에서밖에 못판다. 무엇보다 국내 소프트웨어 시장은 전세계 시장에서 명함도 못내밀 사이즈..라고 한다.물론, 영어정도는 자체적으로 번역이 가능하겠지만, 일본어,중국어,베트남어,러시아어 등등 각 나라마다 번역해야하는 비용가치를 따져봐야겠다. 우선 다국어를 지원하는 프로그램을 제작하려면 유니코드 개발이 필수!라고 생각하면 되겠다. 멀티바이트 집합 개발 시에는 문제점이라기 보다 유니코드에서는 고려 안해도 될 것들이 몇가지 생기기 때문에 굳이 MBCD 개발로 가야할 이유가 있다면 모를까 그냥 유니코드로 개발하면 좋겠다. 여러 방법들에 대해 나열하자면,1. Resource DLL 을 언어별로 제작하여 배포하는 방법 대표적인 매뉴얼로 구글링하다보면..
DLL 로딩 시 검색 순서 Visual Studio에서 라이브러리 파일을 링크 및 빌드해놓고 DLL을 제대로 된 경로에 넣어 놓지 않으면, DLL을 찾을수 없다는 에러 메세지가 뜬다.아래와 같은 순서로 해당 경로에 DLL이 없을 경우 에러메세지가 뜨게 되는데 DLL을 아래 경로에 중복해서 넣어놓았을 경우, 버전업데이트 시에 분명 업데이트 버전을 넣었는데 반영이 안되는 경우가 발생 할 수있다. 1. DLL을 호출한 EXE파일이 있는 디렉토리2. 프로세스의 현재 디렉토리3. 윈도우 시스템 디렉토리4. 윈도우 디렉토리5. PATH 환경 변수에 저장된 디렉토리 윈도우쪽 디렉토리로 넘어가게 되면 외부에 다른 DLL파일명과 중복되는 경우(난 ABC.dll을 만들었는데, 다른 프로그램에서도 ABC.dll로 만들 경우)가 생겨 충돌하기 때문에 ..
사각영역 잘라내기 (Image Crop) 어떤 이미지를 불러온다는 것은 이미지를 줄이든 확대하든 파일명 or 확장자를 변경하든 뭔가 필요로 인해서 불러온다.고객 얼굴이미지 or 제품 이미지를 등록해서 관리하는 프로그램에서는 이미지를 DB에 저장하고 다시 보여주기 위해서는사이즈 조정이 필요하다. 이번에 제품을 등록/관리하는 프로그램에서 추가기능 구현을 위해 이미지를 Open하고 원본 사이즈의 이미지가 뜨면 사각영역을 움직이고 키우고(비율유지)해서 저장하는 기능이다. 몇가지 고려할 사항이 있었는데,Image Open 시1. Image가 해상도 보다 클 경우 (Width or Height)2. Image가 해상도 보다 작지만, Dialog영역이 해상도를 벗어나는 경우 Image Save 시 (원본 저장)1. 사각영역(200x250)보다 Image가 ..
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..