2016. 3. 7. 00:01ㆍIT-개발/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 상관없이
이것두 잘되네요... 아주 정확한
원인을 찾진 못했지만... 알게되면 알려주세요~ 어쨌든... 불필요한 실수는 줄이자~ ^_^
'IT-개발 > winapi 및 MFC' 카테고리의 다른 글
[winapi] 단축키 등록 / 사용 (0) | 2016.03.23 |
---|---|
[WinApi] ShellExecute(Ex) 사용법 예제 - 유용 (펌) (0) | 2016.03.07 |
[MFC-구조] (펌) MFC :: MainFrame,Doc,View의 포인터 얻기 (0) | 2016.03.06 |
[Registry] 읽기 / 쓰기 / 삭제 (펌) (0) | 2016.03.06 |
[Registry] 지정된 레지스트리 Key의 각종정보알기 Enumerating (0) | 2016.03.06 |