不明白style &= ~(WS_MINIMIZEBOX);是什么意思?

三炮 2004-12-10 11:17:13
"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);
}
...全文
572 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
三炮 2004-12-15
  • 打赏
  • 举报
回复
to blueice12(blueice12):
解释很详细啊!谢谢
“WS_MINIMIZEBOIX = 0x00020000” 这个数据是怎么知道的,在msdn上的解释只是:
WS_MINIMIZEBOX Creates a window that has a Minimize button.

如果WS_MINIMIZEBOIX = 0x00020000成立 我就彻底明白!
不然还有问题啊!
blueice12 2004-12-13
  • 打赏
  • 举报
回复
楼上的几位说的大概都不错。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取反之后的值。
dark_zy 2004-12-13
  • 打赏
  • 举报
回复
试试style ^= WS_MINIMIZEBOX
一条晚起的虫 2004-12-12
  • 打赏
  • 举报
回复
~非
&位与

cs.style = cs.style & (~WS_SYSMENU);
qrlvls 2004-12-12
  • 打赏
  • 举报
回复
cs.style &= ~WS_SYSMENU;
等价于
cs.style = cs.style & (~WS_SYSMENU);
HunterForPig 2004-12-12
  • 打赏
  • 举报
回复
“~"非运算符
去掉次属性!
“|"或运算符
加此属性
三炮 2004-12-12
  • 打赏
  • 举报
回复
我是说一定要先"非"一下 然后在"与"吗?

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

CodeProject-Jerry 2004-12-12
  • 打赏
  • 举报
回复
cs.style &=~WS_SYSMENU;
三炮 2004-12-12
  • 打赏
  • 举报
回复
这是规定的操作吗?
我是copy一本书上的程序,还有其他的方法吗?
DentistryDoctor 2004-12-11
  • 打赏
  • 举报
回复
去掉窗口的最小人按钮。
NowCan 2004-12-10
  • 打赏
  • 举报
回复
就是。
三炮 2004-12-10
  • 打赏
  • 举报
回复
是“与”和“非”的意思吗?
oyljerry 2004-12-10
  • 打赏
  • 举报
回复
去反,去掉某个属性
7zkeeper 2004-12-10
  • 打赏
  • 举报
回复
去掉窗口的某属性
三炮 2004-12-10
  • 打赏
  • 举报
回复

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

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧