我是重新确定窗口中控件的大小和位置,所以,遍历了一个窗口的所有控件。
以前也做过,成功了,但是今天做的时候,出现了遍历不到所有的控件的情况。
窗口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;
}
}
以前也做过,成功了,但是今天做的时候,出现了遍历不到所有的控件的情况。
窗口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;
}
}
非常感谢。成功了。这是为什么呢?为什么会这样呢?
hWnd = ::GetWindow( hWndFirst, GW_HWNDNEXT ); 中,
hWndFirst不是老是第一个子控件吗?为什么都可以遍历?