Quantcast
Channel: kkomzi
Viewing all articles
Browse latest Browse all 142

윈도우 폼 개발후 배포시 사이즈가 이상하다...?

$
0
0

AutoScaleMode열거형

Windows Forms에서지원하는여러종류의자동크기조정모드를지정합니다.

네임스페이스:System.Windows.Forms

어셈블리:System.Windows.Forms(System.Windows.Forms.dll)

구문

publicenum AutoScaleMode

멤버이름

설명

None

자동크기조정을사용할없습니다.

Font

클래스에서사용하는글꼴(대개시스템글꼴)크기를기준으로크기를제어합니다.

Dpi

디스플레이해상도를기준으로크기를제어합니다.일반적인해상도는 96DPI 120DPI입니다.

Inherit

클래스의부모크기조정모드에따라크기를제어합니다.부모가없는경우자동크기조정을사용할없습니다.

설명

ContainerControl클래스와클래스에서파생된Form등의클래스에서는해당항목자체와내용의크기를현재시스템글꼴또는디스플레이해상도(DPI)따라자동으로조정할있습니다.AutoScaleMode열거형은이러한클래스와이러한클래스의파생형식에서지원하는자동크기조정모드를정의합니다.컨트롤의현재모드는ContainerControl.AutoScaleMode속성을통해액세스할있습니다.

대부분의비즈니스응용프로그램에서는Font자동크기조정모드를사용해야합니다.Dpi크기조정모드는그래픽기반응용프로그램에유용하며 .NET Compact Framework에서사용하는기본크기조정기능과호환됩니다.

중요

중요

.NET Framework 버전 1.0 1.1에서지원되는자동크기조정기능은항상현재시스템글꼴에따라달라지는단순한메커니즘을사용했습니다.메커니즘은이상사용되지않지만이전버전과의호환성을위해여전히지원됩니다.포함하는FormAutoScale속성을true설정하여이전의크기조정동작을가져올있습니다. 이러한작업을수행하면ContainerControl.AutoScaleMode속성도None으로암시적으로설정됩니다.반면에폼의ContainerControl.AutoScaleMode속성을설정하면AutoScalefalse설정되어.NET Framework 버전 2.0에서도입된새로운크기조정메커니즘을사용하게됩니다.

Smartphone 응용프로그램에서열거형을사용하려면 Smartphone Windows Mobile 버전 5.0 소프트웨어가필요합니다.

버전정보

.NET Framework

4, 3.5, 3.0, 2.0에서지원

.NET Framework Client Profile

4, 3.5 SP1에서지원

플랫폼

Windows 7, Windows Vista SP1 이상, Windows XP SP3, Windows XP SP2 x64 버전,Windows Server 2008(Server Core지원되지않음), Windows Server 2008 R2(Server CoreSP1 이상에서지원됨), Windows Server 2003 SP2

.NET Framework에서모든플랫폼의전체버전을지원하지는않습니다. 지원되는버전의목록을보려면.NET Framework 시스템요구사항참조하십시오.

참조

System.Windows.Forms 네임스페이스

ContainerControl.AutoScaleMode

BoundsSpecified

정보가도움이되었습니까? 예아니요

<http://msdn.microsoft.com/ko-kr/library/system.windows.forms.autoscalemode.aspx>에서삽입

 

MSDN 에서 발췌한 내용이다.

 

보통 잘 신경쓰지 않는 속성 하나 때문에 고생 좀 했다...

 

C# 으로 윈폼 어플 개발을 했는데.... 대부분의 컨트롤을 GDI+ 로 직접 그려줘야 했다...

 

그리고, 당당하게 1차 중간점검을 위해 업체에 가서 설명하고 테스트 했다... (물론 내 노트북에서...)

 

그리고, 집으로 돌아오는 길에 윈도우8 에서 실행하니 일부 컨트롤이 깨져서 보인네요... ^,.^;;;;  머지???

 

그래서 Virtual Box 에 직접 설치해서 실행해 보니... 이런... 엉망이다... 머지? 아직 Preview 버전이라 그런가... 내 노트북과 데스크탑... 그리고 업체에서도 아무말 없었는데.... 하필 윈도우8 에 배포될거란다... 헉... 실컷 했는데...다 무용지물인가? ㅋㅋ...

 

노트북에 Visual Studio 11 beta 를 깔아서 다시 빌드한후 윈도우8 에서 실행해 보면..또 마찬가지... 우쒸~

 

그래서 Virtual Box 에 VS 2010 을 직접 설치해서 디버깅 해 보았다...

 

특정 컨트롤을 잡아서 디버깅을 했는데... 분명 해당 컨트롤은 사이즈가 고정값으로 할당하게 되어 있는데... 생성자에서 고정값으로 할당하고

 

OnPaint 에서 영역게산 하는 부분에서 ClientRectangle 을 BreakPoint 걸어서 확인해 보면 사이즈가 이상하게 변경되어 있다...

 

머지?? ㅡㅡ;;

 

머 이래 저래 삽질 하다가 결국 위 프로퍼티가 문제....

 

System.Windows.Forms.ContainerControl 를 상속받아서 AutoScaleMode 속성이 있는 모든 컨트롤의 속성을 변경해 주기로 했다. (DPI 로)

 

아래는 AutoScaleMode 소스...

 

/// <summary>
    /// 컨트롤의 자동 크기 조정 모드를 가져오거나 설정합니다.
    /// </summary>
    ///
    /// <returns>
    /// 현재 크기 조정 모드를 나타내는 <see cref="T:System.Windows.Forms.AutoScaleMode"/>입니다.기본값은 <see cref="F:System.Windows.Forms.AutoScaleMode.None"/>입니다.
    /// </returns>
    /// <exception cref="T:System.ComponentModel.InvalidEnumArgumentException">유효하지 않은 <see cref="T:System.Windows.Forms.AutoScaleMode"/> 값을 사용하여 이 속성을 설정한 경우</exception>
    [Browsable(false)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    [SRCategory("CatLayout")]
    [SRDescription("ContainerControlAutoScaleModeDescr")]
    [EditorBrowsable(EditorBrowsableState.Advanced)]
    public AutoScaleMode AutoScaleMode
    {
      get
      {
        return this.autoScaleMode;
      }
      set
      {
        if (!System.Windows.Forms.ClientUtils.IsEnumValid((Enum) value, (int) value, 0, 3))
          throw new InvalidEnumArgumentException("value", (int) value, typeof (AutoScaleMode));
        bool flag = false;
        if (value != this.autoScaleMode)
        {
          if (this.autoScaleMode != AutoScaleMode.Inherit)
            this.autoScaleDimensions = SizeF.Empty;
          this.currentAutoScaleDimensions = SizeF.Empty;
          this.autoScaleMode = value;
          flag = true;
        }
        this.OnAutoScaleModeChanged();
        if (!flag)
          return;
        this.LayoutScalingNeeded();
      }
    }

 

autoScaleDimensions 도 바뀐다...

 

현재 내 노트북 (굴림, 9pt) <=> VirtualBox 에 설치된 윈도우8 (Microsoft Sans Serif, 8.5pt)

 

으... 영문이 이었지... 폰트가 다르다.. 그래서 폰트에따라 Scaling 다르게 적용되다 보니... 쩝...

 

this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;

 

지금까지는 영문판에 배포해서 이상하면 걍 폰트롤 맞추거나 했는데...

 

디자이너 띄워서 아예 ScaleMode 를 DPI 로 변경하니...그대로 잘 적용된다...

 

물론 메인 폼 뿐만 아니라...System.Windows.Forms.ContainerControl 를 상속받는 모든 컨트롤의 속성을 변경해 줘야 한다는 점이 중요 !!

 

혹시나 다음에 잊어버릴까바... 장황하게 코멘트(?) 한다...

 

아유... 이거 삽질한다고.. 진도 하나도 못 나갔네 ㅠ,.ㅠ

 

결국...GDI+ 탓도...윈도우8 탓도... 영문판이라는 탓도 할 수 없다. 매커니즘을 제대로 파악하지 않았고...그동안 그냥 대충 넘어가서 그런가 보다...

 

되도록 이면 조금 이라도 더 깊이 제대로 이해하고 넘어가야 하겠다...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

저작자 표시비영리동일 조건 변경 허락

Viewing all articles
Browse latest Browse all 142

Latest Images

Trending Articles