|
음.....
그냥 TListView를 sub-classing하면 될줄알았는데.. 안되두군요
원인은 TListView와 TListView의 ColumnHeader는 다른 Handle를 가지고 있는 Control이더군요
Spy로 TListView의 ColumnHeader를 보니 SysHeader32 라는 class더군요
결론적으로 이 SysHeader32를 찾아서 sub-classing하면 됩니다.
[정리하면]
1) TListView에서 SysHeader32를 찾아서 GetWindow함수로 Handle을 찾습니다.
2) SysHeader32의 WINPROC를 교체합니다.
3) sub-classing함수에서 WM_SETCURSOR 와 WM_LBUTTONDOWN 을 무시하도록 코딩합니다.
=============예제소스===================================================
HWND SysHdr32Handle;
FARPROC SysHdrProc;
LRESULT CALLBACK SysHeader32WinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
if( message == WM_SETCURSOR || message == WM_LBUTTONDOWN)
{
message=0;
return 0;
}
return CallWindowProc(SysHdrProc, hWnd, message, wParam, lParam);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
SysHdr32Handle = GetWindow(ListView1->Handle , GW_CHILD);
SysHdrProc=(FARPROC)SetWindowLong(SysHdr32Handle,GWL_WNDPROC,(long)SysHeader32WinProc);
}
==============================================================================================
일단 위와같이 하면 TListView의 size는 고정됩니다.
그러나 Column Click같은것이 안됩니다.
그것은 허용하려면 callback함수에서 잘 조절하시면 될것 같습니다.
그럼 ....
또아리 님이 쓰신 글 :
: TListView의 모든 컬럼을 리사이즈 false시키고 싶은데 어떻게 해야 하나요..? 마우스로 드래그 했을때도 리사이즈가 안되도록 고정하고 싶은데 잘안되는군요..
|