概述
一、MFC 剪切板
CListBox *pList = (CListBox*)GetDlgItem(IDC_LIST1); // 获取ListBox控件句柄
CString strTmp;
pList->GetText(pList->GetCurSel(), strTmp); // 获取当前控件选中的内容
CString strOutput;
AfxExtractSubString(strOutput, strTmp, 0, ';'); // 提取字符串
TRACE("0-------%Sn", strOutput); // 日志显示
ShellExecute(NULL, TEXT("open"), strOutput, NULL, NULL, SW_SHOW);
AfxExtractSubString(strOutput, strTmp, 1, ';'); // 提取字符串
HGLOBAL p = nullptr; // 定义一个全局变量
if (OpenClipboard()) // 打开剪切板并判断剪切板是否打开
{
EmptyClipboard(); // 清空剪切板
USES_CONVERSION;
char szName[256];
strcpy(szName, T2A(strOutput)); // 将CString类型的字符串拷贝到char [] 类型中
HGLOBAL hMem = GlobalAlloc(GHND, sizeof(szName)); // 分配全局内存
char *pmen = (char *)GlobalLock(hMem); // 锁定全局内存
memcpy(pmen, szName, sizeof(szName)); // 向全局内存中拷贝数据
SetClipboardData(CF_TEXT, hMem); // 设置数据到剪切板
CloseClipboard(); // 关闭剪切板
p = GlobalFree(hMem); // 释放全局内存
}
二、MFC 线程
MFC中有两类线程,分别称为工作者线程和用户界面线程。二者的区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。
工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程之外的用户输入,响应用户及系统所产省的事件和消息等。但对于Win32的API编程而言,这两种线程是没有区别的,他们都只需要线程的启动地址即可启动线程来执行任务。
在MFC中,一般用于全局函数AfxBeginThread()来创建并初始化一个线程的运行,该函数有两种重载形式,分别用于创建工作者线程和用户界面线程。两种重载函数原型和参数分别说明如下:
(1)工作者线程
CWndThread *AfxBeginThread(AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
UINT nPriority=THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);
(2)UI线程(用户界面线程)
CWndThread *AfxBeginThread(CRuntimeClass *pThreadClass,
int nPriority=THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);
简单的线程案例:
#include <afxwin.h>
#include <stdio.h>
UINT MyFunc(LPVOID)
{
printf("我的线程ID是%dn", AfxGetThread()->m_nThreadID);
return 0;
}
int main()
{
for (int i = 0; i < 10; i++)
{
AfxBeginThread(MyFunc, NULL);
}
system("pause");
return 0;
}
结果显示:
最后
以上就是甜美香水为你收集整理的MFC 剪切板的使用、线程介绍的全部内容,希望文章能够帮你解决MFC 剪切板的使用、线程介绍所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复