문제

저는 제 작업에서 개발 중인 머티리얼 시스템에 대한 드래그 앤 드롭 기능을 구현하려고 합니다.이 시스템의 일부에는 사용자 하드 드라이브에 저장된 자료를 그룹으로 나누어 저장소 역할을 하는 '재료 라이브러리'가 포함되어 있습니다.

일부 UI 개선의 일환으로 '강조 표시' 유형 기능을 구현하고 싶었습니다.끌어서 놓을 때 합법적으로 재료를 놓을 수 있는 창은 색상이 매우 미묘하게 변경되어 사용자에게 이것이 유효한 작업이라는 피드백을 개선합니다.

'기본 재료'(CStatic이 있는 CWnd)를 사용하여 막대를 강조 표시하지 않을 때 중간 회색 배경에서 마우스를 가져가면 파란색 배경으로 변경합니다.모두 잘 작동하며 OnDragEnter 및 OnDragExit 메시지는 강력해 보이고 강조 표시 상태를 나타내는 플래그를 설정합니다.그런 다음 OnCtrlColor에서 다음을 수행합니다.

    if (!m_bHighlighted) {
    pDC->FillSolidRect(0, 0, m_SizeX, kGroupHeaderHeight, kBackgroundColour);
}
else {
    pDC->FillSolidRect(0, 0, m_SizeX, kGroupHeaderHeight, kHighlightedBackgroundColour);
}

그러나 스크린샷에서 볼 수 있듯이 드래그한 개체 아래의 그림이 '결함'을 나타내어 원래 회색은 그대로 유지됩니다.그것은 정말 추악해 보이고 기본적으로 전체 효과를 망칩니다.

이 문제를 해결할 수 있는 방법이 있나요?

도움이 되었습니까?

해결책 3

답변 감사드립니다. ajryan. 제 질문에 항상 도움을 주시는 것 같아서 정말 감사드립니다.

다행히 이번에는 아주 간단하게 대답이 나왔습니다....

ImageList_DragShowNolock(FALSE);
m_pDragDropTargetWnd->SendMessage(WM_USER_DRAG_DROP_OBJECT_DRAG_ENTER, (WPARAM)pDragDropObject, (LPARAM)(&dragDropPoint));
ImageList_DragShowNolock(TRUE);

그러면 드래그된 이미지의 그리기가 꺼지고, 입력 중인 창에 강조 표시된 상태로 다시 칠하라는 메시지가 전송되고, 마지막으로 드래그 이미지가 맨 위에 다시 그려집니다.트릭을 수행 한 것 같습니다.

다른 팁

원격 디버깅은 시각적 문제를 디버깅할 수 있는 신의 선물입니다.설정하는 것은 쉽지 않지만 원격 디버깅을 위해 VM을 준비하면 확실히 효과가 있습니다.

제가 하고 싶은 일은 프레임워크 페인트 코드 자체뿐만 아니라 페인트 처리에 수많은 중단점을 설정하는 것입니다.이를 통해 devenv로 뒤집어서 그림을 지루하게 하지 않고도 그림을 효과적으로 "프레임 고정"할 수 있습니다.이렇게 하면 누가 어떤 순서로 그림을 그리는지, 필요한 방식으로 채우기를 분할할 수 있는 기회가 어디에 있는지 실제 그림을 얻을 수 있습니다.

CStatic은 자신을 다시 그려야 한다는 사실을 거의 모르는 것처럼 보입니다. 따라서 드래그 가능한 개체의 배경색은 남겨집니다.CStatic을 무효화하고 그것이 도움이 되는지 확인해 볼까요?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top