"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);
}

解决方案 »

  1.   


        把WS_MINIMIZEBOX各位取反,然后把和style按位与的结果给style。
        style = style &(~(WS_MINIMIZEBOX));
      

  2.   

    这是规定的操作吗?
    我是copy一本书上的程序,还有其他的方法吗?
      

  3.   

    我是说一定要先"非"一下 然后在"与"吗?要去掉先前的style,“非”一下应该可以了啊!!?干嘛还要一个与呢?
    &操作就是一点很明确,如下:
      a&0=0;
      a&1=a;
      

  4.   

    cs.style &= ~WS_SYSMENU; 
    等价于
    cs.style = cs.style & (~WS_SYSMENU);
      

  5.   

    ~非
    &位与cs.style = cs.style & (~WS_SYSMENU);
      

  6.   

    试试style ^= WS_MINIMIZEBOX
      

  7.   

    楼上的几位说的大概都不错。dark_zy兄的style ^= WS_MINIMIZEBOX 比较有意思,呵呵,有的就没有了,没有的就加上。不过我觉得还是不够清楚,楼主之所以这样问,我想大概是对C的位运算不是很熟悉或者忘记了吧。在Windows里面,定义窗口风格为一个DWORD,里面的不同的位代表不同的意思。就拿楼主说的最小化框为例,WS_MINIMIZEBOIX = 0x00020000,写成二进制就是
    00000000 00000010 00000000 00000000 ,而在窗口属性中,里面为1的一位正好就是表示窗口是否具有最小化按钮的。如果该位是1,就表示窗口具有最小化按钮,否则就没有。这样我们如果要给一个窗口添加上最小化按钮,只需 把已有的属性和 WS_MINIMIZEBOX或一下,那个位就是1了,而其他的位都没有变化,也就是其他属性都没有改变,只是添加了一个最小化按钮。反过来想,如果你要去掉最小化按钮,必须要把那一位变成0,什么样的运算可以把一个位变成0呢,显然必须是与0。但是要保持其他的位不变,其他位与的必须是1。这样,我们就需要一个只有表示是否有最小化按钮的位是0,其他位都是1的DWORD数值,呵呵,正好就是WS_MINIMIZEBOX取反之后的值。
      

  8.   

    to blueice12(blueice12):
       解释很详细啊!谢谢
        “WS_MINIMIZEBOIX = 0x00020000”  这个数据是怎么知道的,在msdn上的解释只是:       
         WS_MINIMIZEBOX   Creates a window that has a Minimize button.      如果WS_MINIMIZEBOIX = 0x00020000成立  我就彻底明白!
          不然还有问题啊!