2014-07-24 2 views
0

일부 사용자 정의 컨트롤을 만들려고합니다.C# winforms의 DateTimePicker에 배경 이미지를 두는 방법은 무엇입니까?

또한 컨트롤이 사용자 입력으로 선택되거나 작성되어야 함을 알리려고합니다.

그래서 제 생각은 컨트롤의 오른쪽 상단 모서리에 이미지를 그립니다.

TextBox 컨트롤을 사용하여 성공적으로 수행했습니다.

enter image description here

는하지만 DateTimePicker 컨트롤, 나는 어디에서 시작하는 아무 생각이 없습니다.

public partial class DateTimePicker : System.Windows.Forms.DateTimePicker 
{ 
    public DateTimePicker() 
    { 
     InitializeComponent(); 

    } 

    protected override void OnLayout(LayoutEventArgs levent) 
    { 
     base.OnLayout(levent); 


     Bitmap bmp = new Bitmap(Assembly.GetExecutingAssembly().GetManifestResourceStream("MyControls.Resources.Images.required01.gif")); 
     this.Parent.CreateGraphics().DrawImage(bmp, 10, 10); 
    } 
} 

this.Parent.CreateGraphics() 양식에 어떤 이미지를 그릴하지 않습니다

여기 아래에있는 내 코드입니다. 아마 당신은 후드 아래에 가서 컨트롤의 창 프로 시저를 재정의해야합니다 그래서, 사용자 정의 그림에 관해서

+0

난 당신을 DateTimePicker 및 PicImage 배경 이미지를 페인트하려면 당신은 더 나은 WM_ERASEBKGND를 사용하십시오 – Rang

답변

1

여호수아,

DateTimePicker 컨트롤은 몇 가지 제한이있다.

다음 구현은 기본 그림이 완료된 후 WM_PAINT 메시지를 사용하여 컨트롤에 그리는 "레이블 해제"방법을 사용합니다. WM_PAINT 메시지를 처리 ​​할 때 일반적으로 GetDC() 또는 이와 동등한 Graphics.FromHwnd()를 호출하지 않지만이 경우 원본 페인트의 일부를 무시하고 싶지는 않습니다. 기본 절차로 처리를 마친 후에 비트 맵을 그리기 만하면됩니다.

public partial class UserControl1 : System.Windows.Forms.DateTimePicker 
{ 
    private Bitmap bmp = null; 
    public UserControl1() 
    { 
     InitializeComponent(); 
     bmp = new Bitmap(5, 5); 
     bmp.SetPixel(2, 2, Color.Red); //Placeholder, Load the bitmap here 
    } 
    protected override void WndProc(ref Message m) 
    { 
     base.WndProc(ref m); 
     if (m.Msg == 0xf) //WM_PAINT message 
     { 
      Graphics g = Graphics.FromHwnd(m.HWnd); 
      g.DrawImage(bmp, ClientRectangle.Width - 8, 3); 
      g.Dispose(); 
     } 
    } 
} 
+0

작곡 사용자 정의 컨트롤을 만들 것을 제안 : –

+0

WM_ERASEBKGND 적절한 다른 경우 선택하지만이 하나입니다 2 가지 이유 : Windows 7에서이 컨트롤 (사용자 지정 그림 제한은 앞에서 언급 한)이 작동하지 않으며, 프로그래머가 배경이 아닌 컨트롤 위에 작은 이미지를 표시하려고합니다. –

관련 문제