2010-05-06 4 views
0

유리에 부드러운 텍스트를 그리는 다른 많은 샘플을 보았습니다. 그러나 나는 그들을 사용할 수 없다. 매순간 매끄러운 레이블을 추가해야합니다. 텍스트를 화면에 "그릴"수는 없습니다.유리에 부드러운 텍스트

가능한가요?

답변

0

이 문서 http://msdn.microsoft.com/en-us/magazine/cc163435.aspx#S6

그것은 조금 길다하지만 유리에 관해서 alore 더 질문을 많이 응답하고에 걸리 감사드립니다.

하지만 당신에 대한 관련 부분은 바로

하나 개의 특정 잡았다 블랙의 GDI 항목이 비트 패턴을 0x00000000 - 또한 는 경우 완전히 투명 검은 될 일을 사용하여 렌더링이다 알파 채널을 사용 중입니다. 즉, 을 검은 색 GDI 브러시 또는 펜으로 그릴 경우 은 검은 색이 아니고 이됩니다. 이 가장 큰 문제는 글자 영역에있는 텍스트 레이블의 컨트롤에서 기본 색 을 사용하려고 할 때 발생합니다. 기본 텍스트 색은 일반적으로 이므로 DWM에서는 이 투명하고 텍스트 이 유리 에 잘못 작성된 것으로 간주합니다. 예는 그림 10에서 볼 수 있습니다. 첫 번째 줄은 GDI +와 함께 으로 쓰여지고 두 번째 줄은 기본 색을 사용하는 텍스트 레이블입니다. 실제로 은 회색으로 표시되는 렌더링 된 텍스트이므로 은 검은 색이 아니기 때문에 으로 볼 수 있습니다. 실제로는 거의 읽을 수 없습니다. .

행복하게,이 문제를 해결하기 위해 많은 방법이 있습니다. . owner-draw 컨트롤을 사용하는 것은 하나입니다. 알파 채널이있는 비트 맵 에 렌더링하는 것이 다른 것입니다. 다행히도 텍스트를 컨트롤에 가져 오는 가장 쉬운 방법은 .NET Framework 2.0에서 GDI +를 사용하는 것입니다. 이 은 에서 UseCompatibleTextRendering 속성을 으로 설정하면 쉽게 수행 할 수 있습니다. 기본적으로이 속성은 false로 설정되어 있으므로 컨트롤이 이전 버전 용으로 작성된 은 .NET Framework에서 으로 렌더링됩니다. 그러나이를 true로 설정하면 텍스트가 올바르게 표시됩니다. Application.SetUseCompatibleTextRenderingDefault 메서드를 사용하여 속성을 전역으로 설정할 수 있습니다.

그는 또한 예제 코드는 당신이 당신의 홈페이지()

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(true); 
    Application.Run(new GlassForm()); 
} 

에 배치 할 수 있습니다 제공하지만 기사를 읽어 보시기 바랍니다, 그것은 에어로/유리

으로 무슨 일을 많이 정리합니다

건배, Phyx

+0

Phyx. 그것은 내가 처음 읽은 기사였습니다. Application.SetCompatibleTextRenderingDefault 설정 (true); true로 설정하면 내 컴퓨터에서 눈에 띄는 차이가 없습니다. –

+0

그러면 약간 더 변형 된 작업을 할 수 있습니다. 일반 Label을 확장하는 사용자 정의 레이블을 만들 수 있습니다. OnPaint 이벤트를 오버라이드하고 대신 DrawThemeTextEx를 사용합니다. http://stackoverflow.com/questions/2298819/using-drawthemetextex-in-c/2781072#2781072 – Phyx

+0

Phyx, 지금 고맙습니다. –