我做了一个循环 循环里 模拟多个按钮的点击 我用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也不行。
到底要怎么样才可以一直循环啊 不用加那个提示语句。
为什么呢 我知道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也不行。
到底要怎么样才可以一直循环啊 不用加那个提示语句。
HWND hButton = xxx; // 这个按钮的HWND窗口句柄
UINT nId = GetDlgCtrlID(hButton);
PostMessage(GetParent(hButton), WM_COMMAND, MAKEWPARAM(nId, BN_CLICKED), (LPARAM)hButton);
OnBtnGoto 函数里面是 浏览器转向某个登陆网页
m_btn_loginin 是填写登陆 并提交
m_btn_logout是退出登陆
如果你的浏览器的工作需要消息循环才能进行,则MessageBox起到了这个作用你试一下把MessageBox换成
{
MSG msg;
while(PeekMessage(&msg,0,0,0,PM_REMOVE));
}
可是谁能解释下 为什么我再两个sendmessage中间加个afxmessagebox他就能继续向下执行了
如果不加 他就停止了。。
{
MSG msg;
while(PeekMessage(&msg,0,0,0,PM_REMOVE));
}试试
MSG msg;
while(PeekMessage(&msg,0,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
MSG msg;
while(PeekMessage(&msg,0,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
----------
直接调用按钮消息函数OnBtnGoto就可以了,不用再发消息这么麻烦,又不是多线程。
检查一下OnBtnGoto函数、OnBtnloginin、OnBtnlogout干了什么,可能造成死锁。
第二个函数是将数据填写到页面上我将2个函数合起来了也是有问题 说明不是sendmessage的问题
百度到 有人说 是 m_IE.Navigate 之后put_value 有冲突
需要判断Navigate 是否完成
百度到的代码
while ( !m_WebSink.IsNavigateComplete() )
{
Sleep(10);
} 可是我编译出错
这个m_websink是浏览器的句柄吗还是浏览器的ID可是都没有IsNavigateComplete() 这个函数啊
请问是什么?我看是不是这个问题
{
// 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);
}
说明 还没有m_IE.Navigate结束 所以不能get_all可是 为什么 afxmessagebox后就不冲突了