请问如何利用GetWindow函数,把某个Dialog上面的所有Button全部Disable掉?
注意只能用GetWindow,因为是在WinCE上面,不支持EnumWindow之类的函数。
同时这个Dialog上面还有其他的控件,但是我只想Disable那些Button。我在这个Dialog的某个函数中尝试了如下代码,但是似乎不起作用,而且进入了死循环。
就是说GetWindow(this->m_hWnd, GW_HWNDNEXT)一直有返回,但是又都不是Button,
我断点过,一直返回的是CDialog,为什么? pWnd = CWnd::FromHandle(::GetWindow(this->m_hWnd, GW_CHILD));
GetClassName(pWnd->m_hWnd, strClassName.GetBufferSetLength(102), 100);

while (NULL != pWnd)
{
  if (strClassName.Compare(TEXT("Button")) == 0) {
  pWnd->EnableWindow(FALSE);
  }
  pWnd = CWnd::FromHandle(::GetWindow(this->m_hWnd, GW_HWNDNEXT));
  GetClassName(pWnd->m_hWnd, strClassName.GetBufferSetLength(102), 100);
}

解决方案 »

  1.   

    pWnd = CWnd::FromHandle(::GetWindow(this->m_hWnd, GW_HWNDNEXT));
    =>
     pWnd = CWnd::FromHandle(::GetWindow(pWnd->m_hWnd, GW_HWNDNEXT));
      

  2.   

    CWnd *pChild;
    pChild = this->GetWindow(GW_CHILD);
    while (pChild != NULL) {
    if (pChild->IsKindOf(CButton)) {
    pChild->EnableWindow(false);
    }
    pChild = pChild->GetWindow(GW_HWNDNEXT);
    }
      

  3.   

    Mark一下,先睡了,明天再仔细看看。
      

  4.   

    CWnd *pChild;
    pChild = this->GetWindow(GW_CHILD);
    TCHAR   szClass[128]={0};
    while (pChild) 
    {
    GetClassName(pChild->m_hWnd, szClass, sizeof(szClass));     //得到子窗口的类名
    if(lstrcmp(szClass, "Button") == 0)              //判断该子窗口是否是编辑框
    {
    pChild->EnableWindow(0);
    }
    pChild = pChild->GetWindow(GW_HWNDNEXT);
    }
      

  5.   

    我认为
    lyl_rabbit(lyl_rabbit)
    的方法比较好.