MFC/MFC 코드기록

클립보드에 문자열 복사하기 (문자열 복사 / ctrl + c)

lwj789 2023. 2. 20. 18:18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
void WJ_EditControl::CopyTextA(CStringA a_str)
{
    int len = a_str.GetLength();
    HGLOBAL ClipData = ::GlobalAlloc(GHND, len);
    char *lpClip = (char *) ::GlobalLock(ClipData);
    memcpy(lpClip, a_str.GetBuffer(), len);
 
    ::GlobalUnlock(ClipData);
    ::OpenClipboard(GetSafeHwnd());
    ::EmptyClipboard();
    ::SetClipboardData(CF_TEXT, ClipData);
    ::CloseClipboard();
}
 
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
void WJ_EditControl::CopyTextW(CString a_str)
{
    int len = a_str.GetLength() << 1;
    char *aStr = (char *)malloc(len);
    memset(aStr, 0x00, len);
    
    UnicodeToAscii(a_str.GetBuffer(), aStr);
 
    HGLOBAL ClipData = ::GlobalAlloc(GHND, len);
    char *lpClip = (char *)::GlobalLock(ClipData);
    memcpy(lpClip, aStr, len);
    
    ::GlobalUnlock(ClipData);
    ::OpenClipboard(GetSafeHwnd());
    ::EmptyClipboard();
    ::SetClipboardData(CF_TEXT, ClipData);
    ::CloseClipboard();
 
    free(aStr);
}
cs