当前位置: 技术问答>linux和unix
有高手能帮我解释一下这段代码的意图吗?谢谢!
来源: 互联网 发布时间:2015-11-11
本文导语: /* Options... */ menuitem = gtk_menu_item_new_with_mnemonic ("_Options..."); gtk_widget_show (menuitem); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); g_signal_connect (G_OBJECT (menuitem), "activat...
/* Options... */
menuitem = gtk_menu_item_new_with_mnemonic ("_Options...");
gtk_widget_show (menuitem);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
g_signal_connect (G_OBJECT (menuitem), "activate",
G_CALLBACK (menu_callback), (void *)0x205);
这就是一个普通的菜单选项,调用了menu_callback这个回调函数,注意传递的这个参数(void *)0x205 在menu_callback函数中进行了如下处理:
static void menu_callback (GtkMenuItem *menuitem, gpointer user_data)
{
int id = (int)user_data;
if (((id & 0xF00) == 0x000) && ((id & 0x0FF) 0x000))
{
//此处代码省略
}
switch (id)
{
case 0x205:
option_window (); break;
}
}
为什么要用0x205作为参数呢,还有回调函数里面为什么用这些特定的值进行比较呢?代码我能看懂,但不明白作者什么意图,有高手能帮解释一下吗,万分感谢!!!
还有为什么要进行这种位运算呢,直接用整数来比较不行吗?小弟是菜鸟,不吝赐教!
menuitem = gtk_menu_item_new_with_mnemonic ("_Options...");
gtk_widget_show (menuitem);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
g_signal_connect (G_OBJECT (menuitem), "activate",
G_CALLBACK (menu_callback), (void *)0x205);
这就是一个普通的菜单选项,调用了menu_callback这个回调函数,注意传递的这个参数(void *)0x205 在menu_callback函数中进行了如下处理:
static void menu_callback (GtkMenuItem *menuitem, gpointer user_data)
{
int id = (int)user_data;
if (((id & 0xF00) == 0x000) && ((id & 0x0FF) 0x000))
{
//此处代码省略
}
switch (id)
{
case 0x205:
option_window (); break;
}
}
为什么要用0x205作为参数呢,还有回调函数里面为什么用这些特定的值进行比较呢?代码我能看懂,但不明白作者什么意图,有高手能帮解释一下吗,万分感谢!!!
还有为什么要进行这种位运算呢,直接用整数来比较不行吗?小弟是菜鸟,不吝赐教!
|
好像也没什么,magic number而已。你用枚举或者宏替换了也可以。
|
这是别人的源代码吗?
一般205这些都应该有宏定义,其实没什么特别的 应该和1,2,3一样只是代表某种含义而已
至于位操作,一般来说说肯定这个数字有组合之意,
我想这些最好看他提供的文档,里面应该有答案
一般205这些都应该有宏定义,其实没什么特别的 应该和1,2,3一样只是代表某种含义而已
至于位操作,一般来说说肯定这个数字有组合之意,
我想这些最好看他提供的文档,里面应该有答案