블로그 이미지
안녕1999

카테고리

전체 (3067)
자바스크립트 (20)
안드로이드 (14)
WebGL (4)
변비 (17)
정치,경제 (35)
C언어,ARM (162)
컴퓨터(PC, Note Book, 윈.. (41)
전자회로, PCB (27)
유머,안웃긴,GIF,동영상 (118)
국부론60 (71)
모듈(PCB) (3)
건강 (2)
FreeCAD (25)
PADS (43)
퇴직,퇴사,구직,취업 활동 (3)
C# (86)
엑셀 (8)
워드 (0)
LabView (6)
레고 (30)
FPGA (0)
Total
Today
Yesterday

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

최근에 올라온 글

'POINTS'에 해당되는 글 1건

  1. 2016.08.20 MAKEPOINTS - lParam를 POINTS로 변환

보통 마우스 좌표를 얻기위해서는 아래와 같이 사용한다.

xPos = GET_X_LPARAM(lParam); 
yPos = GET_Y_LPARAM(lParam);


그러나, 더 쉬운 방법이 있다. 단, POINT형이 아닌, POINTS형이다.


//WINGDI.H

#define MAKEPOINTS(l)       (*((POINTS FAR *)&(l)))



MAKEPOINTS는 사실상 연산이 없다. (얼마나 좋은가?)
그래도 POINTS형보다는 POINT형을 사용하는것이 여러모로 좋다.



POINTS형을 POINT로 변환
POINTS는 int형이 아닌 short형이다.
short형은 16비트이며, 32비트 컴퓨터에서 short형을 사용할 경우, 변환과정이 필요하다.
따라서, int형을 사용하는 POINT를 사용하는것이 더 효과적이다.


#define GET_X_LPARAM(lp)                        ((int)(short)LOWORD(lp))
#define GET_Y_LPARAM(lp)                        ((int)(short)HIWORD(lp))

#define LOWORD(l)           ((WORD)(l))
#define HIWORD(l)           ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))

GET_X_LPARAM를 사용할 경우,

WORD형으로 변환->short형으로 변환->int형으로 변환.  (3번연산)


GET_Y_LPARAM를 사용할 경우,

쉬프트연산->&연산->WORD형으로 변환  (3번 연산)


POINT에 대입하면, 약 8번 연산이 발생한다.




#ifndef POINT_to_POINTS

#define POINT_to_POINTS(a) ((((WORD)((short)((a).y)))<<16)|((WORD)((short)((a).x))))

#define POINTS_to_POINT(a,pt) (pt).x=(a).x;(pt).y=(a).y;

#define POINT_to_LPARAM(a) (LPARAM)(POINT_to_POINTS(a))

#define LPARAM_to_POINT(a,pt) POINTS_to_POINT(MAKEPOINTS(a),pt)

#endif

Posted by 안녕1999
, |

최근에 달린 댓글

글 보관함