이 글에서는 주로 VC/MFC에서 다음 콘텐츠의 클립보드 작업을 소개합니다.
1. 텍스트 콘텐츠 작업
2. /p>
p>
3. 비트맵 작업
4. 사용자 정의 형식 설정 및 사용
5. 6. 데이터를 다른 응용 프로그램 창에 자동으로 붙여넣기
1. 텍스트 콘텐츠 작업
다음 코드는 텍스트 콘텐츠를 클립보드에 복사하는 방법을 보여줍니다. (유니코드 인코딩은 먼저 ASCII로 변환됩니다.) :
CString 소스;
//텍스트 내용은 소스 변수에 저장됩니다.
if( OpenClipboard() )
{ < /p>
HGLOBAL 클립 버퍼;
char * 버퍼;
EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE, source.GetLength() 1 );
buffer = (char*)GlobalLock(clipbuffer);
strcpy(buffer, LPCSTR(source));
GlobalUnlock(clipbuffer); < /p>
SetClipboardData(CF_TEXT,clipbuffer);
CloseClipboard();
}
다음 코드는 클립보드에서 가져오는 방법을 보여줍니다. 텍스트 내용:
char * buffer = NULL;
//클립보드 열기
CString fromClipboard;
if ( OpenClipboard() )
{
HANDLE hData = GetClipboardData(CF_TEXT);
char * buffer = (char*)GlobalLock(hData);
fromClipboard = buffer;
GlobalUnlock(hData);
CloseClipboard();
}
2. p>
클립보드의 이미지 데이터를 읽고 쓰는 기능은 매우 유용한 기능이며, 구현도 매우 간단합니다.
다음 코드는 확장 메타파일을 클립보드에 복사하는 방법을 보여줍니다.
if(OpenClipboard());
{
EmptyClipboard();< /p >
//메타파일 DC 생성
CMetaFileDC * cDC = new CMetaFileDC();
cDC-CreateEnhanced(GetDC(), NULL, NULL, "the_name ");< /p>
//그리기 루틴 호출
//CMetafileDC를 닫고 해당 핸들 얻기
HENHMETAFILE handler = cDC-CloseEnhanced();
p>< p>//클립보드에 복사SetClipBoardData(CF_ENHMETAFILE, 핸들);
CloseClipboard();
//dc 삭제
delete cDC;
}
다음 코드는 클립보드에서 메타파일을 가져와 클라이언트 DC에 그리는 방법을 보여줍니다.
if(OpenClipboard())< /p>
{
//클립보드 데이터 가져오기
HENMETAFILE 핸들 = (HENMETAFILE)GetClipboardData(CF_ENHMETAFILE);
< p>//표시CClientDC dc(this);
CRect 클라이언트(0, 0, 200, 200);
dc.PlayMetaFile(handle, client);
< p>//클립보드 닫기CloseClipboard();
}
3. 비트맵 작업
비트맵 작업은 다음과 같습니다. 다음 예는 비트맵을 클립보드에 저장하는 방법을 보여줍니다.
if(OpenClipboard())
{
EmptyClipboard();< /p>
CBitmap * 정크 = 새로운 CBitmap();
CClientDC cdc(this);
CDC dc;
dc.CreateCompatibleDC(cdc );
CRect 클라이언트(0, 0, 200, 200);
junk-CreateCompatibleBitmap(cdc, client.Width(), client.Height());
dc.SelectObje
ct(junk);
DrawImage(dc, CString("Bitmap"));
//데이터 복사 클립보드
SetClipboardData(CF_BITMAP,junk-m_hObject);
CloseClipboard();
정크 삭제;
}
다음 코드는 클립보드에서 비트맵 데이터를 가져오는 방법을 보여줍니다.
if(OpenClipboard())
{ p>
//클립보드 데이터 가져오기
HBITMAP 핸들 = (HBITMAP)GetClipboardData(CF_BITMAP);
CBitmap * bm = CBitmap::FromHandle(handle)
CClientDC cdc(this)
CDC dc; .CreateCompatibleDC(cdc);
dc.SelectObject(bm);
cdc.BitBlt(0, 0, 200, 200, dc, 0, 0, SRCCOPY); p>
cdc.BitBlt(0, 0, 200, 200, dc, 0, 0, SRCCOPY) p>
CloseClipboard();
}
4. 사용자 정의 형식 설정 및 사용
RegisterClipboardFormat() 함수를 사용하여 필요한 데이터 유형을 복사하여 붙여넣습니다.
예를 들어, 다음과 같은 데이터 유형이 있습니다:
struct MyFormatData
{
long val1;
int val2;
< p>};클립보드에 복사하려면 다음 코드를 사용하세요.
UINT format = RegisterClipBoardFormat("MY_CUSTOM_FORMAT");
if(OpenClipboard())
{
MyFormatData 데이터;
data.val1 = 100;
data.val2 = 200;
HGLOBAL 클립 버퍼;
EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE, sizeof(MyFormatData));
MyFormatData * buffer = (MyFormatData*)GlobalLock(clipbuffer);
//메모리에 저장
*buffer = data;
//클립보드에 저장< /p >
GlobalUnlock(clipbuffer);
SetClipboardData(format,clipbuffer);
CloseClipboard();
}
Read 다음 코드를 사용하여 데이터를 가져옵니다:
UINT format = RegisterClipboardFormat("MY_CUSTOM_FORMAT");
MyFormatData data;
if(Openclipboard())
{
HANDLE hData =GetClipboardData(format);
MyFormatData * buffer = (MyFormatData*)GlobalLock(hData);
data = *buffer ;
GlobalUnlock(hData);
CloseClipboard();
}
5. 클립보드 내용의 변경 사항 감지
Windows 메시지를 통해 클립보드 내용이 변경되었는지 여부를 확인할 수 있습니다.
//초기화 코드 호출에서:
SetClipboardViewer( ); //클립보드 관찰 체인에 추가된 프로그램 설정
//메시지 맵에 추가:
ON_MESSAGE(WM_DRAWCLIPBOARD, OnClipChange) //메시지 핸들 추가
//다음과 같이 선언됩니다:
afx_msg void OnClipChange();
마지막으로 구현:
void CDetectClipboardChangeDlg::OnClipChange()
{< /p>
CTime 시간 = CTime::GetCurr
entTime();
SetDlgItemText(IDC_CHANGED_DATE, time.Format("a, b d, Y -- H:M:S"));
DisplayClipboardText();
}
6. 다른 애플리케이션 창에 자동으로 데이터 붙여넣기
해당 창의 핸들을 가져와서 메시지를 보내세요