타이머를 이용하여 마우스를 클릭하였을때 도형그리기
내꼬야
제가 지금 타이머를 이용해서 오른쪽버튼을 더블클릭했을때 도형이 움직이게 하고 싶거든요.
그래서 이런식으로 책을 보고 짜봤어요;;
마우스를 클릭했을때 그자리에서 도형이 움직이게 하고싶은데요
마우스 클릭했을때
if문으로 셋타이머일때 타이머가 돌아가게 하고
else일때 킬타이머로 타이머를 죽이는식으로 만들려고 하는데요
이렇게 하려면 헤더파일에 타이머를 변수로 선언해줘야 하나요?
이런식으로 하는게 맞는건지 아니면 다른방식이 있는건지
어떻게 해야 할지 막막해서요
제가 아직 초보수준이라 ...
조그만 힌트를 주시면 정말 감사할겁니다 ㅠㅠint chohohoview::oncreate(lpcreatestruct lpcreatestruct) //set 타이머를 만들어줌
{
if (cview::oncreate(lpcreatestruct) == -1)
return -1;
// todo: add your specialized creation code here
settimer(1,100,null);
return 0;
}
void chohohoview::ondestroy() //kill 타이머를 만들어줌
{
cview::ondestroy();
killtimer(1);
// todo: add your message handler code here
}#define step 10 //도형그리기
#define r 30
void chohohoview::ontimer(uint nidevent)
{
cclientdc dc(this);
static int nx=r, ny=r;
static int ncx=step, ncy=-step; //이동방향
crect rect;
getclientrect(&rect);
//삼각형 그리기
dc.moveto(nx+0, ny-r);
dc.lineto(nx-r, ny+r);
dc.lineto(nx+r, ny+r);
dc.lineto(nx-0, ny-r);
// 이동
if(nxr) ncx=step;
else if(nxrect.width()-r)ncx=-step;
nx+=ncx;
if(nyr)ncy=step;
else if(nyrect.height()+r)ncy=-step;
ny+=ncy;
// todo: add your message handler code here and/or call default
cview::ontimer(nidevent);
}void chohohoview::onlbuttondblclk(uint nflags, cpoint point) //마우스 클릭
{
// todo: add your message handler code here and/or call default//if(!ontimer)
//{
//settimer(1,100, null);
//ontimer = true;
//}
//else
//{
//killtimer(1);
//
//ontimer = false;
//}cview::onlbuttondblclk(nflags, point);
}
-
새밝
6. 해당 좌표까지 이동이 완료되면 타이머를 끝낸다.
타이머가 작동되는동안에 다시 더블 클릭하여 좌표값을 얻게 된다면 이동중에
다시 다른방향으로 틀어 이동하게 되려나 ㅎㅎㅎ -
샤이
혹시 원하시는 기능이 이기능 말고 타이머을 이용해서 현제 그려진 위치에서 더블클릭한
위치로 이동하면서 그려지는것은
1. Paint 부분에 CPoint 형 좌표점을 기준으로 도형을 그린다.
2. 더블클릭시 CPoint 클릭한 위치 정보를 얻는다.
3. 타이머를 실행한다.
4. 타이머에서 처음 위치값과 마지막 위치값을 계산에 그려질 중간 값을 계산한다.
5. Paint 부분을 다시 그려주게 한다. -
영글
1. Paint 부분에 CPoint 형 좌표점을 기준으로 도형을 그린다.
2. 더블클릭시 CPoint 클릭한 위취정보를 얻는다.
3. Paint 부분을 다시 그려주게 한다.
가장쉽게 처리하는 방법은 이렇게 하는것이라고 생각됩니다.