일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- channel
- c++
- Python
- 리뷰
- window
- windows
- package
- http
- C
- 책
- json
- GO 언어
- Callback
- range
- go언어
- mutex
- Golang
- bitcoin
- go
- API
- write
- FOR
- 영화
- File
- Close
- Linux
- tcp
- JavaScript
- install
- Sync
- Today
- Total
목록window (5)
Code Habit
팝업 윈도우를 생성하고 직접 메시지를 이용해 윈도우 크기 변경하고 싶을 때 윈도우 메시지 WM_SYSCOMMAND, SC_SIZE를 활용할 수 있다. WM_LBUTTONDOWN 메시지 함수에서 다음과 같이 처리하면 된다. SendMessage(WM_SYSCOMMAND, SC_SIZE | HT_BOTTOMRIGHT); HT_BOTTOMRIGHT는 마우스 포인터가 해당 윈도우의 어디 부분에 위치해 있는지를 정해주는 값이므로 마우스 포인터가 위치하는 경계선 기준에 따라 아래와 같은 값들을 주면 된다. ( 위 예제 코드를 활용하여 실제 마우스 L버튼 클릭 후 드래그 하면 팝업 윈도의 오른하단 경계부분을 클릭 후 resize하는 것마냥 동작한다. ) #defineHT_NOWHERE0// On the screen ..
윈도우 위에 마우스가 올라가 있는 상태를 보통 'hover'로 정의한다. hover의 사전적 의미로는 '맴돌다'로 윈도우나 컨트롤 위에 마우스가 위치해 있는 상태를 말한다. 보통 이 상태를 체크하고 싶을 때 'TrackMouseEvent'를 이용한다. 하지만 이런식으로 처리하면 윈도우 안에 자식 컨트롤이 있을 경우 원하는데로 결과가 안나올 수 가 있다. 왜냐하면 패널 안에 있는 자식 컨트롤 위로 마우스 포인터가 이동할때 부모 윈도우에 'WM_MOUSELEAVE' 메시지가 호출되어 마우스가 윈도우 영역을 벗어났다고 인식할 수 있기 때문이다. 그래서 여러개의 자식 컨트롤들을 가지고 있는 윈도우의 Hover상태를 체크 하기 위해서는 다른 식의 접근이 필요하다. 필자는 Timer를 활용해 보겠다. 다음은 WTL..
화면에 그림을 그리는 것은 생각보다 부하가 심하다. 만약 화면 DC를 가져와 직접 그린다면 그림을 그리는 도중 무수한 깜박임이 발생한다. 이를 위해 우리는 더블 버퍼링을 활용할 수 있다. 더블 버퍼링이란 메모리 DC를 생성해 여기에 미리 그림을 그린 후 실제 출력할 화면 DC에 고속 복사를 하는 것이다. 실제 이렇게 화면을 그릴 경우 화면 깜박임이 없어지는 것을 볼 수 있다. 아래는 더블 버퍼링을 활용한 예제이다. GetClientRect(&rect); HDC hdc = GetDC(hwnd); // 그림 그릴 윈도우의 DC 가져오기 HDC hMemdc = CreateCompatibleDC(hdc); // 화면dc(그릴 윈도우) 기반 메모리 DC생성 HBITMAP hBitmap = CreateCompati..
윈도우 기반 어플리케이션을 개발할 때 디버깅이 불편할 수 있다. 이 때 콘솔창을 띄워 printf 함수를 사용해 편하게 디버깅 할 수 있는데 다음 함수를 사용하면 된다. BOOL WINAPI AllocConsole(void) 매개변수는 없고 성공 시 0이 아닌 값을 반환한다. 콘솔을 생성하면 프로그램 종료 시 다음 함수로 해제 할 수 있다. BOOL WINAPI FreeConsole(void) 콘솔 생성 후 만약 printf함수가 출력 안될 시 AllocConsole다음에 아래와 같이 적어주자 ! freopen("CONOUT$", "wt", stdout ); 이제 윈도우 베이스 프로그램에서 번거로웟던 디버깅을 편리하게 할 수 있다 !
보통 윈도우 UI를 구성할 때 자식 컨트롤들을 멤버변수로 갖고 OnCreate( or OnInitDialog )에서 자식 컨트롤들을 생성하는데 이렇게 만들어진 자식 컨트롤들을 혹시라도 소멸자에서 DestroyWindow하는 우를 범해서는 안된다. 실제 소멸자에서 자식 컨트롤들을 DestoryWindow하면 크래쉬가 발생하게 되는데, 이는 부모가 소멸자를 호출하는 시점에 이미 자식 컨트롤(윈도우)들은 파괴되어 있기 때문이다. 이럴 경우 부모 클래스에서 Destroy하는 함수를 만들어 명시적으로 안전하게 자식 컨트롤들을 해제하는 것이 좋다.