您的位置:首页 > 编程语言 > C语言/C++

C++教你用代码实现把拷贝的内容放到剪贴板。

2011-08-30 09:41 281 查看
以下是一个实例,将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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: