Vs2013/线程

在.h文件里


// MFCApplication12Dlg.h : header file
//

#pragma once
#include "afxcmn.h"

//线程函数
UINT ThreadFun(LPVOID lpParam);
struct  threadInfo
{
        UINT nMilliSecond;//与编辑框进行数据交互
        CProgressCtrl * prctrlProgress;//与进度条进行数据交互
};

// CMFCApplication12Dlg dialog
class CMFCApplication12Dlg : public CDialogEx
{
// Construction
public:
    CMFCApplication12Dlg(CWnd* pParent = NULL); // standard constructor


// Dialog Data
    enum { IDD = IDD_MFCAPPLICATION12_DIALOG };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support


// Implementation
protected:
    HICON m_hIcon;
    CWinThread* pThread;//线程的标志

    // Generated message map functions
    virtual BOOL OnInitDialog();
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()
public:
                int m_nMiliSecond;   //与编辑框进行绑定
                CProgressCtrl m_ctrlProgress;//与进度条进行绑定
                afx_msg void OnBnClickedStart();//鼠标点击事件
};
///.cpp


#include "stdafx.h"
#include "MFCApplication12.h"
#include "MFCApplication12Dlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CMFCApplication12Dlg dialog

threadInfo Info;

CMFCApplication12Dlg::CMFCApplication12Dlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(CMFCApplication12Dlg::IDD, pParent)
    , m_nMiliSecond(0)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMFCApplication12Dlg::DoDataExchange(CDataExchange* pDX)
{
                //控件的绑定
                CDialogEx::DoDataExchange(pDX);
                DDX_Text(pDX, IDC_EDIT1, m_nMiliSecond);
                DDX_Control(pDX, IDC_PROGRESS1, m_ctrlProgress);
}

BEGIN_MESSAGE_MAP(CMFCApplication12Dlg, CDialogEx)
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_START, &CMFCApplication12Dlg::OnBnClickedStart)
END_MESSAGE_MAP()


// CMFCApplication12Dlg message handlers

BOOL CMFCApplication12Dlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    SetIcon(m_hIcon, TRUE);         // Set big icon
    SetIcon(m_hIcon, FALSE);        // Set small icon

   //初始化界面上的值,将编辑框的处置设置为10,并且将进度条的范围设置为0--99

    m_ctrlProgress.SetRange(0,99);
    m_nMiliSecond = 10;
    UpdateData(FALSE);
    return TRUE;  
}

void CMFCApplication12Dlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); 

        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;

        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialogEx::OnPaint();
    }
}

// The system calls this function to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMFCApplication12Dlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
}

UINT ThreadFunc(LPVOID lpParam)
{//线程处理函数
                threadInfo* pInfo = (threadInfo*)lpParam;
                for (int i = 0; i < 100; i++)
                {//每循环一次,都显示此时的位置,并且睡眠一定的时间,时间为输入框输入的时间。
                                int nTemp = pInfo->nMilliSecond;
                                pInfo->prctrlProgress->SetPos(i);
                                Sleep(nTemp);
                }
                return 0;
}
void CMFCApplication12Dlg::OnBnClickedStart()
{                  
            //1.创建线程
                // TODO: Add your control notification handler code here
                UpdateData(TRUE);
                Info.nMilliSecond   = m_nMiliSecond;
                Info.prctrlProgress = &m_ctrlProgress;
                pThread = AfxBeginThread(ThreadFunc,&Info);//创建线程
}


//添加线程处理函数

此函数的执行结果:点击开始按钮,开始获取编辑框上的数字,此时,跳入线程函数中,根据屏幕上设置的速率,进行进度的显示。
原创文章 59 获赞 39 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_28174951/article/details/79646350
今日推荐