ASSERT(IDM_ABOUTBOX < 0xF000);
我想知道以上这两段是什么意思?
这个函数是怎么一回事,还有的就是,为什么一个字符串和一个十六进制的数"<"这样呢?还有就是(IDM_ABOUTBOX & 0xFFF0)这样是什么意思?不太明白。
BOOL CQQLimitDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
}
10 个解决方案
#1
1.IDM_ABOUTBOX是字符串吗?你在它上面点一下鼠标右键选择转到定义看一下。
2.// IDM_ABOUTBOX must be in the system command range.
这行注释能看明白吗?就是说下在的两行代码是检测IDM_ABOUTBOX这个常量的值是否系统命令范围之内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); //要是16的倍数
ASSERT(IDM_ABOUTBOX < 0xF000); //要小于0xF000
这两个条件符合就在系统命令范围之内了。
2.// IDM_ABOUTBOX must be in the system command range.
这行注释能看明白吗?就是说下在的两行代码是检测IDM_ABOUTBOX这个常量的值是否系统命令范围之内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); //要是16的倍数
ASSERT(IDM_ABOUTBOX < 0xF000); //要小于0xF000
这两个条件符合就在系统命令范围之内了。
#2
谢谢这位朋友热情回复!
&0xFFF0 这样是什么意思?这个数值是多少?就是这里我觉得怪怪的。
&0xFFF0 这样是什么意思?这个数值是多少?就是这里我觉得怪怪的。
#3
& “按位与”运算符
0&0 = 0;
0&1 = 0;
1&1 = 1;
3 = 00000011(二进制)
5 = 00000101(二进制)
3&5 = 0000001(二进制)
0xFFF0 (16进制)=
1111111111110000(二进制)
0&0 = 0;
0&1 = 0;
1&1 = 1;
3 = 00000011(二进制)
5 = 00000101(二进制)
3&5 = 0000001(二进制)
0xFFF0 (16进制)=
1111111111110000(二进制)
#4
这一句
(IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX
中的&0xFFF0是把IDM_ABOUTBOX这个值的低4位清0,高12位不变。
整句就是要检测一下IDM_ABOUTBOX的低4位是否为0,也就是说看它是否是16的倍数。
如果它的低4位不是0,那么
(IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX
返回就是假,ASSERT将通不过。所以这句就是要求IDM_ABOUTBOX是16的倍数。
(IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX
中的&0xFFF0是把IDM_ABOUTBOX这个值的低4位清0,高12位不变。
整句就是要检测一下IDM_ABOUTBOX的低4位是否为0,也就是说看它是否是16的倍数。
如果它的低4位不是0,那么
(IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX
返回就是假,ASSERT将通不过。所以这句就是要求IDM_ABOUTBOX是16的倍数。
#5
汗~~1分。
#6
两位真够朋友!!!
多谢你!!!
一分,我是穷人,那有分呢。多谢了!
多谢你!!!
一分,我是穷人,那有分呢。多谢了!
#7
谢谢
#8
敢问楼主是在研究范例 ime.sln 吗
#9
这个怎么和我下载的那个源码一模一样,我们老师留的作业看都看不懂,真是郁闷死了,都看不懂,可怎么写啊
#10
学到了一些东西
#1
1.IDM_ABOUTBOX是字符串吗?你在它上面点一下鼠标右键选择转到定义看一下。
2.// IDM_ABOUTBOX must be in the system command range.
这行注释能看明白吗?就是说下在的两行代码是检测IDM_ABOUTBOX这个常量的值是否系统命令范围之内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); //要是16的倍数
ASSERT(IDM_ABOUTBOX < 0xF000); //要小于0xF000
这两个条件符合就在系统命令范围之内了。
2.// IDM_ABOUTBOX must be in the system command range.
这行注释能看明白吗?就是说下在的两行代码是检测IDM_ABOUTBOX这个常量的值是否系统命令范围之内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); //要是16的倍数
ASSERT(IDM_ABOUTBOX < 0xF000); //要小于0xF000
这两个条件符合就在系统命令范围之内了。
#2
谢谢这位朋友热情回复!
&0xFFF0 这样是什么意思?这个数值是多少?就是这里我觉得怪怪的。
&0xFFF0 这样是什么意思?这个数值是多少?就是这里我觉得怪怪的。
#3
& “按位与”运算符
0&0 = 0;
0&1 = 0;
1&1 = 1;
3 = 00000011(二进制)
5 = 00000101(二进制)
3&5 = 0000001(二进制)
0xFFF0 (16进制)=
1111111111110000(二进制)
0&0 = 0;
0&1 = 0;
1&1 = 1;
3 = 00000011(二进制)
5 = 00000101(二进制)
3&5 = 0000001(二进制)
0xFFF0 (16进制)=
1111111111110000(二进制)
#4
这一句
(IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX
中的&0xFFF0是把IDM_ABOUTBOX这个值的低4位清0,高12位不变。
整句就是要检测一下IDM_ABOUTBOX的低4位是否为0,也就是说看它是否是16的倍数。
如果它的低4位不是0,那么
(IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX
返回就是假,ASSERT将通不过。所以这句就是要求IDM_ABOUTBOX是16的倍数。
(IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX
中的&0xFFF0是把IDM_ABOUTBOX这个值的低4位清0,高12位不变。
整句就是要检测一下IDM_ABOUTBOX的低4位是否为0,也就是说看它是否是16的倍数。
如果它的低4位不是0,那么
(IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX
返回就是假,ASSERT将通不过。所以这句就是要求IDM_ABOUTBOX是16的倍数。
#5
汗~~1分。
#6
两位真够朋友!!!
多谢你!!!
一分,我是穷人,那有分呢。多谢了!
多谢你!!!
一分,我是穷人,那有分呢。多谢了!
#7
谢谢
#8
敢问楼主是在研究范例 ime.sln 吗
#9
这个怎么和我下载的那个源码一模一样,我们老师留的作业看都看不懂,真是郁闷死了,都看不懂,可怎么写啊
#10
学到了一些东西