GSI

사용자 삽입 이미지

Win32 대화 상자와 Windows 폼이 다른 점은 폼이 자동으로 사용자가 Enter, Esc 키가 눌렀을때 키보드 입력을 라우팅 하지 않는 다는데 있다. MFC와 같은 Win32 작업을 할때는 폼을 하나 생성하게 되면 Ok, Cancel 버튼이 생성되게 된다.
하지만 Windows 폼의 경우는 아무것도 생성되지 않는 윈도우만 생성된다.
이때 폼에 OK, Cancel 버튼을 넣어 주고 싶다면, 어떻게 해야 하는가?
이때 위의 이미지에 나오듯이 해당 버튼을 만들고 DialogResult의 속성을 정의해 주면 된다. 더 펀한듯 보인다.
Posted by gsi
:

C#, .NET 의 미리 정의된 타입 비교

C# 프로그램을 하다 보면 int 또는 Int32 라는걸 사용해서 타입을 정해줄 때가 있다.
처음에는 int 형이 있는데 Int32, Int64, int16 과 같은 걸 볼 수 있다.
지금 생각 해보면 int 는 C# 의 미리 정의된 타입이고, Int32 와 같이 int가 대문자 Int로
되는 것은 System을 네임스페이스로 가지는 .Net 의 미리 정의된 타입인거 같다.

몇가지 예)

bool

System.Boolean

True 인지 false 인지 나타내는 논리 값

기본값은 false 이다.

byte

System.Byte

0 부터 255 까지의 값을 저장하는 부호 없는 바이트, 기본값은 0 이다.

sbyte

System.SByte

-128 ~ 127 까지 저장하는 바이트, 기본값은 0이다.

char

System.Char

부호없는 16비트 유니코드 문자, 기본값은 ‘\0’ 이다.

decimal

System.Decimal

128 비트 데이터 형식, 재무 및 통화 계산에 적합하다. 기본값은 0.0m 이다.

double

System.Double

64비트 부동 소수점, 기본값은 0.0d 이다.

float

System.Single

32비트 부동 소수점, 기본값은 0.0f 이다.

int

System.Int32

부호 있는 32비트 정수 타입, 기본값은 0 이다.

uint

System.UInt32

부로 없는 32비트 정수 타입, 기본값은 0이다.

나머지는.. -.- 귀찮네욤. ^^

여기서 중요한건 C#으로 개발하는 사람은 C#의 타입을 사용해서 프로그램을 작성하는게
보다 명확하며, 다른 언어를 사용하는 컴포넌트 개발자와 함께 작업하는 경우에는
언어 사이의 타입을 일치시키기 위해서 반드시 위의 표와 같은 타입을 알고 있어야 한다.
Posted by gsi
:

Win Form Flicker Free

더블 버퍼링 옵션이 따로 있기는 하지만 윈폼도 MFC와 마찬가지로 마우스로 오브젝트 처리시
Flicker 현상은 발생하기 마련이다.

여러가지 자료를 찾다가 VS2008에서 테스트해본 결과 잘 되는거 같다.
이 자료의 출처는 아래와 같다.
http://www.codeproject.com/KB/GDI-plus/flickerFreeDrawing.aspx

이 자료가 2003 버젼인지 지금 테스트 하고 있는 2008에 맞지 않아서 그냥 카피 복사^^
해서 이식 했다.

잘되는듯 하다.
우선 더 해봐야 할 것이 타이머를 통한 많은 객체의 이동 처리 및 다양한
효과들을 구현해 봐야 할거 같다.

관련코드 :
Posted by gsi
:

사용자 컨트롤 배경 투명색으로 처리 하기

이 부분은 뒷 배경을 투명으로 바꾸기는 하지만 Flicker 처리가 되지 않아서
이동시 잔상이 생기게 되네요.

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace transcontroldemo
{
 /// <summary>
 /// Summary description for TransPanel.
 /// </summary>
 public class TransPanel : Panel
 {
  public TransPanel()
  {
   //
   // TODO: Add constructor logic here
   //
  }

  protected override CreateParams CreateParams
  {
   get
   {
    CreateParams cp = base.CreateParams;
    cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
    return cp;
   }
  }

  protected void InvalidateEx()
  {
   if (Parent == null)
    return;

   Rectangle rc = new Rectangle(this.Location, this.Size);
   Parent.Invalidate(rc, true);
  }

  protected override void OnPaintBackground(PaintEventArgs pevent)
  {
   //do not allow the background to be painted
  }

  protected override void OnResize(EventArgs eventargs)
  {
   this.InvalidateEx();
  }

  Random r = new Random();
  protected override void OnPaint(PaintEventArgs e)
  {
   int h = this.Height / 2;
   int w = this.Width;

   Pen p = new Pen(Color.White, 2);
   e.Graphics.DrawLine( p,  0,h, w, 0);
   p.Dispose();
  }
 }
}


Posted by gsi
:

커스텀 컨트롤 EventHandler 등록하기

사용자 컨트롤을 추가한 후에 EventHandler 를 추가하고 나면 Form에 추가한 컨트롤에서
사용자가 입력한 변수 및 이벤트를 처리할 수 있습니다.
바로 아래 코드는 이벤트 핸들러 처리 코드 입니다.

private string prefix = "";
public event EventHandler PrefixChanged;

public string Prefix
{
    get { return this.prefix; }
    set {
        this.prefix = value;
   
        //PrefixChanged 이벤트를 발생시킨다.
        if (this.PrefixChanged != null)
        {
            PrefixChanged(this, EventArgs.Empty);
        }
        this.Invalidate();
    }
}

Posted by gsi
: