|
안녕하세요..
볼렌드 C++ 빌더 2주 사용자입니다. 역시나 초보 ㅋㅋ
지금 DrawGrid를 이용해서 신호를 그리는 프로그램을 작성하고 있습니다.
파형에 대한 정의를 입력하면 신호가 grid에 표시되는 건 어느 정도 됐습니다.
그런데 문제가 주기가 긴 신호를 표시할때 그리드의 폭이 좁으면 당연히 스크롤바를 이용해서 이동을 해야겠지요.
DrawCell method가 셀별로 좌표를 잡다보니 문제가 좀 발생하네요..
그리드는 54개 행과 100개의 열로 구성이 되어있습니다. 한 열에 20포인트를 그리도록 되어 있구요.
따라서 총 2000포인트를 그리게 되어 있습니다. 한 화면에 보이는 그리드 포인트는 약 880 포인트 정도 되구요
스크롤바를 움직일때 마다 처음에는 0번 부터 880까지 보이게 하고 스클롤바를 오른쪽으로 당기면 20번 데이터부터 900번 데이터가 표시되도록 하고 싶습니다.
이부분 소스는 아래와 같습니다.
if((ARow > 0 && ARow < 55) && ACol > 0){
for(int i = 0; i< 880;i++){
//GraphPointY는 Y 좌표 값들이 들어 있구요 이걸 DrawGrid에 맞게 변환을 해야겠죠.. pPointData가 Grid에 그려질 좌표값들입니다.
pPointData[ARow-1][i+columWidth*(ACol-1)].y = Rect.Bottom - GraphPointY[ARow-1][i+columWidth*(ACol-1)];
// X 좌표는 DrawGrid의 가장 왼쪽 좌표로 고정 시켜 놨구요 이게 LeftPoint 거기서부터 880 포인트까지 구성합니다.
pPointData[ARow-1][i+columWidth*(ACol-1)].x = LeftPoint + i;
}
이 데이터를 가지고 880 개의 데이터를 그립니다. 원래는 셀별로 들어가는 것만 그려야 하지만(20포인트) 렇게 하면 각 셀의 가장 오른쪽 그릴때 깨져서 부드럽지가 않은 관계로 그냥 880 포인트 한방에 다 그려버립니다. 이렇게 하니 깔끔하게 나오네요.
pPattenEditorCanvas->Polyline(&pPointData[ARow-1][(ACol-1)*columWidth], 880);
}
여기서 문제는 마지막 라인의 Polyline에서 원하는 좌표만 그리고 싶은데 ACol이 계속 변하는 관계로 그래프가 엉망으로 나옵니다. 아시는 분은 무슨 말인지 아실겁니다. DrawCell의 특성상 그럴수 밖에 없죠.. 어떻게 좋은 방법 좀 있으면 조언 좀 부탁 드립니다.
|