void CPingPlusDlg::OnPingButton() 
{
IconState = 0;

DisplayBlankLine ();

icmpTracing = FALSE;
icmpPingTTL = PingSocket.icmpMaxHops; PingSocket.icmpCurSeq = 0;
SendPing ( );

}
这是一个ping命令的按钮。如何按下之后开始循环ping。再按一次,停止循环。求教

解决方案 »

  1.   

    很简单,当第一次按下的时候,获取按钮的文本,将按钮的文本改为stop
    在次按下按钮式将按钮的文本改为Start,依靠文本的不同来执行响应的语句
    if(getdlgitemText()=="start")
    {  
      开始循环ping
      setDlgItemText("stop")
    }
    else if(getdlgitemText()=="stop"))
    {
    停止循环
    setDlgItemText("start");
    }
    函数的使用格式不对,查查吧,函数是存在的
      

  2.   

    BOOL m_Bwhile;//成员变量,记录是否继续循环void MyDlg::开始按钮_被点击()
    {
      if(m_Bwhile)return;//如果已经在循环,则返回
      m_Bwhile=true;//设置变量为真,允许循环
      while(m_Bwhile)
      {
         //循环体内做你需要的事情
          doEvents();//记得一定要加上消息处理函数,否则就按不了停止按钮,截面也卡死了
      }
    }
    void MyDlg::停止按钮_被点击()
    {
      m_Bwhile=false;//改变成员变量,让循环停止
    }
    void MyDlg::doEvents()
    {
    MSG msg;
    while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    {
    DispatchMessage(&msg);
    TranslateMessage(&msg);

    }
      

  3.   

    2楼是2个按钮的情况,单独一个按钮:BOOL m_Bwhile;//成员变量,记录是否继续循环void MyDlg::按钮_被点击()
    {
      if(m_Bwhile)//如果已经在循环,则停止
      {
        m_Bwhile=false;//改变成员变量,让循环停止
        return;//返回,不继续往下执行
      }
      m_Bwhile=true;//设置变量为真,允许循环
      while(m_Bwhile)
      {
         //循环体内做你需要的事情
          doEvents();//记得一定要加上消息处理函数,否则就按不了停止按钮,截面也卡死了
      }
    }void MyDlg::doEvents()
    {
    MSG msg;
    while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    {
    DispatchMessage(&msg);
    TranslateMessage(&msg);

    }
      

  4.   

    还是这样吧,走OnTimer,这个最简单
    开启按钮:
    {
      SetTimer(100, 1000, NULL);  // 100为timer id,1000为1s
    }
    关闭按钮
    {
       KillTimer(100);
    }
    响应界面的OnTimer(UINT nIDEvent)
    {
      if (nIDEvent == 100)
      {
          // do ping
      } 
    }以上伪码,但是应该够详细了,结贴吧~