看起来在GTK中你持有一个对象的引用,例如像GtkEntry
,但是用一个指向GtkWidget
的指针来保存它。例如
GtkWidget* pointer = gtk_entry_new();
然后,当你想要做一些像设置该条目的文本时,你必须调用一个函数并用该指针做一些事情。
gtk_entry_set_text(GTK_ENTRY(pointer), "hello");
几个问题:
- 什么是“GTK_ENTRY()”的东西?是函数调用还是类型转换?
- 为什么不用(GtkEntry *)指针?
- 甚至为什么这样做?为什么不在创建新条目时返回GtkEntry指针?
GTK_ENTRY是一个宏,表现得像一个函数。它将其参数转换为GtkEntry*
,但它可能 - 取决于像NDEBUG这样的宏 - 做额外的检查以验证提供的参数可能被强制转换。
它在所有CAPITAL中,因为这是宏中C的一般约定。
函数gtk_entry_new
返回GtkWidget*
而不是GtkEntry*
GTK中的更多函数在GtkWidget*
上运行,而C语言不提供继承,因此转换不能自动进行。