MTDlg.cpp
上传用户:salessam
上传日期:2022-05-14
资源大小:133k
文件大小:4k
源码类别:

进程与线程

开发平台:

Visual C++

  1. // MTDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "MT.h"
  5. #include "MTDlg.h"
  6. #include "UIThread.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #endif
  10. threadInfo Info; 
  11. UINT ThreadFunc(LPVOID lpParam);
  12. // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
  13. class CAboutDlg : public CDialog
  14. {
  15. public:
  16. CAboutDlg();
  17. // 对话框数据
  18. enum { IDD = IDD_ABOUTBOX };
  19. protected:
  20. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
  21. // 实现
  22. protected:
  23. DECLARE_MESSAGE_MAP()
  24. };
  25. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  26. {
  27. }
  28. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  29. {
  30. CDialog::DoDataExchange(pDX);
  31. }
  32. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  33. END_MESSAGE_MAP()
  34. // CMTDlg 对话框
  35. CMTDlg::CMTDlg(CWnd* pParent /*=NULL*/)
  36. : CDialog(CMTDlg::IDD, pParent)
  37. , m_nMilliSecond(0)
  38. {
  39. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  40. }
  41. void CMTDlg::DoDataExchange(CDataExchange* pDX)
  42. {
  43. CDialog::DoDataExchange(pDX);
  44. DDX_Text(pDX, IDC_MILLISECOND, m_nMilliSecond);
  45. DDX_Control(pDX, IDC_PROGRESS1, m_ctrlProgress);
  46. }
  47. BEGIN_MESSAGE_MAP(CMTDlg, CDialog)
  48. ON_WM_SYSCOMMAND()
  49. ON_WM_PAINT()
  50. ON_WM_QUERYDRAGICON()
  51. //}}AFX_MSG_MAP
  52. ON_BN_CLICKED(IDC_START, &CMTDlg::OnBnClickedStart)
  53. ON_BN_CLICKED(IDC_BUTTON2, &CMTDlg::OnBnClickedButton2)
  54. END_MESSAGE_MAP()
  55. // CMTDlg 消息处理程序
  56. BOOL CMTDlg::OnInitDialog()
  57. {
  58. CDialog::OnInitDialog();
  59. // 将“关于...”菜单项添加到系统菜单中。
  60. // IDM_ABOUTBOX 必须在系统命令范围内。
  61. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  62. ASSERT(IDM_ABOUTBOX < 0xF000);
  63. CMenu* pSysMenu = GetSystemMenu(FALSE);
  64. if (pSysMenu != NULL)
  65. {
  66. CString strAboutMenu;
  67. strAboutMenu.LoadString(IDS_ABOUTBOX);
  68. if (!strAboutMenu.IsEmpty())
  69. {
  70. pSysMenu->AppendMenu(MF_SEPARATOR);
  71. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  72. }
  73. }
  74. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  75. //  执行此操作
  76. SetIcon(m_hIcon, TRUE); // 设置大图标
  77. SetIcon(m_hIcon, FALSE); // 设置小图标
  78. // TODO: 在此添加额外的初始化代码
  79. m_ctrlProgress.SetRange(0,99);
  80. m_nMilliSecond=10;
  81. UpdateData(FALSE);
  82. return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
  83. }
  84. void CMTDlg::OnSysCommand(UINT nID, LPARAM lParam)
  85. {
  86. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  87. {
  88. CAboutDlg dlgAbout;
  89. dlgAbout.DoModal();
  90. }
  91. else
  92. {
  93. CDialog::OnSysCommand(nID, lParam);
  94. }
  95. }
  96. // 如果向对话框添加最小化按钮,则需要下面的代码
  97. //  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
  98. //  这将由框架自动完成。
  99. void CMTDlg::OnPaint()
  100. {
  101. if (IsIconic())
  102. {
  103. CPaintDC dc(this); // 用于绘制的设备上下文
  104. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  105. // 使图标在工作区矩形中居中
  106. int cxIcon = GetSystemMetrics(SM_CXICON);
  107. int cyIcon = GetSystemMetrics(SM_CYICON);
  108. CRect rect;
  109. GetClientRect(&rect);
  110. int x = (rect.Width() - cxIcon + 1) / 2;
  111. int y = (rect.Height() - cyIcon + 1) / 2;
  112. // 绘制图标
  113. dc.DrawIcon(x, y, m_hIcon);
  114. }
  115. else
  116. {
  117. CDialog::OnPaint();
  118. }
  119. }
  120. //当用户拖动最小化窗口时系统调用此函数取得光标
  121. //显示。
  122. HCURSOR CMTDlg::OnQueryDragIcon()
  123. {
  124. return static_cast<HCURSOR>(m_hIcon);
  125. }
  126. void CMTDlg::OnBnClickedStart()
  127. {
  128. // TODO: 在此添加控件通知处理程序代码
  129. UpdateData(TRUE);
  130. Info.nMilliSecond=m_nMilliSecond;
  131. Info.pctrlProgress=&m_ctrlProgress;
  132. pThread=AfxBeginThread(ThreadFunc,
  133. &Info);
  134. }
  135. UINT ThreadFunc(LPVOID lpParam)
  136. {
  137. threadInfo* pInfo=(threadInfo*)lpParam;
  138. for(int i=0;i<100;i++)
  139. {
  140. int nTemp=pInfo->nMilliSecond;
  141. pInfo->pctrlProgress->SetPos(i);
  142. Sleep(nTemp);
  143. }
  144. return 0;
  145. }
  146. void CMTDlg::OnBnClickedButton2()
  147. {
  148. // TODO: 在此添加控件通知处理程序代码
  149. CUIThread* pThread=new CUIThread();
  150. pThread->CreateThread();
  151. }