进程(二)
这一节我们写个MFC剪切板程序
1.下载相应的组件
工具->工具视图,因为之前已经下载过一部分了,这里如果创建MFC报错的话,就要把没下载的补上
此项目需要MFC库
解决方法
2.创建MFC程序
3.打开资源视图,直接在菜单栏顶部搜索,不然找不到这个选项
4.打开项目,MFC1.rc===>Dialog===>第二个
5.打开工具箱,新建两个button和Edit control,将其ID分别修改为BUTTONSEND,BUTTONRECV , EDITSEND , EDITRECV
6.双击button按钮,进入代码界面,它会自动生成一个buttonSEND函数
void CMFC剪切板1Dlg::OnBnClickedButtonsend1()
7.编写buttonsend代码
1.打开剪切板
if (OpenClipboard()){/2.清空剪切板EmptyClipboard();char* SendBuf;/3.获取编辑框内容CString strSend;GetDlgItemText(EDITSEND, strSend);
EDITSEND就是Edit control的ID,
/分配一个内存对象,内存对象的句柄就是hclipHANDLE hclip = GlobalAlloc(GMEM_MOVEABLE,strSend.GetLength()+1);/5.给剪切板加锁SendBuf =(char*) GlobalLock(hclip);/6.将内容复制到SendBufstrcpy(SendBuf, strSend);
解锁
GlobalLock(hclip);
将数据放入剪切板,最后关闭它
/7.将数据放入剪切板SetClipboardData(CF_TEXT, hclip);/关闭剪切板CloseClipboard();
8.编写buttonrecv代码
void CMFC剪切板1Dlg::OnBnClickedButtonrecv1()
{/1.打开剪切板、if (OpenClipboard()){/2.判断剪切板是否可用if (IsClipboardFormatAvailable(CF_TEXT)){
/3.向剪切板要数据char* szRecvBuff{};HANDLE hclip = GetClipboardData(CF_TEXT);szRecvBuff = (char*)GlobalLock(hclip);/将数据放入剪切板SetDlgItemTextA(EDITRECV,szRecvBuff);/6.解锁GlobalLock(hclip);}CloseClipboard();
需要注意的是这里要将字符集设置为多字符集,另外这里使用strcpy函数会报错,要将预处理命令设置到属性===>C/C++===>预处理定义
生成后的界面
同时,我们的 剪切板中也有了2134,我们可以直接粘贴到其他文件中,那么这程序和进程又有什么关系呢?如果我们把buttonrecv按钮写到另一个进程中,也可以直接接收到send的数据,这就实现了两个进程之间的通信