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);//創建線程
}


//添加線程處理函數

此函數的執行結果:點擊開始按鈕,開始獲取編輯框上的數字,此時,跳入線程函數中,根據屏幕上設置的速率,進行進度的顯示。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章