我做了一个循环 循环里 模拟多个按钮的点击 我用sendmessage 和postmessage 都不行 都是执行完第一个按钮后就没反应了
为什么呢 我知道sendmessage是需要应答后才继续 postmessage是不用等应答就继续,可是我改成postmessage也是不行啊但是当我在两个按钮执行中间 放个AfxMessageBox("随便一句"); 随便输出一句 我手动点确定后就回继续走下去 为什么呢?
代码如下
while(!m_pRecordset->adoEOF)  
    { ::SendMessage(m_btn_goto.m_hWnd, BM_CLICK,0,0);
     AfxMessageBox("执行KAISHI!");  //加上一个提示就能继续执行了 ,不加的话就停了
      ::SendMessage(m_btn_loginin.m_hWnd, BM_CLICK,0,0);
AfxMessageBox("执行第2步!");   //加上一个提示就能继续执行了 ,不加的话就停了     ::SendMessage(m_btn_loginout.m_hWnd, BM_CLICK,0,0);
AfxMessageBox("执行第3步!");   //加上一个提示就能继续执行了 ,不加的话就停了
     m_pRecordset->MoveNext();  
    } 都改成postMessage也不行。
到底要怎么样才可以一直循环啊 不用加那个提示语句。

解决方案 »

  1.   

    响应BM_CLICK这个消息的函数呢?
      

  2.   

    BN_CLICKED通知是通过WM_COMMAND消息传递的,WM_COMMAND消息是发送给按钮的父窗口的
    HWND hButton = xxx; // 这个按钮的HWND窗口句柄
    UINT nId = GetDlgCtrlID(hButton);
    PostMessage(GetParent(hButton), WM_COMMAND, MAKEWPARAM(nId, BN_CLICKED), (LPARAM)hButton);
      

  3.   

    有没有处理‘BN_CLICKED notification message ’?
      

  4.   

    你的这个是函数是在消息循坏里面吗?如果是的话, while 循环阻断了消息循环。
      

  5.   

    我是MFC啊 你这些出好多错。。
      

  6.   

    没干什么啊 我就是做了一个浏览器 
    OnBtnGoto  函数里面是 浏览器转向某个登陆网页
    m_btn_loginin 是填写登陆 并提交
    m_btn_logout是退出登陆
      

  7.   

    我是这个意思MessageBox有个特点就是里面有消息循环,能够分发消息
    如果你的浏览器的工作需要消息循环才能进行,则MessageBox起到了这个作用你试一下把MessageBox换成
    {
    MSG msg;
    while(PeekMessage(&msg,0,0,0,PM_REMOVE));
    }
      

  8.   

    等待也不行 我用Sleep也不行的
    可是谁能解释下 为什么我再两个sendmessage中间加个afxmessagebox他就能继续向下执行了
    如果不加 他就停止了。。
      

  9.   

    我已经吧while取消了 现在没有while循环
      

  10.   

    你把messagebox换成
    {
    MSG msg;
    while(PeekMessage(&msg,0,0,0,PM_REMOVE));
    }试试
      

  11.   

    {
    MSG msg;
    while(PeekMessage(&msg,0,0,0,PM_REMOVE))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    }
      

  12.   

    {
    MSG msg;
    while(PeekMessage(&msg,0,0,0,PM_REMOVE))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    }
      

  13.   

    ::SendMessage(m_btn_goto.m_hWnd, BM_CLICK,0,0);
    ----------
    直接调用按钮消息函数OnBtnGoto就可以了,不用再发消息这么麻烦,又不是多线程。
      

  14.   

    线程给自己的窗口SendMessage就是直接调用窗口过程
      

  15.   

    既然能执行到AfxMessageBox,说明第一个SendMessage完成了(可能成功,可能失败),
    检查一下OnBtnGoto函数、OnBtnloginin、OnBtnlogout干了什么,可能造成死锁。
      

  16.   

    我好像找着毛病的地方了 但是还不知道怎么修改我第一个函数是浏览器导向到某个页面
    第二个函数是将数据填写到页面上我将2个函数合起来了也是有问题 说明不是sendmessage的问题
    百度到 有人说 是 m_IE.Navigate 之后put_value 有冲突
    需要判断Navigate 是否完成 
    百度到的代码
    while   (   !m_WebSink.IsNavigateComplete()   ) 

          Sleep(10); 
    } 可是我编译出错 
    这个m_websink是浏览器的句柄吗还是浏览器的ID可是都没有IsNavigateComplete()   这个函数啊
    请问是什么?我看是不是这个问题
      

  17.   

    我测试了一下三个按钮 其中两个绘图 另一个模拟消息 是可以的啊你的按钮响应函数中做了什么void CTestDlg::OnBnClickedButton1()
    {
    // TODO: 在此添加控件通知处理程序代码 MessageBox(L"ff"); CWnd* pWnd = GetDlgItem(IDC_STATIC_MY1); CDC* pDC = pWnd->GetDC(); CRect rc;
    pWnd->GetClientRect(&rc); CBrush b;
    b.CreateSolidBrush(RGB(255,0,255));
    pDC->FillRect(rc, &b);

    }void CTestDlg::OnBnClickedButton2()
    {
    // TODO: 在此添加控件通知处理程序代码 CWnd* pWnd = GetDlgItem(IDC_STATIC_MY); CDC* pDC = pWnd->GetDC(); CRect rc;
    pWnd->GetClientRect(&rc); CBrush b;
    b.CreateSolidBrush(RGB(255,255,0));
    pDC->FillRect(rc, &b);
    }void CTestDlg::OnBnClickedButton3()
    {
    // TODO: 在此添加控件通知处理程序代码

    ::SendMessage(m_btn1.m_hWnd, BM_CLICK,0,0); ::SendMessage(m_btn2.m_hWnd, BM_CLICK,0,0);

    }
      

  18.   

    谁知道啊 怎么 判断浏览器 IsNavigateComplete?
      

  19.   

    现在我发现m_IE.Navigate后get_all冲突
    说明 还没有m_IE.Navigate结束 所以不能get_all可是 为什么 afxmessagebox后就不冲突了