企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# SetTimer 和 OnTimer 关于KillTimer函数的使用。在用SetTimer创建一个定时器后,如果不再需要这个定时器,可以直接使用KillTimer函数将他关闭。KillTimer函数只有一个参数对应于要关闭定时器的ID,也就是在使用SetTimer函数创建定时器时的第一个参数。因为我的需求是只需要在登陆后提醒一次就可以,所以在调用OnTimer函数后直接将这个定时器关掉,实现提醒一次的功能。 BEGIN_MESSAGE_MAP(Server_Info, CDialog) ON_WM_TIMER() END_MESSAGE_MAP() BOOL Server_Info::OnInitDialog() { CDialog::OnInitDialog(); SetTimer(1,500,NULL);//500ms定时消息,调用OnTimer。完成首次登陆路径设置的通知任务 return TRUE; } // Server_Info 消息处理程序 void Server_Info::OnTimer(UINT_PTR nIDEvent) { KillTimer(1); if(TRUE != isFirstLogin) { MessageBox(TEXT("首次登陆需要选择测试报告路径!"), TEXT("通知"), MB_ICONINFORMATION); } CDialog::OnTimer(nIDEvent); } # 面试题 SendMessage和PostMessage这两个函数消息区别是: 1. 返回值类型不同:两个函数的4个参数的意义是一样的,只有返回值类型不同(其实从数据上看他们是一个32位的书,只是意义不一样),LPESULT表示的是消息被处理后的返回值,BOOL表示的是消息是不是传递成功 2. PostMessage是异步的,SendMessage是同步的,PostMessage只把消息放入窗口消息队列中,不管消息被处理后的结果就返回,而SendMessage等待消息处理完了之后才返回 3. 如果在同一个线程内,常常使用SendMessage发送消息时,速度快并能得到返回的消息处理结果。在不同线程或者进程之间,一般使用PostMessage发送消息,把消息先放入目标窗口的消息队列中,然后又布标窗口通过消息循环自行派发处理 HWND hwnd = FindWindow(_T("Notepad"),NULL); SendMessage(hwnd, WM_CLOSE,0,0); return TRUE; post 不等待(把消息放在队列中)返回值是bool值 send 即时处理 返回值是LRESULT (整数)