一个按钮,一个编辑框
1.点一下按钮,编辑框中的数字不断增加显示,再点一下,停止;
2.鼠标在按钮范围内则数字不断增加显示,范围外就停止;这些问题好象很简单,但我做了两天也没出来,是个菜鸟,在这里求教一下;
1.这些应该有个循环,但我跳不出死循环,是不是应该用线程来写,在线程里用什么来作为判断条件结束呢?
2.在按钮范围内判断是不是用WM_MOUNSEMOVE?以下是我写的关于鼠标移动处理的列子,可就是不能响应,问题在哪里啊?
void CTestDlg::OnMouseMove(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
CRect   rc;   
GetDlgItem(IDC_BUTTON1)->GetWindowRect(&rc);  
ScreenToClient(&rc);
if(rc.PtInRect(point))   
{GetDlgItem(IDC_EDIT1)->SetWindowText(chn1);}   
CDialog::OnMouseMove(nFlags, point);
}问题貌似很多......谢谢大家了

解决方案 »

  1.   

    加一个定时器,对于第一个问题
    1.如果用户第一次点击按钮,就SetTimer设置定时器,第二次点击时,用KillTimer消毁定时器。
    在处理OnTimer消息时,增加文本框字符串的内容
    第二个问题:
    2.开一个线程,将按钮的句柄作为参数传给线程函数。线程函数中增加一个BOOL判断鼠标是否在按钮上,每隔一秒钟监视鼠标的位置,当鼠标位于按钮中时,开始增加文本框字符串长度,鼠标离开按钮时,将BOOL值设置为FALSE,停止对按钮文本赋值
      

  2.   

    应该能实现,说下大概思路吧 首先定义一个BOOL类型的标志位 
    BOOL m_bFlag;在OnMouseMove
    CRect  rc;  
    GetDlgItem(IDC_BUTTON1)->GetWindowRect(&rc);if(point.x<rc.left||point.x>rc.right||point.y<rc.top||point.y>rc.bottom) //此处判断按钮是否在BUTTON内
       m_bFlag = FALSE;
    else
       m_bFlag = TRUE;在ONBUTTON里
    if(TRUE == m_bFlag)
      SetTimer(1,100,NULL);在OnTimer里实现 数的++显示就OK
      

  3.   

    对于你的问题 如果肯定问题是在这里面的话 void CTestDlg::OnMouseMove(UINT nFlags, CPoint point) 

    // TODO: Add your message handler code here and/or call default 
    CRect  rc;  
    GetDlgItem(IDC_BUTTON1)->GetWindowRect(&rc);  ////
    ScreenToClient(&rc);                          ////
    if(rc.PtInRect(point))  
    {GetDlgItem(IDC_EDIT1)->SetWindowText(chn1);}  
    CDialog::OnMouseMove(nFlags, point); 
      

  4.   

    不好意思刚还没打完就提交了,就在我////的那两行 
    你可以打断点跟踪下 看rc里面的值是不是你想要的
    如果不是你把ScreenToClient那行删除在试试