'C#.NET'에 해당되는 글 2건


폼 형태가 없는 윈도우 프로그램을 만들면, 윈도우 이동, 크기 변경, 닫기 버튼 등을 커스터마이징해서 만들어야 한다.


그리고, 이에 해당하는 이벤트를 SendMessage를 사용해서 흉내내줘야 한다.




선언과 사용은 다음과 같다.



원하는 콘트롤에서 MouseDown 이벤트가 발생하면 아래와 같은 코드로 원하는 메시지를 던지면 된다.





메세지 종류와 해당하는 상수값은 다음과 같다.


 메시지명

 상수값

설명 

 HTBORDER

 18

리사이징 되지 않는 윈도우의 Border에서 일어나는 이벤트

 HTBOTTOM

 15

리사이즈 가능한 윈도우의 하단 Border에서 일어나는 이벤트, 아래쪽 세로 방향으로 리사이징된다.

 HTBOTTOMLEFT

16 

리사이즈 가능한 윈도우의 좌하단 Border에서 일어나는 이벤트, 왼쪽 세로, 가로 방향으로 리사이징된다.

 HTBOTTOMRIGHT

17 

리사이즈 가능한 윈도우의 우하단 Border에서 일어나는 이벤트, 오른쪽 세로, 가로 방향으로 리사이징된다.

 HTCAPTION

윈도우의 Title 영역에서 일어나는 이벤트, 윈도우를 이동시킨다

 HTCLIENT

Client 영역에서 일어나는 이벤트

 HTCLOSE

20 

종료 버튼에서 일어나는 이벤트

 HTERROR

 -2


 HTGROWBOX

 In a size box (same as HTSIZE).

 HTHELP

21 


 HTHSCROLL

가로 스크롤에서 일어나는 이벤트

 HTLEFT

10 

리사이즈 가능한 윈도우의 좌측 Border에서 일어나는 이벤트, 왼쪽 가로 방향으로 리사이징된다.

 HTMENU


 HTMAXBUTTON

최대창 버튼에서 일어나는 이벤트

 HTMINBUTTON

최소창 버튼에서 일어나는 이벤트

 HTNOWHERE


 HTREDUCE


 HTRIGHT

11 

리사이즈 가능한 윈도우의 우측 Border에서 일어나는 이벤트, 오른쪽 가로 방향으로 리사이징된다.

 HTSIZE


 HTSYSMENU


 HTTOP

12 

윈도우 상단 Border에서 일어나는 이벤트

 HTTOPLEFT

13 

윈도우 좌상단 Border에서 일어나는 이벤트

 HTTOPRIGHT

14 

윈도우 우상단 Border에서 일어나는 이벤트

 HTTRANSPARENT

-1 


 HTVSCROLL

세로 스크롤에서 일어나는 이벤트

 HTZOOM



'C#.NET' 카테고리의 다른 글

특정 웹서버의 시간 알아내기  (0) 2012.04.12
블로그 이미지

설기아빠

,

재미있는 웹서비스를 하나 알게 되었다.


특정 사이트를 입력하면, 그 서버의 시간을 알려주는 서비스이다.


잘 몰랐는데, 특정 시간부터 접수가 되는 수강 신청같을 것을 할 경우에 많이들 사용한다고 한다.


내가 알게된 사이트의 주소는 http://time.navyism.com/ 인데, 유사한 서비스가 더 있는 것 같다.


암튼.....


대개 서버는 타임서버와 정기적으로 동기화를 한다. 시간 정보는 디지털 세계에서는 아주 중요하고 민감한 정보이기 때문이다.


하지만, 역시나.......   타임서버와 정기적으로 동기화를 한다고 해도, 모든 서버들이 항상 같은 시간을 유지하지는 못한다.


타임서버와 동기화한 여러대의 PC를 시간을 두고 비교해 보면 이 점을 알수 있다.


심지어는 아주 세밀하게는 휴대폰 시간마저도 완벽히 똑같지는 않다.

(정말이다....!! 처음 이 사실을 알았을땐, 충격적이었다. 지금 생각해 보면 당연하거지만)


그래서 위와 같은 서비스가 나오나 보다.




그렇다면, 웹서버의 시간을 어떻게 알아내는 것일까??


답은 HTTP 헤더에 있다.


서버는 HTTP 응답 헤더에 자신의 시간 정보를 내린다.


따라서 이 정보만 잘 해석하면 그 서버의 시간 정보를 알 수 있고, 수강 신청을 재빠르게 할 수도 있다. ㅋ


하지만, HTTP 응답 헤더에 나오는 서버의 시간 정보는 초 단위이다!!.


이 말은, HTTP 헤더를 받는 통신 시간을 계산해서 시간을 보정한다 해도, 실제 서버 시간과는 최대 999ms의 오차가 날 수 있다는 것이다.


웹서버가 12시 59분 59초 999ms 에 HTTP 헤더를 12시 59분 59초로 내려줬고, HTTP 헤더를 받는데 10ms가 걸렸다고 생각해보자.


우리는 12시 59분 59초라는 정보를 웹서버 시간으로는 13시 00분 00초 009ms일때에 받게 되는 것이다.


이 부분은 현재 정보가지고는 어떻게 할 수가 없다. (요청하는 시간을 지능적으로 여러번 한다면 오차값이 적게 나오도록 수렴해갈 수 있을것 같긴 하다)

----------------------------------------------------------------------------------------------------------------

추가 : http 헤더 요청을 연속으로 보내서 초가 바뀔때의 타이밍을 잡는 방법으로 최대 20ms 정도의 오차 범위내에서 정확한 시간을 알아 낼 수 있었다.

----------------------------------------------------------------------------------------------------------------



일단 현재까지의 생각을 가지고 C#으로 서버의 시간 정보를 가져오는 코드를 아래와 같이 만들어봤다. (사실은 다른 용도로 사용하기 위한 것이지만.....)



한가지, 연속으로 같은 요청을 하다 보면, 응답 대기 시간이 길어지는 경우가 생기기 때문에, 싱글 쓰레드에서는 프로그램이 멎는 현상이 생긴다.

따라서, 멀티 쓰레드로 구현하여 프로그램이 자연스럽게 동작하도록 하는 것이 필요하다.

'C#.NET' 카테고리의 다른 글

마우스 시스템 이벤트 흉내내기  (0) 2013.02.01
블로그 이미지

설기아빠

,