//总是在最顶部
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"
谢谢!
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"
谢谢!
获取窗口的属性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);
}
The requested 32-bit value indicates success. Zero indicates failure. To get extended error information, call GetLastError.
为什么是等于呢?这句话我不能理解!
非常感谢。
不过你说:
if(::GetWindowLong(m_hWnd,GWL_EXSTYLE) & 0x8)
这里的 0x8 是指窗口属性的一种, 即 WS_EX_TOPMOST, 它与下面这一行意思相同:
if(::GetWindowLong(m_hWnd,GWL_EXSTYLE) == 0x8)我明白你的意思,你是说GetWindowLong返回值的第0x8位记录的是WS_EX_TOPMOST属性吧,但是你用“== 0x8"好像不对。至少我试该段代码,是不正确的。谢谢!