zoukankan      html  css  js  c++  java
  • MFC 剪切板的使用、线程介绍

    一、MFC 剪切板
        CListBox *pList = (CListBox*)GetDlgItem(IDC_LIST1);  // 获取ListBox控件句柄
        CString strTmp;
        pList->GetText(pList->GetCurSel(), strTmp);  // 获取当前控件选中的内容
        CString strOutput;
        AfxExtractSubString(strOutput, strTmp, 0, ';'); // 提取字符串
        TRACE("0-------%S
    ", 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中有两类线程,分别称为工作者线程和用户界面线程。二者的区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。

    工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程之外的用户输入,响应用户及系统所产省的事件和消息等。但对于Win32API编程而言,这两种线程是没有区别的,他们都只需要线程的启动地址即可启动线程来执行任务。

    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是%d
    ", AfxGetThread()->m_nThreadID);
        return 0;
    }
    
    int main()
    {
        for (int i = 0; i < 10; i++)
        {
            AfxBeginThread(MyFunc, NULL);
        }
        system("pause");
        return 0;
    }

    结果显示:

  • 相关阅读:
    如何使用angularjs实现文本框设置值
    如何使用angularjs实现文本框获取焦点
    electron的安装
    linux中升级jdk的方法
    linux中添加开机自启服务的方法
    liunx系统安装tomcat的方法
    liunx系统安装jdk的方法
    常用linux命令
    ResourceBundle的使用
    查看Linux系统版本的命令
  • 原文地址:https://www.cnblogs.com/hs-pingfan/p/10493184.html
Copyright © 2011-2022 走看看