|
음...
좌상단에만 직접 Draw하고 나머지는 나둔다구요?
1.간단한 방법은?
FixedRows와 FixedCols은 Scroll해도 항상 맨윗쪽에
항상 맨왼쪽에 있습니다.
DrawCell 이벤트에서 .. ARow==ACol==0 일때만 처리하면 되겠죠
if(ARow==0 && ACol ==0 )
{
StringGrid1->Canvas->TextOutA(Rect.left+2,Rect.top+2,"여긴가");
}
2. FixedRows나 FixedCols 를 이용하지 않고는?
어쩔수 없이 좌표계산해줘야겠죠..
항상 좌측상단에 Cell은 Canvas좌표 0,0을 포함하겠죠?
OnDrawCell 이벤트에서 Rect값이 0,0을 포함하고 있는지 검사하면 될것 같은데요
아래와 같이..
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
if(Rect.left<=0 && Rect.right>0 && Rect.top<=0 && Rect.bottom>0)
{
StringGrid1->Canvas->TextOutA(Rect.left+2,Rect.top+2,"여긴가");
}
}
위와같이 하면 맨 FixedRows , FixedCols 을 쓰지 않고 맨 좌측상단에만 그립니다.
한데 문제가 하나 있더군요
ScrollBar를 움직일때나 , MouseWheel을 이용해서 scroll한경우 OnDraw이벤트가 제대로 발생하지 않더군요
발생하더라도 새로 Draw될 Cell에만 입벤트가 발생하는듯하구...
이경우에는 sub-classing으로 WM_SCROLL 과 WM_MOUSEWHEEL 메세지를 잡아서
Repaint()해주면 됩니다.
(혹 sub-classing 방법을 모르신다면.. 여기 검색해보세요)
추신
FixedRows , FixedCols 를 사용하여 1,1 셀에 Draw하고 싶다면
Rect가 (0,0)이 아닌 대개 (DefaultWidth , DefaultHeight) 를 포함하고 있는경우를 찾으면 되겠죠
그럼..
장준식 님이 쓰신 글 :
: 답변 감사합니다.
:
: 제가 실제로 하고 싶은건 보여주신 예제에서 행과 열이 출력 되는 곳을 제일 왼쪽 위에만 표시하고 싶습니다.
: 화면에 보이는 행과 열의 1,1에만 표시하고 나머지는 무시되도록 하고 싶은데요. 즉, 화면에 보이는 1행1열이 그리드에서 절대적으로 몇열 몇행인지를 알수 있도록 하고 싶습니다.
|