[BACK]Return to clipboard.txt CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / windows / winfep

Annotation of OpenXM_contrib2/windows/winfep/clipboard.txt, Revision 1.1

1.1     ! noro        1: 下の記述により、次のようなコードになると思われる。
        !             2: str に送りたい文字列が入っているとする。
        !             3:
        !             4: int len=strlen(str)+1;
        !             5: if (!OpenClipboard(NULL) ) return;
        !             6: HGLOBAL hMem = GlobalAlloc(GMEM_FIXED,len);
        !             7: LPTSTR pMem = (LPTSTR)hMem;
        !             8: lstrcpy(pMem,(LPCTSTR)str);
        !             9: EmptyClipboard();
        !            10: SetClipboardData(CF_TEXT,hMem);
        !            11: CloseClipboard();
        !            12: SendMessage(asirhwnd,WM_CHAR,0x19,1); // 0x19=CTRL(Y) -> asirgui で Paste
        !            13: SendMessage(asirhwnd,WM_CHAR,'\n',1);
        !            14:
        !            15: ---------------------------------------
        !            16:
        !            17: ここでは、クリップボードにテキストデータをコピーしたり、 クリップボードからテキストデータを取得する方法を説明する。
        !            18:
        !            19: クリップボードへテキストデータをコピーする
        !            20: CClipboardというクラスを作成し、以下のような関数を定義する。
        !            21: この関数は、引数に設定したテキストをクリップボードへコピーするというものである。
        !            22:
        !            23:        BOOL CClipboard::SetClipboardText(LPCTSTR lpszText)
        !            24:        {
        !            25:                CString strText(lpszText);
        !            26:
        !            27:                // 文字列が空の場合はコピーしない
        !            28:                if( strText.IsEmpty() )
        !            29:                        return FALSE;
        !            30:
        !            31:                // クリップボードのオープン
        !            32:                if( !::OpenClipboard(NULL) )
        !            33:                        return FALSE;
        !            34:
        !            35:                // ヒープ上にメモリ領域を確保し、文字列をコピー
        !            36:                int iStrLen = strText.GetLength() + 1;
        !            37:                HGLOBAL hMem = ::GlobalAlloc(GMEM_FIXED, iStrLen);
        !            38:                LPTSTR pMem = (LPTSTR)hMem;
        !            39:                ::lstrcpy(pMem, (LPCTSTR)strText);
        !            40:
        !            41:                // クリップボードへ文字列をコピーし、クローズ
        !            42:                ::EmptyClipboard();     // クリップボードの中身を空にする
        !            43:                ::SetClipboardData(CF_TEXT, hMem);
        !            44:                ::CloseClipboard();
        !            45:
        !            46:                return TRUE;
        !            47:        }
        !            48:
        !            49: クリップボードへコピーするデータは、GlobalAlloc APIを使って確保したメモリ領域に設定する必要がある。
        !            50: ここでは第1引数にGMEM_FIXEDを指定しているので、 戻り値であるハンドルhMemをキャストするだけでポインタpMemが取得できる。
        !            51: 第1引数にGMEM_MOVEABLEを指定した場合には、GlobalLock APIでポインタを取得する必要がある。
        !            52: また、ヒープ上に確保したメモリ領域を解放(GlobalFree API)していないが、 SetClipboardData APIでクリップボードへ設定した
        !            53: メモリ領域は以後クリップボードが制御するため、 アプリケーションが解放する必要はない(というか解放してはいけない)。
        !            54: なお、OpenClipboard APIでクリップボードをオープンすると他のアプリケーションからは使えなくなるので、
        !            55: 必要がなくなったらすぐにCloseClipboard APIでクローズすること。
        !            56:
        !            57: クリップボードのテキストデータを取得する
        !            58: CClipboardというクラスに以下のような関数を定義する。 この関数は、クリップボードにクリップされたテキストデータが
        !            59: あればそれを取得する。
        !            60:
        !            61:        CString CClipboard::GetClipboardText()
        !            62:        {
        !            63:                CString strText;
        !            64:                strText.Empty();
        !            65:
        !            66:                // クリップボードにテキストデータが入っているかを調べる
        !            67:                if( !::IsClipboardFormatAvailable(CF_TEXT) )
        !            68:                        return strText;
        !            69:
        !            70:                // クリップボードのオープン
        !            71:                if( !::OpenClipboard(NULL) )
        !            72:                        return strText;
        !            73:
        !            74:                // クリップボードからデータを取得し、strTextへコピー
        !            75:                HANDLE hMem = ::GetClipboardData(CF_TEXT);
        !            76:                LPTSTR pMem = (LPTSTR)::GlobalLock(hMem);
        !            77:                ::lstrcpy((LPTSTR)(LPCTSTR)strText, pMem);
        !            78:                ::GlobalUnlock(hMem);
        !            79:                ::CloseClipboard();
        !            80:
        !            81:                return strText;
        !            82:        }
        !            83:

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>