현재 위치 - 중국 분류 정보 발표 플랫폼 - 비즈니스 서비스 정보 - vc mfc 클립보드 작동 튜토리얼

vc mfc 클립보드 작동 튜토리얼

이 글에서는 주로 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())

{

//클립보드 데이터 가져오기

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);

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. 다른 애플리케이션 창에 자동으로 데이터 붙여넣기

해당 창의 핸들을 가져와서 메시지를 보내세요