gtk +를 c와 함께 사용하고 있습니다. 나는 메뉴 막대를 만들고 지금 몇몇 단추를 가진 테이블을 붙이고 싶다. 모든 필수적인 API 루틴을 작성했지만, 내가 직면 한 문제는 메뉴 막대를 처음 작성하면 테이블이 창에 렌더링되지 않고 테이블의 첫 번째 메뉴 막대가 그 위치에 표시되지 않는다는 것입니다. 왜. 여기에 코드가 있습니다GTK가 모든 사용자 인터페이스를 렌더링하지 않습니다.
/* Button Boxes
*
* The Button Box widgets are used to arrange buttons with padding.
*/
#include <gtk/gtk.h>
GtkWidget *window,*button,*container,*menubar,*fileM,*menu,*vbox,*aboutM,*quitM,*bdrM;
GtkWidget *image,*table,*Fileframe,*framecnt;
bool status=false;
void aboutDialog()
{
GtkWidget *box;
box=gtk_message_dialog_new(GTK_WINDOW(window),GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,"EXAMPLE");;
gtk_dialog_run(GTK_DIALOG(box));
gtk_widget_destroy(box);
}
void Warning_quit()
{
GtkWidget *box;
box=gtk_message_dialog_new(GTK_WINDOW(window),GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_WARNING,GTK_BUTTONS_YES_NO,"Sure want to quit..");
gtk_dialog_run(GTK_DIALOG(box));
gtk_widget_destroy(box);
gtk_main_quit();
}
void toggle_Border()
{
if(status==false)
{
gtk_window_set_decorated(GTK_WINDOW(window),true);
gtk_menu_item_set_label(GTK_MENU_ITEM(bdrM),"fix");
status=true;
}
else if(status==true)
{
gtk_window_set_decorated(GTK_WINDOW(window),false);
gtk_menu_item_set_label(GTK_MENU_ITEM(bdrM),"move");
status=false;
}
}
void initDecoration()
{
vbox=gtk_vbox_new(false,0);
menubar=gtk_menu_bar_new();
fileM=gtk_menu_item_new_with_label("file");
aboutM=gtk_menu_item_new_with_label("about");
quitM=gtk_menu_item_new_with_label("quit");
bdrM=gtk_menu_item_new_with_label("move");
menu=gtk_menu_new();
////////////////////////
gtk_container_add(GTK_CONTAINER(window),vbox);//attach vbox with window..
gtk_menu_shell_append(GTK_MENU_SHELL(menubar),fileM);//attach menu into menubar
gtk_menu_item_set_submenu(GTK_MENU_ITEM(fileM),menu);
gtk_menu_shell_append(GTK_MENU_SHELL(menu),aboutM);
gtk_menu_shell_append(GTK_MENU_SHELL(menubar),bdrM);
gtk_menu_shell_append(GTK_MENU_SHELL(menu),quitM);//attach quit menu with menu..
gtk_box_pack_start(GTK_BOX(vbox),menubar,0,0,1);//attach menubar with vbox//
//attach signal intrrupt for menus..
g_signal_connect(G_OBJECT(aboutM),"activate",G_CALLBACK(aboutDialog),0);//signal for about menu..
g_signal_connect(G_OBJECT(quitM),"activate",G_CALLBACK(Warning_quit),0);//signal for quit menu..
g_signal_connect(G_OBJECT(bdrM),"activate",G_CALLBACK(toggle_Border),0);
}
void initTable()
{
GtkWidget *button;
gtk_container_add(GTK_CONTAINER(window),table); //table attached to main window..
button=gtk_button_new_with_label("button");
table=gtk_table_new(4,4,true); //table created..
gtk_table_attach_defaults(GTK_TABLE(table),button,0,1,0,1); //attaching frame container to table cell..
}
int main(int argc, char *argv[])
{
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 250, 200);
//setup menubar;
initDecoration();
initTable();
g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),0);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
인수를 복용하지 않는 기능은'(무효)가'C에서, 괄호의 빈 쌍에 추천 일이 아니다 용도. – unwind
당신이 내 코드를 실행 해 .. –
@ ShivanshuRaj 나는 그것을 실행 해요. true, false 및 bool을 정의해야만 그렇지 않으면 컴파일되지 않습니다. 달성하고자하는 것은 무엇입니까? –