|
今回はクリップボードへの文字列の格納方法について記述する。
いきなり余談であるが、クリップボードへの文字列の格納は私の「夢」だったのである。 なんか、格好よく見えるのだが私だけであろうか? そんな「夢」とは裏腹にクリップボードへの文字列の格納は非常に簡単に実装できた。 実装方法を以下に示す。 |
|
|
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()のような「ノリ」なのだろうか? 誰かご教授下さい>読者の方 |