- Ctrl+Alt+A/Z 맨 앞 창 통째 캡쳐(DWM 확장 프레임 경계), S/X 드래그 캡쳐. A/S 새 대화, Z/X 마지막 대화 - 캡쳐 후 창을 확실히 앞으로(AttachThreadInput), capture.image 에 목적지 path 실어 그 Composer 만 소비 - 드래그 선택영역 원본 밝기·더블버퍼(번쩍임) — code-assistant-v2 복사본에서 이식 - 단축키 Ctrl+Alt+Q/W: Eclipse·ADT·SAP GUI 바인딩 목록 대조해 비어 있는 조합으로 - 버튼 cursor:pointer(Tailwind v4), 가운데 스피너, 스니펫→챗 버튼, 스니펫 검색창 높이 84→88 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
26 lines
1.3 KiB
Markdown
26 lines
1.3 KiB
Markdown
# 캡처 선택 영역이 드래그 중 번쩍임
|
|
|
|
## 증상
|
|
|
|
- 캡처 범위를 드래그하면 원래 화면으로 보이는 선택 영역이 계속 번쩍였음.
|
|
- 캡처 결과가 아니라 드래그 중 오버레이 표시에서만 발생했음.
|
|
|
|
## 원인
|
|
|
|
- `WM_MOUSEMOVE`마다 `InvalidateRect`에 영역을 주지 않아 전체 가상 화면을 다시 그렸음.
|
|
- `WM_PAINT`가 실제 화면 DC에 검정 배경, 투명 color key, 테두리를 차례로 직접 그려 중간 상태가 노출됐음.
|
|
- 멀티모니터 전체 면적을 매번 다시 칠해 불필요한 GDI 작업도 컸음.
|
|
|
|
## 수정
|
|
|
|
- 이전 선택 사각형과 새 선택 사각형의 합집합만 무효화함.
|
|
- 오버레이 크기의 호환 bitmap과 memory DC를 한 번 만들고 창이 닫힐 때 해제함.
|
|
- memory DC에서 배경·투명 영역·테두리를 완성한 뒤 dirty 영역만 `BitBlt` 한 번으로 화면에 복사함.
|
|
- memory DC를 만들지 못하면 기존 화면 DC 그리기로 대체함.
|
|
|
|
## 확인
|
|
|
|
- 역방향 드래그를 포함한 선택 영역 합집합 계산 회귀 테스트를 추가함.
|
|
- Rust 테스트 14개와 build를 통과함.
|
|
- 요청에 따라 computer-use는 사용하지 않았고, 실제 드래그 화면 확인은 사용자 수동 확인으로 남김.
|