//总是在最顶部
void CPLAYERDlg::On1() 
{ HWND hWnd = NULL;
if(::GetWindowLong(m_hWnd,GWL_EXSTYLE) & 0x8)
{
hWnd = HWND_NOTOPMOST;
}
else
{
hWnd = HWND_TOPMOST;
}
::SetWindowPos(m_hWnd, hWnd, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
}上面代码是设置窗体是否在最顶部。该代码用GetWindowLong判断窗体是否在最顶部的这句代码不是很明白,请解释一下。尤其是后面的 "&0x8"
谢谢!

解决方案 »

  1.   

    ::GetWindowLong(m_hWnd,GWL_EXSTYLE) 
    获取窗口的属性if(::GetWindowLong(m_hWnd,GWL_EXSTYLE) & 0x8)
    这里的 0x8 是指窗口属性的一种, 即 WS_EX_TOPMOST, 它与下面这一行意思相同:
    if(::GetWindowLong(m_hWnd,GWL_EXSTYLE) == 0x8)void CPLAYERDlg::On1() 
    { HWND hWnd = NULL;
    if(::GetWindowLong(m_hWnd,GWL_EXSTYLE) & 0x8)
    {
    // 将窗口置于列表顶部,并位于任何最顶部窗口的后面 
    hWnd = HWND_NOTOPMOST;
    }
    else
    {
    // 将窗口置于列表顶部,并位于任何最顶部窗口的前面 
    hWnd = HWND_TOPMOST;
    }
    // 设置窗口的属性(HWND_NOTOPMOST 或者 HWND_TOPMOST)并且窗口大小不变
    ::SetWindowPos(m_hWnd, hWnd, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
    }
      

  2.   

    This function retrieves information about the specified window. GetWindowLong also retrieves the 32-bit (long) value at the specified offset into the extra window memory of a window. Return Values
    The requested 32-bit value indicates success. Zero indicates failure. To get extended error information, call GetLastError. 
      

  3.   

    if(::GetWindowLong(m_hWnd,GWL_EXSTYLE) == 0x8)??
    为什么是等于呢?这句话我不能理解!
      

  4.   

    sgnaw(李逍遥) 
    非常感谢。
    不过你说:
      if(::GetWindowLong(m_hWnd,GWL_EXSTYLE) & 0x8)
      这里的 0x8 是指窗口属性的一种, 即 WS_EX_TOPMOST, 它与下面这一行意思相同:
      if(::GetWindowLong(m_hWnd,GWL_EXSTYLE) == 0x8)我明白你的意思,你是说GetWindowLong返回值的第0x8位记录的是WS_EX_TOPMOST属性吧,但是你用“== 0x8"好像不对。至少我试该段代码,是不正确的。谢谢!