CtrlList에서 컬럼 고정시키기
페이지 정보
본문
CtrlList에서 컬럼을 고정시키려고 하는데 codeguru에 나와 있는 대로 해 보았지만 잘 안됩니다. 방법을 알려주세요.
ListCtrl은 컬럼 크기를 바꾸기 전에 자신의 부모 윈도우에게 통지(notification) 메시지를 보냅니다. 그래서 우리는 이 통지 메시지를 먼저 처리할 수 있는 메시지 핸들러를 만들면 되지요. 이 통지 메시지를 처리하기 위해서는 OnNotify() 함수를 오버라이드하면 됩니다.
BOOL CTestListCtrl::OnNotify(WPARAM wParam, LPARAM lParam,
LRESULT* pResult)
{
switch (((NMHDR *)lParam->code) {
case HDN_BEGINTRACKW : // 마우스 트래킹시 발생하는 통보 메시지
case HDN_BEGINTRACKA : //
*pResult = TRUE; // 컬럼 크기 조절 방지
return TRUE; // 메시지 처리못하게 바로 리턴
}
return CTestListCtrl::OnNotify(wParam, lParam, pResult);
}
이렇게 하면 컬럼 크기 조정을 방지할 수 있습니다. 윈도우 프로그래밍은 대부분의 구조가 메시지 전달방식 구조이기 때문에 모든 컨트롤의 메시지들을 잘 파악하고 있으면 프로그래머 마음대로 이벤트들을 조절할 수 있습니다. MFC를 사용하면 이 메시지들의 흐름을 잘 파악하기 힘듭니다. 왜냐하면이 메시지에 응답하는 콜백함수들이 캡슐화되어 있기 때문이죠. 그래서 API를 공부하면 이 메시지의 흐름을 파악하기 쉽습니다. 어차피 MFC도 API를 객체지향적으로 포장한 클래스이므로 내부적으로는 API 함수와 동일합니다.
ListCtrl은 컬럼 크기를 바꾸기 전에 자신의 부모 윈도우에게 통지(notification) 메시지를 보냅니다. 그래서 우리는 이 통지 메시지를 먼저 처리할 수 있는 메시지 핸들러를 만들면 되지요. 이 통지 메시지를 처리하기 위해서는 OnNotify() 함수를 오버라이드하면 됩니다.
BOOL CTestListCtrl::OnNotify(WPARAM wParam, LPARAM lParam,
LRESULT* pResult)
{
switch (((NMHDR *)lParam->code) {
case HDN_BEGINTRACKW : // 마우스 트래킹시 발생하는 통보 메시지
case HDN_BEGINTRACKA : //
*pResult = TRUE; // 컬럼 크기 조절 방지
return TRUE; // 메시지 처리못하게 바로 리턴
}
return CTestListCtrl::OnNotify(wParam, lParam, pResult);
}
이렇게 하면 컬럼 크기 조정을 방지할 수 있습니다. 윈도우 프로그래밍은 대부분의 구조가 메시지 전달방식 구조이기 때문에 모든 컨트롤의 메시지들을 잘 파악하고 있으면 프로그래머 마음대로 이벤트들을 조절할 수 있습니다. MFC를 사용하면 이 메시지들의 흐름을 잘 파악하기 힘듭니다. 왜냐하면이 메시지에 응답하는 콜백함수들이 캡슐화되어 있기 때문이죠. 그래서 API를 공부하면 이 메시지의 흐름을 파악하기 쉽습니다. 어차피 MFC도 API를 객체지향적으로 포장한 클래스이므로 내부적으로는 API 함수와 동일합니다.
댓글목록
등록된 댓글이 없습니다.