반응형
이미지를 뿌려주는 클래스를 작성 중 자식 클래스가 부모 클래스의 OnPaint를 호출해야 하는 경우가 생겼다.
class A : CWnd {
...
...
public:
DECLARE_MESSAGE_MAP()
afx_msg void OnPaint();
...
...
}
A라는 클래스의 OnPaint에서 Wnd 영역에 그림을 그려주고 있다.
나는 A라는 클래스에 특정 기능을 추가해야 하는 상황이 생겨,
A에 바로 추가하기보단 B라는 클래스를 만들어 A를 상속받고 기능을 추가시키고자 했다.
class B : A {
...
...
+ 기능 추가
public:
DECLARE_MESSAGE_MAP()
afx_msg void OnPaint();
...
...
}
B 클래스 객체를 만들어 사용했을 때는 B의 OnPaint가 호출될 때 상속받은 A의 OnPaint를 호출하면,
B 객체에서 A와 동일한 동작을 하겠지 했다.
but,
OnPaint Message 함수를 만들 때 애초에 부모 클래스의 OnPaint는 호출하지 말라고 안내한다.
그리고 억지로 호출해도 정상적으로 동작하지 않는다.
OnDraw를 사용하면 A의 WM_PAINT 동작을 B에서 수행할 수 있다.
class A : CView {
...
...
public:
virtual void OnDraw(CDC* pDC); // 이 뷰를 그리기 위해 재정의되었습니다.
...
...
}
CWnd 대신 CView를 이용하여 A를 만들고 OnPaint대신 OnDraw에서 WM_PAINT를 처리.
class B : A {
...
...
public:
virtual void OnDraw(CDC* pDC);
...
...
}
void B::OnDraw(CDC* pDC) {
CDocument* pDoc = GetDocument();
A::OnDraw(pDC);
return;
}
B의 OnDraw에서 A::OnDraw를 호출.
B 클래스 객체지만 부모의 클래스 A의 WM_PAINT 처리 동작을 수행한다.
끝.
반응형
'언어 | Framework > MFC' 카테고리의 다른 글
[MFC] ntdll.dll error (0) | 2022.04.27 |
---|---|
[MFC] 사용자 지정 Message (ON_MESSAGE, PostMessage, SendMessage) (0) | 2021.05.24 |