我是重新确定窗口中控件的大小和位置,所以,遍历了一个窗口的所有控件。
以前也做过,成功了,但是今天做的时候,出现了遍历不到所有的控件的情况。
窗口CWnd* pWnd,这里面有14个子控件。
在Debug状态下调试,发现下面的代码,在第一和第二个控件中做循环了。
总是得到第一和第二控件的HWND,而且是一直循环.
所以我后来有了FirstWnd.来比较,发现只有头两个控件执行正确,其他都没执行。
所以,这里的问题是不是可以所,子控件的窗口链表出现循环了??循环的代码如下:HWND hWnd = ::GetWindow( pWnd->m_hWnd, GW_CHILD );
HWND hFirstWnd = ::GetWindow( hWnd, GW_HWNDFIRST );
while ( hWnd )   
{   
     int nID = ::GetDlgCtrlID( hWnd ); //这个就是ID   

     if ( pWnd->GetDlgItem( nID ) != NULL )
     {
          /*处理控件大小和位置。*/
     } 

hWnd = ::GetWindow( hWnd, GW_HWNDNEXT );
if ( hWnd == hFirstWnd )
{
          break;
}
}

解决方案 »

  1.   

    hWnd   =   ::GetWindow(   hWndFirst,   GW_HWNDNEXT   ); 
      

  2.   

    回Mackz:
    非常感谢。成功了。这是为什么呢?为什么会这样呢?
    hWnd       =       ::GetWindow(       hWndFirst,       GW_HWNDNEXT       );  中,
    hWndFirst不是老是第一个子控件吗?为什么都可以遍历?