이용주 님이 쓰신 글 :
: 김백일님 저의 질문에 대해서 답변 감사드립니다.
: 헤헤. 그런데 그거 해결하는데 시간이 조금 걸릴듯..^^;;
: 또 다들 질문이 있어서 이렇게 글을 적습니다.
'다들'이 아니고 '다른'이겠죠. -_-a
: 다음의 소스를 보면서 설명드리죠..
: if(rx_power != pre_rxpower)
: {
: if(rx_power <= -20 && rx_power >= -30)
: {
: //gRxPower = -25;
: //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 189, "-");
: EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,192,0);
: }
: else if(rx_power <= -31 && rx_power >= -40)
: {
: //gRxPower = -35;
: //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 201, "-");
: EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,204,0);
:
: }
: else if(rx_power <= -41 && rx_power >= -50)
: {
: //gRxPower = -45;
: //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 213, "-");
: EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,216,0);
: }
: else if(rx_power <= -51 && rx_power >= -60)
: {
: //gRxPower = -55;
: //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 225, "-");
: EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,228,0);
: }
: else if(rx_power <= -61 && rx_power >= -70)
: {
: //gRxPower = -65;
: //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 237, "-");
: EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,240,0);
: }
: else if(rx_power <= -71 && rx_power >= -80)
: {
: //gRxPower = -85;
: //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 249, "-");
: EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,252,0);
: }
: else if(rx_power <= -81 && rx_power >= -90)
: {
: //gRxPower = -85;
: //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 261, "-");
: EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,264,0);
: }
: else if(rx_power <= -91 && rx_power >= -100)
: {
: //gRxPower = -95;
: //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 273, "-");
: EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,276,0);
: }
: else if(rx_power <= -101 && rx_power >= -106)
: {
: //gRxPower = -103;
: //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 285, "-");
: EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6*gRx_ColCounter,288,0);
:
: }
: pre_rxpower = rx_power;
: gRx_ColCounter++;
: //EtcTestForm->dgPowerResult->Canvas->TextOutA((3*gRx_ColCounter), 201, "-");
: //EtcTestForm->ImageList2->Draw(EtcTestForm->dgPowerResult->Canvas,6+6*gRx_ColCounter,192,0);
: }
: 제가 구현한 소스입니다. 양껏 허덥하다는걸 알죠^^;;
이런식으로 동일한 코드를 if ... else의 나열로 쓰는 것보다는
적당한 계산식을 만들어서 한 번만 쓸 수 있을 겁니다.
: 이것은 Thread에서 구현된것인데요.. 이렇게 하면 지속적으로 gRx_ColCounter의 값을 지속시키면서 폼의 drawgrid(EtcTestForm->dgPowerResult)에 이미지를 추가시킵니다.
: 근데 이미지가 추가된 다음에 이창을 잠시 내렸다가 다시 활성화 시키니까 추가되었던 이미지들이 다 사라지고 새롭게 추가되는것만 나타나는군요..
: 이것을 방지하는방법이 없을까요??
뭔가 착각을 하신듯...
TStringGrid의 경우는 자체적으로 문자열을 가지고 있어서,
마치 문자열의 2차원 배열을 쓰듯이 문자열들을 저장시키면 되지만,
TDrawGrid는 동작 방식이 전혀 다릅니다.
각 셀이 OnDrawCell 이벤트를 받을 때, 이 이벤트 핸들러에서 셀을 그려주게 되는 것이죠.
즉, 셀의 각 Canvas에는 아무 것도 저장시킬 수가 없습니다. 매번 새로 그려줘야 합니다!
그렇다면 방법은 하나,
각 셀에 그려질 데이타를 저장할 자료구조의 2차원 배열을 따로 만들어야 합니다.
만약 크기가 가변적으로 변한다면 보통의 배열보다는 STL의 vector나 deque를 쓰실 것을 권합니다.
구현 방법은 다음 링크를 참고하세요.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=cpp_tip&no=8
쓰레드에서는 이 자료구조에 데이터를 넣는 코드를 넣으시고,
TDrawGrid 각 셀의 OnDrawCell 이벤트 핸들러에서는 이 자료구조를 읽어서 그려주는 코드를 넣으면 됩니다.
: 그리고 이렇게 왼쪽에서 오른족으로 쭉 그려지다 보면, 화면을 넘어가게 되는데요.. 화면이 넘어갈때 증가함에 따라 화면이 따라서 넘어가게 하는 방법이 있나요?? 위에서 아래로는 TopRow값을 조정하니까 되던데.. 답변 부탁드립니다.
: 그럼 날 더운데 더위 조심하세요.. 이만..