掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CStaticの文字をクリップボードへコピーするには? (ID:53216)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
すいません。サイトをまわって探したら見つかりました。 しかし、下記ソースで実行すると ハンドルが無効とエラーが出てしまいます。 10進数もしくは16進数の値(CString)をコピーして、クリップボードへデータを送ってます。 1・3・5・・・回目は正常にコピーできるのですが、2・4・6・・・回目はSetClipboardDataで転んでしまいます。 void CscpDlg::OnMenuCopy() { // コピー処理( mDHFlag = DEC/HEX右クリック判別フラグGlobal 0= 10進数 1=16進数) CString Buff; if ( mDHFlag == 0 ) { Buff = m_Edit1; } else { Buff = m_Edit2; } SetClipboardText(Buff); MessageBox("戻ってきますた。"); } BOOL CscpDlg::SetClipboardText(const char *Str) { size_t BufSize; char *Buf; HANDLE hMem; CString wwstr ; BufSize = strlen( Str ) + 1; // 確保するメモリのサイズを計算する hMem = GlobalAlloc( GMEM_SHARE | GMEM_MOVEABLE, BufSize ); // 移動可能な共有メモリを確保する if (hMem == NULL) { wwstr.Format("GlovalAllocエラー :%x",GetLastError() ); AfxMessageBox( wwstr ); GlobalFree( hMem ); return FALSE; } if ( !hMem ) return FALSE; Buf = (char *)GlobalLock( hMem ); // 確保したメモリをロックし、アクセス可能にする if ( Buf ) { strcpy( Buf, Str ); // 文字列を複写する。 GlobalUnlock( hMem ); // メモリのロックを解除する。 if ( OpenClipboard() ) { if ( EmptyClipboard() == 0 ) { wwstr.Format( "EmptyClipboardエラー %x", GetLastError() ) ; AfxMessageBox( wwstr ); GlobalFree( hMem ); return FALSE; } if (SetClipboardData( CF_TEXT, hMem ) == NULL) { wwstr.Format( "データセットエラー %x", GetLastError() ) ; AfxMessageBox( wwstr ); GlobalFree( hMem ); return FALSE; } if (CloseClipboard() == 0) { AfxMessageBox("クリップボードのクローズに失敗しました。"); GlobalFree( hMem ); return FALSE; } GlobalFree( hMem ); MessageBox("正常ルート"); return TRUE; } else { AfxMessageBox("クリップボードのオープンに失敗しました"); return FALSE; } } GlobalFree( hMem ); return 0; }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.