"style &= ~(WS_MINIMIZEBOX);"
能解释一下吗? & ~ ??//使最小化按钮无效
void CMainFrame::OnDisableMinbox()
{
//获得窗口风格
LONG style = ::GetWindowLong(m_hWnd,GWL_STYLE); MessageBox("%d",m_hWnd);
//设置新的风格
style &= ~(WS_MINIMIZEBOX);
::SetWindowLong(m_hWnd,GWL_STYLE,style); //重化窗口边框
CRect rc;
GetWindowRect(&rc);
::SetWindowPos(m_hWnd,HWND_NOTOPMOST,rc.left,rc.top,rc.Width(),rc.Height(),SWP_DRAWFRAME);
}
能解释一下吗? & ~ ??//使最小化按钮无效
void CMainFrame::OnDisableMinbox()
{
//获得窗口风格
LONG style = ::GetWindowLong(m_hWnd,GWL_STYLE); MessageBox("%d",m_hWnd);
//设置新的风格
style &= ~(WS_MINIMIZEBOX);
::SetWindowLong(m_hWnd,GWL_STYLE,style); //重化窗口边框
CRect rc;
GetWindowRect(&rc);
::SetWindowPos(m_hWnd,HWND_NOTOPMOST,rc.left,rc.top,rc.Width(),rc.Height(),SWP_DRAWFRAME);
}
把WS_MINIMIZEBOX各位取反,然后把和style按位与的结果给style。
style = style &(~(WS_MINIMIZEBOX));
我是copy一本书上的程序,还有其他的方法吗?
&操作就是一点很明确,如下:
a&0=0;
a&1=a;
等价于
cs.style = cs.style & (~WS_SYSMENU);
&位与cs.style = cs.style & (~WS_SYSMENU);
00000000 00000010 00000000 00000000 ,而在窗口属性中,里面为1的一位正好就是表示窗口是否具有最小化按钮的。如果该位是1,就表示窗口具有最小化按钮,否则就没有。这样我们如果要给一个窗口添加上最小化按钮,只需 把已有的属性和 WS_MINIMIZEBOX或一下,那个位就是1了,而其他的位都没有变化,也就是其他属性都没有改变,只是添加了一个最小化按钮。反过来想,如果你要去掉最小化按钮,必须要把那一位变成0,什么样的运算可以把一个位变成0呢,显然必须是与0。但是要保持其他的位不变,其他位与的必须是1。这样,我们就需要一个只有表示是否有最小化按钮的位是0,其他位都是1的DWORD数值,呵呵,正好就是WS_MINIMIZEBOX取反之后的值。
解释很详细啊!谢谢
“WS_MINIMIZEBOIX = 0x00020000” 这个数据是怎么知道的,在msdn上的解释只是:
WS_MINIMIZEBOX Creates a window that has a Minimize button. 如果WS_MINIMIZEBOIX = 0x00020000成立 我就彻底明白!
不然还有问题啊!