|
여러가지를 한꺼번에 질문하셔서 대답하는것도 길어지겠군요.
일단, Splitter는 단독으로는 아무 의미 없는것을 알고 계시리라 믿구요..
(Splitter에는 약간의 버그들이 있습니다. 이건 나중에)
1. 4분할 만들기
일단 4분할 하시려한다면 일단 TPanel을 하나 Align은 alTop으로 설정해서 하나 박아 넣고
스플리터 삽입(alTop), TPanel을 나머지 폼의 빈 공간에 넣고 alClient로 설정합니다.
이제 상단의 패널과 하단의 패널 크게 두개로 나눠질 것이고, 상하단 각각에 대해
패널 넣고(alLeft) 스플리터 넣고(alLeft), 마지막으로 패널을 넣으면(alClient) 원하시는
4분할 윈도우가 만들어질겁니다.
2. OnPaint 과 Handle
모든 TWinControl을 상속받은 컨트롤들은 모두 Handle을 가지고 있습니다.
TPaintbox는 애석하게도 TWinCOntrol을 상속받은 컨트롤이 아니죠. 따라서 위에서 분할할
때 TPanel 대신에 사용할 수 없습니다. (방금 보니 다른 분이 답변을 한 번 하셨군요.
그 답변에 있는 것 처럼 패널에 패인트박스를 넣는것도 좋은 방법이군요. 그게 제일 쉽겠
네요.)
일단 스플리터와 함께 동작하게 하려 한다면 당연히 TWinControl을 상속받은 컴포넌트를
써야겠죠.
TWinControl의 도움말을 보시면 OnPaint말고 protected virtual함수로 Paint 메소드가 있
습니다. 아마 감이 오시리라 믿습니다.
TWinControl계열의 컨트롤을 상속받아 새로 컨트롤을 만드시면 됩니다.
보통 Paint 메시지를 가로채는 경우는 복잡한 이미지프로세싱이 필요하다든지 하는 경우
정도밖에 없죠.
아무튼, 이런 질문을 하시는 분이라면 아마 컴포넌트 프로그래밍은 손대지 않으셨을 것
같군요. 컴포넌트를 자유자재로 만들기 위해서는 약간의 공부가 필요할겁니다.
컴포넌트로 만들 경우에는 BEGIN_MESSAGE_MAP등을 이용해서 메시지맵을 새로 만들 수 있
습니다.
또 다른 방법으로는.. 모든 TControl을 상속받은 컨트롤에는 WndProc라는 프라퍼티가 있습
니다. 새로운 콜백펑션을 만드신 후(WM_PAINT를 잡아낼 수 있게) 이 프라퍼티에 대입하기
만 하면 컨트롤별로 새로운 메시지 핸들러를 붙일 수 있습니다.
이렇게 처리하시는 것이 그나마 좀 쉬운 방법이겠군요.
제가 만약 그런 상황이라면, 4개의 분할면에 들어갈 컨트롤들을 새로 만들어서 쓸겁니다.
각각의 분할면에 그려야 할 내용이 뭔지 알려주신다면, 어떻게 클래스를 구성해야 할지
좀 더 자세히 알려드릴 수 있을 것 같군요.
fuhaho 님이 쓰신 글 :
: 툴을 만드려고 합니다
: mdi 폼에서 mdi child폼 하나를 4분할 해서 쓰려고 하는데
: 문제가 많네요
: splitter로 분할한다고 했을시
: 4개의 윈도우가 나와야 하는데 4분할이 안되죠 -_-;...
: 4분할 시키는 방법 없나요?
: 그리고 mdi폼에서 분할한 각각의 창이 각각 핸들과 OnPaint 메시지가 들어가야 하는데
: 빌더에선 도대체 방법이 없네요 아시는분 -_-
: 페인트 박스는 OnPaint는 들어가는데 핸들이 없고
: 프레임은 핸들은 들어가는데 OnPaint가 없고 -_-;
:
: mfc 라면 mdi child폼 splitter로 4분할 하면 View 창 네개 나와서 각각 컨트롤 하면 되는데
: vcl은 대체 뭘 어떻게 해야 하는지 아시는분 답변좀 해주세요 -_-;..
:
|