VC++(VS2013)剪贴板的使用

chang feng he 2019-04-02 05:54:20
void CMFCSendMessageDlg::OnBnClickedButton4()
{
// 窗口控件:IDC_EDIT1, IDC_EDIT2,
// 对应的值:m_editValueSend, m_editValueGet
//DDX_Text(pDX, IDC_EDIT1, m_editValueSend);
//DDX_Text(pDX, IDC_EDIT2, m_editValueGet);
//CString m_editValueSend;
//CString m_editValueGet;

UpdateData(true);

m_editValueSend.GetBuffer();
OpenClipboard();
EmptyClipboard();

m_editValueSend.ReleaseBuffer();
int nLen = (m_editValueSend.GetLength() + 1) *sizeof(WORD);

HANDLE hclip = GlobalAlloc(GMEM_MOVEABLE, nLen);
char *pBuf = (char *)GlobalLock(hclip);
memcpy(pBuf, (char *)m_editValueSend.GetBuffer(), nLen);

//SetClipboardData是把指定数据按照指定格式放入剪切板中CF_UNICODETEXT CF_TEXT
SetClipboardData(CF_UNICODETEXT, hclip);
GlobalUnlock( hclip );

CloseClipboard();

if (!IsClipboardFormatAvailable(CF_UNICODETEXT))
return;
if (!OpenClipboard())
return;

HGLOBAL hglb = GetClipboardData(CF_UNICODETEXT);
LPCTSTR lptstr = (LPCTSTR)GlobalLock(hglb);
if (lptstr != NULL){
m_editValueGet = lptstr;
UpdateData(false);
}

GlobalUnlock(hglb);
CloseClipboard();
return;
}


...全文
269 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
窝米逗佛~ 2019-04-03
  • 打赏
  • 举报
回复
问问题?不是的话 发博客不更好么
chang feng he 2019-04-02
  • 打赏
  • 举报
回复
chang feng he 2019-04-02
  • 打赏
  • 举报
回复
//两种消息发送方式,进行数据传递:
// (1)自定义消息广播 (2)自定义消息向特定窗口发送消息

void CMFCSendMessageDlg::OnBnClickedButton1()
{
// (2)自定义消息向特定窗口发送消息
::PostMessage(this->GetSafeHwnd(), WM_USER_SENDCCT, 11, 22); // HWND_BROADCAST this->GetSafeHwnd() (HWND)0xffff
}

void CMFCSendMessageDlg::OnBnClickedButton2()
{
// (1)自定义消息广播
::PostMessage(HWND_BROADCAST, WM_USER_BROADCASTCCT, 11, 22); // HWND_BROADCAST this->GetSafeHwnd() (HWND)0xffff
}

afx_msg LRESULT CMFCSendMessageDlg::OnUserSendcct(WPARAM wParam, LPARAM lParam)
{
// 自定义消息接收,处理:

CString strMessage;

strMessage.Format(TEXT("wParam = %d, lParam = %d"), wParam, lParam);
AfxMessageBox(strMessage);

return 0;
}

afx_msg LRESULT CMFCSendMessageDlg::OnUserBroadcastcct(WPARAM wParam, LPARAM lParam)
{
CString strMessage;

strMessage.Format(TEXT("wParam = %d, lParam = %d"), wParam, lParam);
AfxMessageBox(strMessage);

return 0;
}
chang feng he 2019-04-02
  • 打赏
  • 举报
回复
// 平台:VC++(VS2013)
// 通过系统消息WM_COPYDATA进行进程之间的数据通信:

// 窗口控件:IDC_EDIT1, IDC_EDIT2,
// 对应的值:m_editValueSend, m_editValueGet
//DDX_Text(pDX, IDC_EDIT1, m_editValueSend);
//DDX_Text(pDX, IDC_EDIT2, m_editValueGet);
//CString m_editValueSend;
//CString m_editValueGet;

void CMFCSendMessageDlg::OnBnClickedButton3()
{ // 发送数据
UpdateData(true);

COPYDATASTRUCT copyData = { 0 };

copyData.lpData = m_editValueSend.GetBuffer();
copyData.cbData = m_editValueSend.GetLength();

//AfxMessageBox( (LPCTSTR)copyData.lpData ); HWND_BROADCAST PostMessage

::SendMessage(GetSafeHwnd(), WM_COPYDATA, (WPARAM)GetSafeHwnd(), (LPARAM)©Data);
}


BOOL CMFCSendMessageDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
// 接收数据

m_editValueGet = (LPCTSTR)pCopyDataStruct->lpData;
m_editValueGet.ReleaseBuffer();
//AfxMessageBox((LPCTSTR)m_editValueGet);

UpdateData(false);

return CDialogEx::OnCopyData(pWnd, pCopyDataStruct);
}

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧