2008-09-16 4 views
0

내 작품에서 개발중인 재료 시스템에 대해 드래그 앤 드롭 기능을 구현하려고합니다. 이 시스템의 일부는 사용자의 하드 드라이브에 저장된 자료의 그룹으로 나뉘어 저장소로 사용되는 '재료 라이브러리'를 포함합니다.MFC Painting Glitch를 수정하는 방법은 무엇입니까?

일부 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); 
} 

을하지만, 당신은 스크린 샷에서 볼 수 있듯이, 장소에 원래 회색을 떠나 드래그 된 객체 아래의 그림 '결함'. 정말보기 흉하고 기본적으로 모든 효과를 망칩니다.

이 문제를 해결할 수있는 방법이 있습니까?

답변

0

답변 주셔서 감사합니다, 아리 얀, 내 질문에 항상 도움이 될 것 같습니다. 감사합니다. 다음 다행히

대답은 매우 간단합니다 ....

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

이 드래그 된 이미지의 그림을 해제가 다음 창에 메시지가 강조 표시된 상태에서 다시 칠하기 위해 입력되는 전송했다이 시간, 드래그 이미지를 맨 위에 다시 그립니다. 그 트릭을 한 것처럼 보입니다.

0

CStatic이 스스로 다시 칠할 필요가 있다는 것을 모르는 것처럼 보이기 때문에 드래그 가능한 객체의 배경색이 남습니다. 어쩌면 CStatic을 무효화하고 그 것이 전혀 도움이되는지 확인해보십시오.

1

원격 디버깅은 시각적 인 문제를 디버깅하기위한 신의 선물입니다. 설정하는 것이 어려워 지지만 원격 디버깅을 위해 VM을 준비하는 것이 확실합니다.

내가하고 싶은 것은 내 페인트 처리와 프레임 워크 페인트 코드 자체에서 많은 중단 점을 설정하는 것입니다. 이렇게하면 devenv로 뒤집어서 페인트하지 않고도 효과적으로 "프레임 고정"할 수 있습니다. 이 방법을 사용하면 누가 순서대로 그림을 그리는가에 대한 진정한 그림을 얻을 수 있으며 필요에 따라 채우기를 할 수있는 기회를 얻을 수 있습니다.

관련 문제