Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

윈폼개발

닷넷을 기반으로 한 윈도우 응용프로그램 개발 지식을 다룹니다. 비지니스 응용프로그램을 위한 닷넷 윈폼 응용프로그램은 아주 강력합니다

[기본] 비주얼 스타일과 텍스트 렌더링 설정

작성자 : 박종명
최초 작성일 : 2008-06-25 (수요일)
최종 수정일 : 2008-06-25 (수요일)
조회 수 : 5946

앞서 Application 으로 메인폼을 실행시키는 것에 대해 알아보았습니다.

 

VS 2005 로 윈폼을 만들면 Program.cs 파일에 다음과 같은 코드가 자동 됩니다

이번 포스트에서는 이 부분에 대한 설명을 잠시 하고 넘어가고자 합니다 

 

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Form1());

  

우선,

Application 클래스의 정적메서드인 EnableVisualStyles 은 현재 윈도우 응용프로그램의 비주얼(Visual) 스타일을 적용하도록 하는 메서드 입니다. 단 해당 컨트롤과 운영체제가 비주얼 스타일을 지원하는 경우만 가능합니다

 

지원되는 운영체제 목록

Windows XP Home Edition, Windows XP Professional x64 Edition, Windows Server 2003

 

또한 이 메서드는 컨트롤이 만들어 지기 전에 호출해야 되므로 폼을 생성하기 이전에 코드가 기록되어 있습니다

 

비주얼 스타일을 적용했을 경우와 하지 않았을 경우의 UI 샘플을 보여 드리겠습니다

 

1. 비주얼 스타일을 적용한 경우

 

2. 비주얼 스타일을 적용하지 않은 경우

 

폼에 버턴과 콤보박스 컨트롤이 올라가 있는데요.. 컨트롤에는 아무런 설정을 하지 않았습니다

단지, Application.EnableVisualStyles() 로 비주얼 스타일을 적용/적용않음 을 설정했을 뿐인데 UI 가 확연히 달라져 보임을 확인 할 수 있습니다

 

이처럼 비주얼 스타일을 적용하면 UI 가 좀더 깔끔하고 이쁘게 보이게 됩니다

 

현재 우리는 VS 2005 , .NET Framework 2.0 기반의 응용프로그램에서 설명합니다

.NET Framework 1.x 기반에서는 이와 관련해 주의사항이 있습니다

 

다음은 MSDN 에 설명입니다

 

참고

NET Framework 2.0 이전 버전에서는 비주얼 스타일로 컨트롤을 그리기 위해 ButtonBase에서 파생되는 컨트롤과 같은 일부 컨트롤의 FlatStyle 속성을 FlatStyle.System으로 설정해야 합니다. .NET Framework 2.0으로 작성된 응용 프로그램에서는 더 이상 이러한 작업이 필요하지 않습니다.

 

Application 클래스로 설정된 정보는 응용프로그램 수준, 즉 현재 응용프로그램 전체에 설정되므로

Program.cs 파일 처럼 폼을 띄우기 전에 한번 호출하거나 메인폼에서 직접 해출하면 모든 폼에 적용이 됩니다

 

 

다음으로 SetCompatibleTextRenderingDefault 메서드에 대해서 알아 보겠습니다

역시 Application 클래스의 정적멤버인 이 메서드는 .NET Framework 2.0 에 새로 추가된 메서드 입니다

이 메서드는 윈폼 컨트롤들의 UseCompatibleTextRendering 속성에 대한 응용프로그램 수준의 기본값을 설정하는

역할을 하게 됩니다

 

컨트롤의 UseCompatibleTextRendering  속성은 컨트롤에 텍스트를 랜더링 할때
기존 GDI 그래픽 라이브러리를 사용할 지 아니면 최신 GDI+ 라이브러리를 사용할 지에 대한 설정입니다.
라고 되어 있습니다. GDI+ 을 사용하려면 true 그렇지 않으면 false 로 설정합니다

 

다음은 MSDN 에 이와 관련된 내용 발췌입니다

 

"일부 Windows Forms 컨트롤은 GDI 그래픽 라이브러리 또는 최신 GDI+ 라이브러리를 사용하여 텍스트를 렌더링할 수 있습니다. 이는 GDI+의 성능 및 지역화 문제 때문에 변경된 것입니다. 기본적으로 UseCompatibleTextRendering 속성을 지원하는 기존 컨트롤은 이전 버전과의 호환성을 위해 이 속성이 true로 설정되지만 Visual Studio 같은 환경에서 모든 새 컨트롤은 이 속성이 false로 설정합니다. 새 컨트롤의 기본 텍스트 렌더링을 전환하려면 SetCompatibleTextRenderingDefault를 사용합니다"

 

 

이 정도만으로 언뜻 이해하기 힘듦니다

컨트롤의 UseCompatibleTextRendering  속성과 관련해 인터넷의 다음 자료를 살펴 보시기 바랍니다

빨간색으로 강조한 텍스트를 보세요~

원문 : http://msdn.microsoft.com/msdnmag/issues/07/04/Aero/default.aspx?loc=ko

 

-----------------------------------------------------------------------------------------------------------------

투명한 배경 위에 표시

투명한 배경 위에 창을 표시하기는 다소 어렵습니다. 원래 불투명한 항목(: GDI 기능)을 렌더링하면 해당 항목이 투명한 배경 위에 렌더링되고, 경우에 따라 예기치 않은 결과가 나타나기도 합니다. 실제로 투명한 표면에 렌더링 이미지를 혼합하려는 경우에는 GDI+, Windows Presentation Foundation, Windows XP Theme API 등 색의 알파 채널을 활용한 기능을 유용하게 이용할 수 있습니다.

특히 GDI 항목을 검정으로 렌더링할 때에는 0x00000000라는 비트 패턴을 사용한다는 사실을 알아야 합니다. 알파 채널을 사용할 때에도 이러한 항목은 완전히 투명한 검정으로 나타납니다. 다시 말해, 검정 GDI 브러시 또는 펜을 사용하여 그리면 검정이 아니라 투명한 색이 나타납니다. 이로 인해 발생하는 가장 큰 문제는 투명한 영역에 있는 텍스트 레이블의 컨트롤에 기본 텍스트 색을 사용할 때 발생합니다. 보통 기본 텍스트 색은 검정이므로 DWM은 이를 투명하게 표시해야 하는 항목으로 간주하여 텍스트가 투명하게 표시됩니다. 이에 대한 예는 그림 10에 나와 있습니다.

 

첫째 줄은 GDI+로 작성한 텍스트 레이블이고, 둘째 줄은 기본 색을 사용한 텍스트 레이블입니다.

그림에서 알 수 있듯이 검정이 아니라 회색으로 잘못 렌더링되었기 때문에 알아보기가 어렵습니다

 

그림 10 투명 대화 상자

다행히 이 문제는 여러 가지 방법으로 해결할 수 있습니다. 그 중 하나로 소유자 그리기 컨트롤을 사용할 수 있습니다. 또는 알파 채널이 있는 비트맵으로 렌더링할 수도 있습니다.

그러나 컨트롤의 텍스트를 표시하는 가장 쉬운
방법은 .NET Framework 2.0에서 GDI+를 사용하도록 하는 것입니다. 그렇게 하려면 컨트롤에 대한 UseCompatibleTextRendering 속성만 설정하면 됩니다.

이전 버전의 .NET Framework용으로 작성된 컨트롤이 동일하게 렌더링되도록 하기 위해 이 속성은 False로 기본 설정되어 있습니다. 이 속성을 True로 설정하면 텍스트가 올바르게 표시됩니다.

Application.SetUseCompatibleTextRenderingDefault
메서드를 사용하면 이 속성을 전역으로 설정할 수 있습니다.

Visual Studio® 2005
를 사용할 때에는 폼을 생성하기 전의 기본 루틴에 템플릿 코드에 호환되는 텍스트 렌더링 기능을 False로 설정하는 호출이 포함됩니다. 아래와 같이 이 코드를 편집하여 True로 설정하면 투명한 창에 작성될 때 모든 컨트롤이 올바르게 표시됩니다.

static void Main(){

   Application.EnableVisualStyles();

   Application.SetCompatibleTextRenderingDefault(true);

   Application.Run(new GlassForm());

}

 

이와 관련한 자세한 정보와 TextRenderer 클래스 사용 방법은 MSDN Magazine 2006 3월호에 실린
Miguel A. Lacouture
의 기사, "Windows Forms 컨트롤의 복잡한 스크립트를 사용한 다국적 응용 프로그램 작성"을 참조하십시오.

투명 효과는 창 렌더링 작업을 시작하기 직전에 활성화해야 합니다. 혼합 엔진은 창의 알파 값을 확인하고 불투명하지 않은 영역에 흐린 효과를 적용합니다.

그런데 알파 값이 보존되지 않는 일부 GDI 기능을 사용할 때에는 문제가 발생할 수 있습니다. 꼭 필요한 경우에는 GDI+를 사용해야겠지만, GDI+ 호출은 하드웨어가 아니라 소프트웨어에 렌더링되기 때문에 창 재생 빈도가 높을 때 GDI+ 호출이 발생하면 시스템 리소스가 많이 소모되므로 주의해야 합니다.

DirectX 응용 프로그램에 투명 효과를 구현할 때에도 이와 같은 방법이 사용됩니다. , 두 가지 투명 효과 지원 DWM 함수 중 하나를 사용하고 렌더링 대상의 알파 값을 제어하기만 하면 됩니다. 그러면 DWM이 투명 효과를 사용하도록 지정할 때마다 렌더링 대상의 알파 값이 사용되고 그렇지 않은 경우에는 렌더링 대상이 불투명하게 표시되거나 정의되지 않은 동작이 발생하게 됩니다

 

 

이름
비밀번호
홈페이지
SJ <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요