문제

WPF 앱에 내장되어 UserControl에서 파생 된 Windows Forms 컨트롤을 작성하고 있습니다. 나는 일반적으로 주어진 절차를 따랐다 이 링크.

public ref class CTiledImgViewControl : public UserControl
{
...

virtual void OnPaint( PaintEventArgs^ e ) override;

...
};

그리고 내 CPP 파일에서 :

void CTiledImgViewControl::OnPaint( PaintEventArgs^ e )
{
    UserControl::OnPaint(e);
    // do something interesting...
}

모든 것이 컴파일되고 실행되지만 onpaint 방법은 결코 호출되지 않습니다.

찾아야 할 것들에 대한 아이디어가 있습니까? 나는 C ++로 많은 일을했지만 Winforms와 WPF에 아주 새로운 것이 었으므로 분명 할 수 있습니다 ...

도움이 되었습니까?

해결책

그만큼 OnPaint 일반적으로 a UserControl 적절한 스타일을 사용하여 제작 될 때 적절한 스타일을 설정하지 않는 한 SetStyle 방법. 당신은 설정해야합니다 UserPaint 진실로 스타일 OnPaint 전화를 받기 위해.

SetStyle(ControlStyles::UserPaint, true);


업데이트

나는 최근 에이 문제를 직접 만나고 답을 찾기 위해 파고 들었다. 페인트 중에 몇 가지 계산을 수행하고 싶었지만 (페인트 메시지의 고유 한 처리를 활용하기 위해) 항상 전화를받는 것은 아닙니다. OnPaint.

리플렉터로 파고 들어서서 나는 그것을 발견했다 OnPaint 해당 클리핑 사각형 인 경우에만 호출됩니다. WM_PAINT 메시지는 비어 있지 않습니다. 나의 UserControl 인스턴스에는 전체 고객 지역을 채우는 어린이 통제가 있었기 때문에 모든 것을 잘라 냈습니다. 이것은 클리핑 사각형이 비어 있었기 때문에 OnPaint 전화.

나는 이것을 무시함으로써 이것을 해결했다 WndProc 그리고 핸들러를 추가합니다 WM_PAINT 내가 원하는 것을 달성 할 다른 방법을 찾을 수 없었기 때문에 직접.

다른 팁

누구나 관심이있는 경우 문제를 해결했습니다. 내 winforms 컨트롤이 뷰 박스에 포함 되었기 때문입니다. 나는 그것을 그리드로 변경하고 즉시 페인트 이벤트를 시작했습니다. WPF에 대해 질문 할 때 항상 질문에 XAML을 포함해야합니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top