2013-05-20 1 views
1

좋아요, 나는 어떤 설정으로 인해 다른 크기로 표시되는 버튼이 있습니다.WinForms : 이미지를 그릴 수있는 버튼의 영역

이제 단추에 이미지를 표시하려고합니다. 어떻게 그릴 수있는 사각형을 얻을 수 있습니까?

button.DisplayRectangle 또는 button.ClientRectangle을 쿼리하면 반환되는 버튼의 정확한 크기가 표시됩니다. 그러나 버튼에 테두리가있는 것처럼 그리지 못해서 이것은 잘못되었습니다.

문서에서 알 수 있듯이 DisplayRectangle은 테두리 및 여백 같은 것들을 제외하고 내가 그릴 수있는 사각형 만 반환해야합니까?

내가 원하는 것을 얻을 수있는 방법이 있습니까?

업데이트 : 더글라스 Barbin의 대답은 그가에서 실제로 Border3DSize 속성이 SystemInformation 클래스를보고 나를 데리고

. 내 디스플레이에

Dim size = New Size(ctrl.Width - SystemInformation.Border3DSize.Width * 2, _ 
    ctrl.Height - SystemInformation.Border3DSize.Height * 2) 

을 계산하는 경우

는하지만 여전히, 아직도 실제로 완전히 이미지에 맞게없는 픽셀 일부 (정확히 두)가있다.

답변

1

버튼의 FlatAppearance가 flat으로 설정된 경우에만 작동합니다. 다른 모든 (비 평면) 테두리 스타일에 대한

Dim mySize as Size = New Size With 
{.Height = button.Height - (button.FlatAppearance.BorderSize * 2), 
.Width = button.Width - (button.FlatAppearance.BorderSize * 2) } 

는 테두리가 OS 및 설치된 테마에 따라, 그래서 비주얼 스튜디오 내에서이 얻을 수있는 가장 쉬운 방법이 있는지 모르겠어요. Windows API 호출을 통해 가능할 수도 있지만 코드는 꽤 못 생깁니다.

+0

이것은 좋은 생각입니다. 불행히도 3D 테두리 모양에이 기능이 필요합니다. –

관련 문제