VC++教你用程式碼實現把拷貝的內容放到剪貼簿。
以下是一個例項,將report控制元件拷貝下來的內容放到剪貼簿,作為文字列拷貝。
/** コピーコマンドの処理関數.
* @param なし.
* @return なし.
* @exception なし.
*/
void CGTDTemplatePropDlg::mf_OnCopyCommand()
{
// [コピー対象が屬性グループレポートではない場合、次の処理を行わない.]
if (GetFocus()->GetSafeHwnd() != mC_Rpt_AttrGroupReport.GetSafeHwnd())
{
return;
}
CXTPReportRow * lpC_FocusedRow = mC_Rpt_AttrGroupReport.GetFocusedRow();
CXTPReportColumn * lpC_FocusedColumn = mC_Rpt_AttrGroupReport.GetFocusedColumn();
if (lpC_FocusedRow == NULL)
{
return;
}
if (lpC_FocusedColumn == NULL)
{
return;
}
int li_FocusedColumnIndex = lpC_FocusedColumn->GetItemIndex();
// [屬性行を選択する時.]
if (li_FocusedColumnIndex == CGTDTemplateAttrGroupReport::EN_ITEM_ID_OBJECT_TYPE)
{
// [畫面エディットへコピーのコマンドを送る.]
HGLOBAL lh_Clip;
// [屬性グループ名を取得する.]
CString lC_Str_Attr_Name =((CGTDTemplateAttrGroupRecord *)lpC_FocusedRow->GetRecord())->mfC_GetName();
// [クリップボードを開くかどうかを判斷する.]
if (OpenClipboard() == FALSE)
{
return;
}
// [クリップボードの內容を削除する.]
EmptyClipboard();
SIZE_T ls_Size = WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, lC_Str_Attr_Name, -1, NULL, 0, NULL, NULL );
// [メモリーを文字列に割り當てる.]
lh_Clip = GlobalAlloc(GMEM_FIXED, ls_Size);
// [ゼロをメモリーに充填する.]
ZeroMemory(lh_Clip, ls_Size);
WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, lC_Str_Attr_Name, -1, (LPSTR)lh_Clip, ls_Size, NULL, NULL);
// [指定したフォーマットでクリップボードへデータを設定する.]
if (::SetClipboardData( CF_TEXT, lh_Clip ) == NULL )
{
CloseClipboard();
GlobalFree(lh_Clip);
return;
}
CloseClipboard();
}
// [NOTE: 設定値のコピー・貼り付け操作は CGTDTemplateReport で行う. ]
return;
}