以下是一个实例,将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;
}