antenn-a
company profile

MFC航海日記 二十六日(クリップボードへの文字列の格納)

今回はクリップボードへの文字列の格納方法について記述する。

いきなり余談であるが、クリップボードへの文字列の格納は私の「夢」だったのである。 なんか、格好よく見えるのだが私だけであろうか?

そんな「夢」とは裏腹にクリップボードへの文字列の格納は非常に簡単に実装できた。 実装方法を以下に示す。

prev

void PushClipBoard( CString str_clip )
{
    HGLOBAL   hGlobalMemory = GlobalAlloc( GHND, ( DWORD )256 + 1 );
    LPVOID    lpGlobalMemory;
    
    lpGlobalMemory = GlobalLock( hGlobalMemory );

    strcpy( ( char* )lpGlobalMemory, str_clip );

    GlobalUnlock( hGlobalMemory );

    ::OpenClipboard( *this );
    ::EmptyClipboard();
    ::SetClipboardData( CF_TEXT, hGlobalMemory );
    ::CloseClipboard();
}
以上の作業でクリップボードに引数で渡される「str_clip」がクリップボードにコピーされる(はず)である。

ここで、「HGLOBAL」や「LPVOID」ってなぁぁぁにぃぃぃ?という方がいらっしゃると思いますが、これについてはC++の参考書やウィンドウズプログラムの参考書に委ねる事にする。

なぜかというと・・・「筆者もよくわからん!!」からである。 まぁ、大体理解は出来るのだが実行ファイルを生成したとき(リンクが終了した時点で)メモリ領域が確保されると思うのだが、メモリのスコープとタイミングがいまいちつかめないのである。

Gloval Memoryというぐらいだから、ヒープ領域に確保されると思われるのだが、関数スコープなのかexternなのか(それはないと思うが)が良く分からないのである。

しかしアロケーションするからにはやはり、CString::GetBuffer()のような「ノリ」なのだろうか? 誰かご教授下さい>読者の方


antenn-a

prev next


antenn-a