[UI / 권한] Drag & Drop.. 않되는 UI 구조...

2016. 3. 7. 00:01IT-개발/winapi 및 MFC

반응형

경험한 내용을 기록하려고 한다... 결론은 이거다.


FormView 써라~ 


(펌 : [MFC] CDockablePane에 CFormView 올리기 )



아는 내용들 처럼 Window Vista 부터 UAC를 사용하는 모든 사용자들은 


사용자 인터페이스 권한 격리(User Interface Privilege Isolation; UIPI) 로 인해서 


관리자 권한으로 실행되는 윈도우 App들은 explorer 에서 Drag & Drop이 않먹히고 때문에 


DragAcceptFiles(TRUE);

ChangeWindowMessageFilter (0x0049, MSGFLT_ADD);

ChangeWindowMessageFilter (WM_COPYDATA, MSGFLT_ADD);

ChangeWindowMessageFilter (WM_DROPFILES, MSGFLT_ADD);


요런거 추가해서 Drag & Drop 먹히게 해서 동작시킨다... 보통은 다 먹힌다.


근데, 안먹히는 UI 구조가 있다.


CTabbedPane... Pane(페인이라고 읽더라... 잘못읽었다가 망신스러웠음..)


CTabbedPane 은 상속구조를 보면 자신이 CDockablePane 이 상속 받는데, 내부에 CMFCBaseTabCtrl을 가진다...


그리고 여기에 Pane을 하나더 올려서 그위에 각종 UI 관련 Form이나 컨트롤을 올리게 되면 


DragAcceptFiles(TRUE);

ChangeWindowMessageFilter (0x0049, MSGFLT_ADD);

ChangeWindowMessageFilter (WM_COPYDATA, MSGFLT_ADD);

ChangeWindowMessageFilter (WM_DROPFILES, MSGFLT_ADD);


요걸 써도 Drag & Drop이 안먹힌다. ㅠㅠ.. 결국에는 매니페스트 권한을 낮추어 버렸는데....


시간이 된다면, FormView에 CMFCBaseTabCtrl 을 직접 올려서... 거기에 pane을 올리고, 각종 컨트롤을 올리는게


옳고 좋다고 생각한다. 이렇게 Test Code 작성해서 해보니, Drag & Drop 잘 먹힌다.


DragAcceptFiles(TRUE);


요것만 해줘도, 마우스 모양이 Drag&Drop 지원하는 형태로 바뀌는게 정상이다. 근데, CTabbedPane 이거 위에 올려진


UI들 위에는 아예 이게 안나온다. 혹시나 방법 아시는분 좀 알려주시라~ ㅠㅠ


그리고, CTabbedPane 이거 Floating 해서 Docking 시킨 Pane들 UI 상으로 분리 시켜보니 내부에 있는 CMFCBaseTabCtrl이


Destroy 되어 있더라... 근데~ 이때부터는 Drag & Drop 잘 된다~~ 


CTabbedPane 내부에 있는 CMFCBaseTabCtrl에 


DragAcceptFiles


요거 먹이면 되지 않느냐고?.. 해봐라~  않된다. ㅋ~ 웃기는거는 UAC 내리면 CMFCBaseTabCtrl 상관없이 


이것두 잘되네요... 아주 정확한 


원인을 찾진 못했지만... 알게되면 알려주세요~  어쨌든... 불필요한 실수는 줄이자~ ^_^