티스토리 뷰
Source : http://blog.naver.com/PostView.nhn?blogId=aquayo&logNo=80092583031&redirect=Dlog&widgetTypeCall=true
테스트 장비: Windows embedded CE 6.0
PC에서는 C#으로 ClearType을 처리하는데 TextRenderingHint를 가지고 처리가 가능한데, WinCE에서는 지원이 안되는 부분이므로 아래와 같이 처리를 할 수 있습니다.
이 처리가 필요한 이유는 기본 폰트가 아닌 다른 폰트를 사용시 글자가 깨끗하게 보이지 않으므로, ClearType을 적용한것입니다.
(C++은 아래의 함수를 그냥 호출시켜서 쓰시면 됩니다. C#은 대응하는 함수를 찾지 못해서 추가한것입니다)
레지스트리를 수정해서 하는 방법도 있던데 소스로 처리해봅니다.(Display Driver에 따라서 적용안될수도 있다는 것을 웹에서 본듯 합니다)
1: using System.Runtime.InteropServices;
2: ...
3: [DllImport("coredll.dll")]
4: private static extern int SystemParametersInfo(int uiAction,
5: int uiParam, out int pvParam, int fWinIni);
6: [DllImport("coredll.dll")]
7: private static extern int SystemParametersInfo(int uiAction,
8: int uiParam, IntPtr pvParam, int fWinIni);
9: const int SPI_GETFONTSMOOTHING = 0x0000004A; // use pvParam
10: to query
11: const int SPI_SETFONTSMOOTHING = 0x0000004B; // use uiParam
12: to set
13: public bool SystemWideClearType
14: {
15: get
16: {
17: int enabled;
18:
19: SystemParametersInfo(SPI_GETFONTSMOOTHING, 0, out enabled, 0);
20: return (enabled != 0);
21: }
22: set
23: {
24:
25: SystemParametersInfo(SPI_SETFONTSMOOTHING, value ? -1 : 0, IntPtr.Zero, 0);
26: }
27: }
사용법:
프로그램 시작시(각자 만든 APP) : SystemWideClearType = true;
프로그램 종료시: SystemWideClearType = false;
위의 코드를 활용해서 처리하면 내 프로그램이 구동하는 동안 모든 Windows의 APP 폰트가 ClearType으로 변경됩니다.
XP/Vista/windows7 에서 폰트를 ClearType 설정하는 것처럼 된다는 것입니다.
계속 cleartype을 유지시키기 위해서는 프로그램 종료시 false 세팅을 호출 안하면 됩니다.
디바이스에 나의 프로그램이 아닌 다른 프로그램도 실행되어져야 하는경우,
문제가 있을수 있겠네요. 그 프로그램은 cleartype을 안써야 폰트가 깨끗하게 보이는 경우가 있을때...
이런 경우, APP에서만 ClearType을 처리할 수 있습니다. LOGFONT사용...
우선 .NET Compact Framework 2.0이 필요합니다.
이것은 using Microsoft.WindowsCE.Forms; 을 사용하기 위함입니다. 3.x에는 안보이네요..ㅡㅡ;
문제는 메모리가 충분치 않은 상황에서 2.0을 사용하고자 한다면 배포시 설치 문제가 있을 수 있습니다.
따라서 2.0에 있는 LOGFONT클래스들과 enum값을 가지고 와서 3.x대에서 사용해보는데 exception이 발생하네요.
LogFont lf;
Font myFont;
lf = new LogFont();
lf.Height = -32;
lf.Width = 0;
lf.Escapement = 0;
lf.Orientation = 0;
lf.Weight = (LogFontWeight)0;
lf.Italic = 0;
lf.Underline = 0;
lf.StrikeOut = 0;
lf.CharSet = LogFontCharSet.Default;
lf.OutPrecision = LogFontPrecision.Default;
lf.ClipPrecision = LogFontClipPrecision.Default;
lf.Quality = LogFontQuality.ClearType;
lf.PitchAndFamily = LogFontPitchAndFamily.Default;
lf.FaceName = "AritaM";
myFont = Font.FromLogFont(lf); <- 여기서 발생하네요.
굳이 APP에만 적용할 필요가 없다면 상단의 소스를 사용하시면 됩니다.
소스는 첨부해두니 해결하시는 분은 답글 적어주세요ㅜ.ㅜ 2.0을 안쓰고 하는 방법......
'Application > C#' 카테고리의 다른 글
C# 다른 버튼 액션 갖다쓰기. (0) | 2014.05.10 |
---|---|
XNA를 시작합시다! (0) | 2011.12.31 |
컨트롤 드래그 (0) | 2010.10.31 |
C# 메세지 처리 (0) | 2010.07.16 |
닷넷에서의 INI 파일 입출력 (0) | 2010.07.15 |
- Total
- Today
- Yesterday
- C#
- 야마꼬툰
- BadCode
- 프리랜서로 살아남는 법
- Embedded System
- Battle
- 3D Engine
- console
- Network Inspector
- Assembly
- Military
- USB Lecture
- Tech News
- Information Processor
- Web Programming
- Mabinogi
- 짤방 및 아이콘
- network
- medical
- humor
- Linux
- 나비효과
- Reverse Engineering
- Life News
- win32
- cartoon
- diary
- 막장로그
- WDB
- wallpaper
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |