본문 바로가기

김탱 개발자/MFC

(12)
GDI 문자 자간(간격) 조정 (GDI+는 자간 조정 안됨) 프린트를 할일이 생겨 텍스트를 출력하는데 GDI+를 사용했다 (그래프 도형 품질때문에) 근데 맑은고딕의 기본 문자폭과 자간이 너무 넓어 줄이려고 했더니.. 안된다..열심히 뒤져본 결과 GDI+에서는 지원자체를 하지않는다고 한다. 이유 인 즉, 동일한 품질의 텍스트를 제공하기 위해서라나..하여튼 우회방법으로는 한글자씩 출력하여 MeasureString으로 한글자의 크기를 구해서 자간을 직접 조정하는 방법이 있는데굳이 그러면서 까지 GDI+ 문자출력을 고집할 필요는 없다. 왜? GDI에서 제공하니까..SetTextCharacterExtra() 함수를 이용하면 문자 자간을 조절 할 수있다. 혹시나해서 위 함수로 HDC에 세팅하고 GDI+로 불러와 DrawString 해보았으나, 먹히지 않았다. 문자폭 또한 줄..
Gdiplus 제한적 폰트 인식 Gdiplus로 DC에 글자를 출력하면 GDI를 쓰는것보다 깔끔하게 출력이 가능하다 (안티알리아싱 이용)근데.. Noto Sans CJK 란 폰트를 인식 못하는게 아닌가.열심히 찾아본 결과. .ttf(트루타입) 폰트는 사용이 가능한데, .otf(오픈타입)는 제한적으로 Gdiplus가 사용가능하단다. 더군다나 Windows 10 에서는 정상적으로 출력되던것이 Windows 7 에서는 인식을 못해 기본폰트(맑은고딕)을 가져와서써버려 더 골치가 아팠다.. 왠만하면 Noto Sans CJK 폰트로 사용을 해주고 싶었지만(고객사요청) .ttf 파일이 없는 관계로 다른 비슷한 폰트로 대체하였다. 조심들 하시길.. Graphics ScreenG(pDC->GetSafeHdc()); Gdiplus::Font F(L"No..
CHttpFile의 GetLength 함수 HTTP protocol을 통해 Json 데이터포맷을 이용하여 데이터를 주고받고 있는데, 데이터를 받는 쪽(클라이언트)에서 data 크기를 받아와 읽어야 한다. 근데 불친절한 서버는 헤더에 Content-Length가 없는 경우, 받는 쪽에서 크기를 구해내야 한다. 이부분에서 멍청하게 삽질을 해서 기억도 할겸 적는다. MSDN : https://msdn.microsoft.com/ko-kr/library/5y092fke.aspx CInternetFile::Read 함수 이용 시 사이즈를 지정해줘야하는데 CInternetFile::GetLength 함수 이놈으로 크기를 받는 수 밖에 없다. (서버에서 Content-Length를 헤더에 붙여 보내줄 경우 고민할 필요가 없음) 근데 이 GetLength()가 ..
다국어 지원 관련 함수들 MSDN에서 찾기가 어렵지, 유용한 API들이 많다..다만, 리턴값이나 함수 인자들의 대한 설명이 부족한 느낌..즉 Sample Code가 없으면 바로 적용하기가 힘들다아무리 영어로 되어 있다지만, 구글링 하다보면 "이 함수 어떻게 쓰냐"란 질문이 꽤나 많이 보이는걸로 봐선 MSDN의 설명은 활용적이지 못한것 같다 아무튼 다국어지원을 하다보면 해당 Locale의 맞는 여러 포맷(날짜,통화,숫자,폰트 등등)들을 보여줘야 된다.영어가 만국공용어라지만, 영어권의 날짜까지 m/d/yyyy 를 따라 쓰지는 않는다. (한국은 yyyy-mm-dd) 친절한 프로그램씨를 만들기 위해서 Locale의 포맷들을 가져올 수 있는 함수들이 있다. MSDN - National Language Support Functions (링..
간단하게 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에 잘 나와 있으나, 내가 테..
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..
MFC BMP파일 출력하기 1. OnDraw() 나 OnPaing() 에서 CDC* pDC 를 알고 있을 때, 해당 DC에 외부 BMP파일 출력하는 법 void CImgDlg::OnPaint() {CPaintDC dc(this); // device context for painting// TODO: Add your message handler code here HANDLE bmp;CBitmap cBitmap;BITMAP bmpinfo;CDC memdc;bmp = LoadImage(NULL, "test3.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);cBitmap.Attach(bmp);cBitmap.GetBitmap(&bmpinfo);memdc.CreateCompatibleDC(&dc);memdc.Select..
[퍼옴] OnPaint() 와 OnDraw() 함수에 관하여 출처 : http://six605.tistory.com/53