クリップボードへのテキストデータ入出力


テキスト・データのクリップボードへの格納とクリップボードからの取得する方法を示します。


【サンプル】

//クリップボードへテキスト・データを格納
void CClipBdTextDlg::OnButton1() 
{

    CString strBuf;
    char *str, *str2;
    HGLOBAL hMem;

    //エディット・ボックスからテキストを取得
    m_ed1.GetWindowText(strBuf);

    str = new char[strBuf.GetLength() + 1];
    strcpy(str, strBuf);

    //グローバル領域をメモリに確保
    hMem = GlobalAlloc(GMEM_MOVEABLE, strlen(str)+1);

    //グローバル領域(hMem)にデータを格納
    str2 = (char*)GlobalLock(hMem); 
    strcpy(str2, str);
    GlobalUnlock(hMem); 
    
    //クリップボードを開く
    if (OpenClipboard()){

        //クリップボードを空にする
        //(必ず必要な処置ではない)
        EmptyClipboard();

        //クリップボードへテキストを格納
        HANDLE hData = SetClipboardData(CF_TEXT, hMem);
    
        //クリップボードを閉じる
        CloseClipboard();
    
    }
}

//クリップボードからテキスト・データを取得
void CClipBdTextDlg::OnButton2() 
{

    char *str, *str2;

    //クリップボードを開く
    if(OpenClipboard()){
    
        //クリップボードが保持しているグローバル領域のハンドルを取得
        HANDLE hData = GetClipboardData(CF_TEXT);

        //グローバル領域に格納されているデータを取得
        str = (char*)GlobalLock(hData); 
        if (str) {
            str2 = new char[strlen(str) + 1];
            strcpy(str2, str);
            GlobalUnlock(hData);
        }

        //クリップボードを閉じる
        CloseClipboard();
    }

    m_ed2.SetWindowText(str2);
    
}