'API'에 해당되는 글 2건

  1. 2008.05.09 [winapi] - 윈도우 컨트롤의 색상 변경
  2. 2008.04.09 [winapi] - 정밀한 시간측정...

WM_CTLCOLORSTATIC - static control 색상을 변경할 때 사용
WM_CTLCOLORBTN      - button control 색상을 변경할 때 사용
WM_CTLCOLOREDIT     - editbox control 색상을 변경할 때 사용

사용예..

HBRUSH    hBrush_Control;

LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
       switch(msg)
       {
        case WM_CREATE:
                 hBrush_Contorl = CreateSolidBrush(RGB(255, 255, 255));   //흰색 브러시 생성.
                   ...
                 return 0;
        case WM_CTLCOLORSTATIC:
                 SetBKColor((HDC)wParam, RGB(255, 255, 255);
                 return (LRESULT)hBrush_Control;
        }
}

대충 이런 식으로 사용한다.
lParam으로 특정 컨트롤의 색상만 변경도 가능하다.
if((HWND)lParam == hWnd_static01)
{
      //컨트롤에 대한 색상처리...
}

버튼같은경우 안먹던데ㅡ_ㅡ. 그리고 처음 브러쉬를 생성할때 색상이랑 SetBkColor함수에 넣어줄 t색상이랑 맞춰주는게 나을꺼 같다. static control의 경우 글자 주위의 배경색만 바뀌는거 같다.

Posted by hazeyun
,

현재 window api에서 제공되는 가장 정밀한 측정을 할 수 있다. 하지만 그만큼 부하가 크다. 그리고 하드웨어 적으로도 지원이 되어야한다.
일반적으로 시간을 측정할때 쓰는 함수임  timeGetTime()이나 GetTickCount()같은 경우 ms(millisecond)까지의 정확도를 보여준다. 하지만 아래의 두함수 QueryPerformanceFrequency와 QueryPerformanceCounter()를 이용하게 되면 us(microsecond)까지의 측정이 가능하다.

QueryPerformanceFrequecy 함수를 보면
BOOL QueryPerformanceFrequency(  LARGE_INTEGER *lpFrequency   );
parameter로 받은값에 현재 컴퓨터의 초당 tick수를 뱉어낸다. 자신의 컴퓨터하드웨어가 고해상도 타이머를 지원하지 않을겨우에는 false를 반환한다.

QueryPerformanceCounter함수는
BOOL QueryPerformanceCounter( LARGE_INTEGER *lpPerformanceCount);
parameter로 받은값에다가 컴퓨터가 부팅후 지나간tick수를 반한해준다.

그래서 이두함수를 이용하게 되면

LARGE_INTEGER start, end, count;

QueryPerformanceFrequency(&count);
QueryPerformanceCounter(&start);
//수행 시간을 측정할 작업..
QueryPerformanceCounter(&end);

passtime = end.QuadPart - start.QuadPart  / count.QuadPart

passtime * 1000(ms)
passtime * 1000000(us)

하지만 정밀한 측정을 하기에 무조건 좋은것은 아니다. 일부 메인보드 칩센에서 시간이 건너 뛴다거나 하드웨어적인 지원 유무등 문제가 있기때문에 유연한 코드가 필요할듯 하다.

Posted by hazeyun
,