ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:19.36KB ,
资源ID:10019805      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10019805.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MFC 定时器的使用.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

MFC 定时器的使用.docx

1、MFC 定时器的使用MFC 定时器的使用点击连接(按住Ctrl点击) 最近遇到关于定时器的使用问题,在网上也搜索了很多相关资料。其中都是讲了使用SetTimer 和 KillTimer具体的介绍大家可以看看这个连接:里面讲的比较详细的。 但是由于自己不是很了解怎样使用,就是说在那里添加SetTimer() 和 KillTimer() 所以尝试也是失败了好几次。经过摸索终于成功了,现在和大家分享一下,相互学习。我的是基于对话框的工程,于是在OnInitDialog()里面添加定时器BOOL CMonitorProcessDlg:OnInitDialog() SetTimer(1,3000,NUL

2、L); /第一个参数可以自己设置是定时器的ID,第二个参数是间隔时间(毫秒为单位的)当然别忘记添加WM_TIMER消息 OnTimer()然后我定义了2个全局变量int nPress = 0; /用于联合判断“启动”按钮的按下状态BOOL bStatic = FALSE; /用于判断程序是否在执行,以便KillTimer()例如按下按钮之后,显示“”void CMonitorProcessDlg:OnBnClickedButtonStart() MessageBox( );nPress+; bStatic = TRUE;在OnTimer()函数里面添加代码。void CMonitorProce

3、ssDlg:OnTimer(UINT_PTR nIDEvent)/ TODO: 在此添加消息处理程序代码和/或调用默认值if (nIDEvent =1 & nPress =1)OnBnClickedButtonStart();nPress -;if (bStatic = TRUE)KillTimer(1);CDialog:OnTimer(nIDEvent);上面只是一个简单的演示,希望对大家有帮助吧。下面的是我工程里面的代码:(是用来监测其他程序的,如果其他程序没有执行则重启该程序。)/ MonitorProcessDlg.cpp : 实现文件/#include stdafx.h#includ

4、e MonitorProcess.h#include MonitorProcessDlg.h#include Psapi.h#pragma comment(lib,psapi.lib)#ifdef _DEBUG#define new DEBUG_NEW#endif/注册消息WM_SHOWTASK#define WM_SHOWTASK (WM_USER +1)/ 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogpublic: CAboutDlg();/ 对话框数据 enum IDD = IDD_ABOUTBOX ; prot

5、ected: virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV 支持/ 实现protected: DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)void CAboutDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()/ CMonitorProcess

6、Dlg 对话框CMonitorProcessDlg:CMonitorProcessDlg(CWnd* pParent /*=NULL*/) : CDialog(CMonitorProcessDlg:IDD, pParent) , m_strPathName(_T() , m_strProcessName(_T() m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CMonitorProcessDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX); DDX_Cont

7、rol(pDX, IDC_LIST_PATHNAME, m_ctrlPathName); DDX_CBString(pDX, IDC_LIST_PATHNAME, m_strPathName); DDX_Control(pDX, IDC_LIST_PROCESSNAME, m_ctrlProcessName); DDX_CBString(pDX, IDC_LIST_PROCESSNAME, m_strProcessName);BEGIN_MESSAGE_MAP(CMonitorProcessDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM

8、_QUERYDRAGICON() /AFX_MSG_MAP ON_BN_CLICKED(ID_BUTTON_START, &CMonitorProcessDlg:OnBnClickedButtonStart) ON_WM_HOTKEY() ON_MESSAGE(WM_SHOWTASK,OnShowTask) ON_CBN_SELCHANGE(IDC_LIST_PATHNAME, &CMonitorProcessDlg:OnCbnSelchangeListPathname) ON_CBN_SELCHANGE(IDC_LIST_PROCESSNAME, &CMonitorProcessDlg:On

9、CbnSelchangeListProcessname) ON_WM_NCPAINT() ON_WM_TIMER()END_MESSAGE_MAP()/ CMonitorProcessDlg 消息处理程序BOOL CMonitorProcessDlg:OnInitDialog() CDialog:OnInitDialog(); / 将“关于.”菜单项添加到系统菜单中。 / IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARA

10、TOR); pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); / 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 / 执行此操作 SetIcon(m_hIcon, TRUE); / 设置大图标 SetIcon(m_hIcon, FALSE); / 设置小图标 / TODO: 在此添加额外的初始化代码 :RegisterHotKey(m_hWnd,918,MOD_CONTROL,S); /添加定时器 SetTimer(1,3000,NULL); CStdioFile myFile; CString oneLine

11、; if(!myFile.Open(path.txt),CFile:modeRead | CFile:typeText) AfxMessageBox(_T(打开文件错误!); return FALSE; else /do nothing while (myFile.ReadString(oneLine) m_ctrlPathName.AddString(oneLine); myFile.Close(); if(!myFile.Open(process.txt),CFile:modeRead | CFile:typeText) AfxMessageBox(_T(打开文件错误!); return

12、FALSE; else /do nothing while (myFile.ReadString(oneLine) m_ctrlProcessName.AddString(oneLine); myFile.Close(); return TRUE; / 除非将焦点设置到控件,否则返回 TRUEvoid CMonitorProcessDlg:OnSysCommand(UINT nID, LPARAM lParam) if (nID & 0xFFF0) = IDM_ABOUTBOX) CAboutDlg dlgAbout; dlgAbout.DoModal(); else CDialog:OnSy

13、sCommand(nID, lParam); / 如果向对话框添加最小化按钮,则需要下面的代码/ 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,/ 这将由框架自动完成。void CMonitorProcessDlg:OnPaint() if (IsIconic() CPaintDC dc(this); / 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc(), 0); / 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int

14、 cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; / 绘制图标 dc.DrawIcon(x, y, m_hIcon); else CDialog:OnPaint(); /当用户拖动最小化窗口时系统调用此函数取得光标/显示。HCURSOR CMonitorProcessDlg:OnQueryDragIcon() return static

15、_cast(m_hIcon);/int KillProcess( LPCSTR pszWindowTitle) HANDLE hProcessHandle; ULONG nProcessID; HWND TheWindow; TheWindow = :FindWindow( NULL, pszWindowTitle ); :GetWindowThreadProcessId( TheWindow, &nProcessID ); hProcessHandle =:OpenProcess( PROCESS_TERMINATE,FALSE, nProcessID ); return :Terminat

16、eProcess( hProcessHandle, 4 );/启动int nPress = 0; /用于联合判断“启动”按钮的按下状态BOOL bStatic = FALSE; /用于判断程序是否在执行,以便KillTimervoid CMonitorProcessDlg:OnBnClickedButtonStart() / TODO: 在此添加控件通知处理程序代码 /读取命令行参数 LPTSTR lpstr=AfxGetApp()-m_lpCmdLine; this-ShowWindow(SW_HIDE); /读取路径以及文件名 CString strCmdLine; strCmdLine

17、= m_strPathName; /读取程序名 CString processName; processName = m_strProcessName; CString Warning( 正在运行中! 或者 输入有误!); int iStartIndex=1; int iEndIndex=0; CString cCurrentDir=; CString strTempName=; iEndIndex=strCmdLine.Find(-,iStartIndex); cCurrentDir=strCmdLine.Mid(iStartIndex,iEndIndex-iStartIndex-1); i

18、StartIndex=iEndIndex+1; strTempName=strCmdLine.Mid(iStartIndex,strCmdLine.GetLength()-iStartIndex); /BOOL Temp = IsAbort(char*)(LPCTSTR)strTempName); LPCSTR pName(MonitorProcess); if (strlen(strCmdLine) = 0 & strlen(processName) = 0) AfxMessageBox(未输入有效信息!); KillProcess(pName); return; else if (strl

19、en(strCmdLine) = 0 ) AfxMessageBox(未输入有效的路径名!); KillProcess(pName); return; else if (strlen(processName) = 0) AfxMessageBox(未输入程序名!); KillProcess(pName); return; else /do nothing CWnd *pWnd = CWnd:FindWindow(NULL,(LPCSTR)processName); if (pWnd = NULL) /如果中断 重新启动 ShellExecute(NULL, open, strTempName

20、, , cCurrentDir, SW_SHOWNORMAL); /KillProcess(pName); else Warning.Insert(0,processName); AfxMessageBox(Warning); bStatic = TRUE; /KillProcess(pName); nPress+; return;/快捷键int i = 0;/用于联合判断热键的按下状态void CMonitorProcessDlg:OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2) / TODO: 在此添加消息处理程序代码和/或调用默认值 if

21、(i=0 & nHotKeyId = 918) i+; this-ShowWindow(SW_SHOW);/显示主窗口 DeleteTray(); else if (i=1 & nHotKeyId = 918) i-; ToTray(); /OnShowTask(IDR_MAINFRAME,lParam); CDialog:OnHotKey(nHotKeyId, nKey1, nKey2);/自定义消息LRESULT CMonitorProcessDlg:OnShowTask(WPARAM wParam,LPARAM lParam) if(wParam!=IDR_MAINFRAME) /图标I

22、D return 1; switch(lParam) case WM_RBUTTONUP:/右键起来时弹出快捷菜单,这里只有一个“退出” LPPOINT lpoint=new tagPOINT; :GetCursorPos(lpoint);/得到鼠标位置 CMenu menu; menu.CreatePopupMenu();/声明一个弹出式菜单 /增加菜单项“退出”,点击则发送消息WM_DESTROY给主窗口将程序结束。 menu.AppendMenu(MF_STRING,WM_DESTROY,退 出); /确定弹出式菜单的位置 menu.TrackPopupMenu(TPM_LEFTALIG

23、N,lpoint-x,lpoint-y,this); /资源回收 HMENU hmenu=menu.Detach(); menu.DestroyMenu(); delete lpoint; DeleteTray(); break; case WM_LBUTTONDBLCLK:/双击左键的处理 this-ShowWindow(SW_SHOW);/显示主窗口 DeleteTray(); break; default: break; return 0;/托盘绘制图标void CMonitorProcessDlg:ToTray(void) NOTIFYICONDATA nid; nid.cbSize=

24、(DWORD)sizeof(NOTIFYICONDATA); nid.hWnd=this- m_hWnd; nid.uID=IDR_MAINFRAME; nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; nid.uCallbackMessage=WM_SHOWTASK;/自定义的消息名称 nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME); strcpy(nid.szTip, MonitorProcess);/信息提示条 Shell_NotifyIcon(NIM_AD

25、D,&nid);/在托盘区添加图标 ShowWindow(SW_HIDE);/隐藏主窗口 /删除托盘图标void CMonitorProcessDlg:DeleteTray(void) NOTIFYICONDATA nid; nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); nid.hWnd=this-m_hWnd; nid.uID=IDR_MAINFRAME; nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; nid.uCallbackMessage=WM_SHOWTASK;/自定义的消息名称 nid.hIcon=LoadI

26、con(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME); strcpy(nid.szTip,MonitorProcess); /信息提示条 Shell_NotifyIcon(NIM_DELETE,&nid); /在托盘区删除图标void CMonitorProcessDlg:OnCbnSelchangeListPathname() / TODO: 在此添加控件通知处理程序代码 int j=0; j = m_ctrlPathName.GetCurSel(); m_ctrlPathName.GetLBText(j,m_strPathNam

27、e);void CMonitorProcessDlg:OnCbnSelchangeListProcessname() / TODO: 在此添加控件通知处理程序代码 int j=0; j = m_ctrlProcessName.GetCurSel(); m_ctrlProcessName.GetLBText(j,m_strProcessName);void CMonitorProcessDlg:OnNcPaint() / TODO: 在此处添加消息处理程序代码 / 不为绘图消息调用 CDialog:OnNcPaint() static int i = 2; if(i0) i-; ShowWindow(SW_HIDE); else CDialog:OnNcPaint(); void CMonitorProcessDlg:OnTimer(UINT_PTR nIDEvent)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1