2014-01-10 1 views
2

응용 프로그램에서 개인 형식 (CF_PRIVATEFIRST ~ CF_PRIVATELAST)으로 클립 보드에 데이터를 놓을 경우 WM_DESTROYCLIPBOARD에 응답하여 해제해야합니다. 이러한 형식의 경우 시스템에서 자동으로 수행하지 않기 때문입니다.개인 클립 보드 형식 정리

  1. 그것은 하나의 응용 프로그램에서 사용되는 개인 포맷은 다른 응용 프로그램 (그들은 민간 영역에서 동일한 형식의 코드를 사용하는 경우에도)에서 볼 수없는 것을 사실 논리적으로해야한다.

    a) 시스템에서 어떻게 이것을 시행합니까? 그것은 클립 보드 소유자 (윈도우 핸들)를 사용합니까?

    b) 소유자 창이 닫히면 비공개 형식 항목이 클립 보드에서 자동으로 제거됩니까? (클립 보드 뷰어를 사용하면 보이지 않는 것처럼 보입니다.) 그래서 창 핸들을 다시 사용할 때 어떻게됩니까?

  2. WM_DESTROYCLIPBOARD에 대한 응답으로 메모리를 해제하는 것 외에도 응용 프로그램을 종료 할 때 메모리를 해제해야합니까? (클립 보드가 전역 메모리를 사용하여 어떤 프로세스에서든 데이터에 액세스 할 수 있다는 것을 알고 있으므로이 프로세스를 생성 한 프로세스가 종료 될 때 자동으로 해제되지 않는다고 생각합니다.)

  3. 이상적으로 말하면, 응용 프로그램이 종료 될 때 개인용 형식 만 사용하고 표준 형식은 그대로 두십시오. 단, 클립 보드에서 하나의 형식 만 제거하는 API 호출을 찾을 수는 없습니다. 클립 보드를 비우고 비공개 형식을 명시 적으로 다시 쓰는 것 이외에이 작업을 수행하는 간단한 방법이 있습니까?

MSDN 설명서와 Google을 검색 한 결과 이러한 질문에 대한 답변을 찾을 수 없으므로 누구든지 도움을받을 수 있습니까?

+0

동일한 이름을 사용하는 다른 응용 프로그램의 클립 보드 형식을 볼 수 없습니까? 개인용 형식을 사용하는 동일한 애플리케이션의 두 인스턴스간에 드래그 앤 드롭 할 수 있습니다. 2 가지 다른 응용 프로그램에 대해 이것이 올바르지 않아야하는 이유는 알 수 없습니다. – user2543253

+0

@ user2543253 당신이 '같은 번호를 사용하면'이라고 생각한다고 가정합니다. 개인 클립 보드 형식에는 이름이 없습니다. 문제는 개인용 클립 보드 형식 번호가 모든 응용 프로그램간에 공유되는 경우 여러 가지 용도로 동일한 번호를 사용하는 두 응용 프로그램을 방지하기 위해 개인 형식의 중앙 레지스터가 있어야한다는 것입니다. 그리고 그들은 더 이상 개인적인 포맷이 아니라 CF_TEXT 같은 공개적이고 문서화 된 포맷입니다.등록 된 클립 보드 형식과 혼동하고 있습니까? –

+0

"RegisterClipboardFormat"으로 등록 할 때 나는 같은 이름을 의미했습니다. 왜냐하면 그들은 같은 숫자를 얻었 기 때문입니다. 문서를 다시 읽으면 "하나 이상의 응용 프로그램에서 동일한 등록 된 클립 보드 형식을 사용하여 데이터를 복사하고 붙여 넣을 수 있습니다." "등록 된 형식과 혼동"한다는 것은 무엇을 의미합니까? 클립 보드 형식이 개인 형식으로 등록되지 않습니까? – user2543253

답변

0

신뢰할 수없는 응답 (.. 나는 사람들에 대해 물어 아니에요 등록 된 클립 보드 포맷에 대해 알고), 그러나 그것은 진실 결정하기 위해 테스트를 안내 할 수 있습니다

  1. 나는 반대로 생각을 SetClipboardData의 설명서를 참조하십시오. 개인 형식을 사용하면 전달 된 핸들의 메모리 소유권이 시스템에 제공되지 않습니다. 따라서 클립 보드를 읽으려는 다른 프로그램은 읽을 수없는 데이터에 대한 핸들을 얻게됩니다. 테스트 : 클립 보드 뷰어가 실제로 개인 데이터 또는 핸들 만 검색 할 수 있습니까?
  2. 무료로 제공되는 메모리는 SetClipboardData를 호출 할 때 참조한 응용 프로그램 메모리입니다. 따라서 응용 프로그램 종료시 메모리를 비울 필요가 없습니다. 나머지 메모리와 함께 해제해야하기 때문입니다.
  3. 개인 형식은 WM_RENDERALLFORMATS 메시지를 받았을 때 렌더링되지 않은 지연 렌더링 데이터와 마찬가지로 더 이상 존재하지 않는 데이터를 가리 킵니다.