- 論壇徽章:
- 0
|
我在程序中編寫了這樣一個函數(shù):
void on_ok_button_clicked(GtkButton *button,gpointer data)
{
GtkWidget *window;
gint sd;
struct sockaddr_in csockaddr;
messagetype message;
gchar pwag[16],receive[10];
gchar labelstring[100];
/*******填充message結(jié)構(gòu)體********/
message.cmd=1;
message.fromid=-1;
message.toid=-1;
strcpy(message.name,gtk_entry_get_text(GTK_ENTRY(register_name_entry)));
strcpy(message.pw,gtk_entry_get_text(GTK_ENTRY(register_pw_entry)));
strcpy(pwag,gtk_entry_get_text(GTK_ENTRY(register_pwag_entry)));
strcpy(message.data,"" ;
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(register_male_radio)))
message.sex=1;
else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(register_female_radio)))
message.sex=0;
if(strcmp(message.name,"" !=0&&strcmp(message.pw,pwag)==0&&strcmp(message.pw,"" !=0)
{
gtk_widget_destroy(register_window);
window=create_register_result_window();
gtk_widget_show_all(window);
/*********創(chuàng)建socket并connect***************/
sd=socket(AF_INET,SOCK_STREAM,0);
csockaddr.sin_family=AF_INET;
csockaddr.sin_port=htons(SERVERPORT);
csockaddr.sin_addr.s_addr=inet_addr(SERVERIP);
if(connect(sd,(struct sockaddr *)&csockaddr,sizeof(csockaddr))<0)
{
create_dialog(2,"連接服務(wù)器出錯!" ;
sprintf(labelstring,"申請失敗,請返回重試!" ;
gtk_label_set_markup(GTK_LABEL(register_result_label),labelstring);
gtk_widget_set_sensitive(register_result_button,TRUE);
close(sd);
}
else
{
write(sd,&message,sizeof(messagetype));
read(sd,receive,10);
sprintf(labelstring,"恭喜您,申請成功!\n請記好您的mc號碼:<span foreground=\"red\">;%s</span>;",receive);
gtk_label_set_markup(GTK_LABEL(register_result_label),labelstring);
gtk_widget_set_sensitive(register_result_button,TRUE);
close(sd);
}
}
else
{
create_dialog(2,"請檢查您的輸入是否正確!" ;
}
return;
}
當(dāng)程序運(yùn)行到"gtk_widget_show_all(window)"這一行時,并沒有立即顯示窗口,而是等到這個函數(shù)運(yùn)行完了后,窗口才顯示出來,這是為什么呀?
怎么樣才能讓這個窗口立即顯示出來??
新手入門,請大蝦指教一二,謝了。 |
|