데이터 개체 클립보드 전송,COleDataSource 와 COleDataObject 용법

//다음은 COleDataSource 와 ColeDataObject 로 클립보드 로 대상 Bitmap 을 전송 하 는 방법 입 니 다.데이터 형식 은 CF 입 니 다.DIB(시스템 이 정의 한)//사용자 정의 데이터 형식 을 사용 하려 면 데이터 형식 구조 체 CLIPFORMAT 를 보고 RUINT RegisterClipboard Format(LPCTSTR lpszFormat)을 사용 해 야 합 니 다.구체 적 인 용법 은 자 료 를 찾 아 보 세 요/mdib 는 CEx25aDoc 의 CDib 대상 공공 구성원 입 니 다.
 
 
void CEx25aView::OnEditCopy()
{
	// TODO: Add your command handler code here
	COleDataSource* pSource = SaveDib();//         new     COleDataSource  ,       
	if(pSource){
		pSource->SetClipboard(); //  COleDataSource               ,,       GloableAlloc       ,   new   CO//leDateSource  
	}
}

4.567913.4.567913.이 코드 로 보 낸 적 이 없어 서 비극 적 이 었 어 요.
 
 
COleDataSource* CEx25aView::SaveDib(void)
{
	CDib& dib = GetDocument()->m_dib;
	if(dib.GetSizeImage() > 0){
		COleDataSource* pSource = new COleDataSource(); //       
		int nHeaderSize = dib.GetSizeHeader();//      Bitmap      
		int nImageSize = dib.GetSizeImage();//   Bitmap         
		HGLOBAL hHeader = ::GlobalAlloc(GMEM_MOVEABLE,nHeaderSize + nImageSize);//    ,MSDN      GMEM_MOVEABLE    ,   HGLOBAL .      GlobalLock         ,   ,    GlobalUnlock  
		LPVOID pHeader = ::GlobalLock(hHeader);
		ASSERT(pHeader != NULL);
		LPVOID pImage = (LPBYTE)pHeader+nHeaderSize;
		memcpy(pHeader,dib.m_lpBMIH,nHeaderSize);//
		memcpy(pImage,dib.m_lpImage,nImageSize);//    ,Receiver is supposed to free the global memory
 		::GlobalUnlock(hHeader); //  GlobalUnlock  
		pSource->CacheGlobalData(CF_DIB,hHeader); //                     
		return pSource;
	}
	return NULL;
}
void CEx25aView::OnEditPaste()
{
	// TODO: Add your command handler code here
	CEx25aDoc* pDoc = GetDocument();
	COleDataObject dataObject;  //        ,        COleDataObject
	VERIFY( dataObject.AttachClipboard());
	DoPasteDib(&dataObject);
	CClientDC dc(this);
	pDoc->m_dib.UsePalette(&dc);
	pDoc->SetModifiedFlag();
	pDoc->UpdateAllViews(NULL);
}

좋은 웹페이지 즐겨찾기