-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbirthday_choose.c
More file actions
123 lines (119 loc) · 3.77 KB
/
birthday_choose.c
File metadata and controls
123 lines (119 loc) · 3.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include "coims.h"
void birthday_choose(GtkWidget *widget, Item *parents)
{
/* dialog控件 */
GtkWidget *dialog;
GtkWidget *message;
/* 日期 */
GtkWidget *birthday_cal;
int int_year = 0,
int_month = 0,
int_day = 0;
char str[50] = {0},
str_year[10] = {0},
str_month[10] = {0},
str_day[10] = {0};
/* 时间相关 */
time_t timep;
struct tm *p;
int now_year = 0,
now_month = 0,
now_day = 0;
/* 年龄 */
int int_age = 0;
char str_age[10] = {0};
/* 临时变量 */
int i = 0,
j = 0;
/* 创建对话框 */
dialog = gtk_dialog_new_with_buttons(
"选择生日",
NULL, GTK_DIALOG_MODAL,
"确定", GTK_RESPONSE_ACCEPT,
"取消", GTK_RESPONSE_REJECT,
NULL
);
gtk_window_set_position(
GTK_WINDOW(dialog),
GTK_WIN_POS_CENTER
);
gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
/* 创建日历选择框 */
birthday_cal = gtk_calendar_new();
gtk_box_pack_start(
GTK_BOX(GTK_DIALOG(dialog) -> vbox),
birthday_cal,
TRUE,
TRUE,
0
);
/* 记住及时显示 */
gtk_widget_show(birthday_cal);
/* 处理事件 */
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
gtk_calendar_get_date(
GTK_CALENDAR(birthday_cal),
&int_year,
&int_month,
&int_day
);
int_month = int_month + 1; /* 因为获取的月份比实际月份小1 */
/* 获取当前时间 */
time(&timep);
p = gmtime(&timep);
now_year = 1900 + p -> tm_year;
now_month = 1 + p -> tm_mon;
now_day = p -> tm_mday;
/* 错误消息提示框 */
message = gtk_message_dialog_new(
NULL,
GTK_DIALOG_MODAL,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"生日不可能超过今天"
);
if (
(int_year > now_year) ||
(int_year == now_year && int_month > now_month) ||
(int_year == now_year && int_month == now_month && int_day > now_day)
) {
gtk_widget_destroy(dialog);
gtk_dialog_run(GTK_DIALOG(message));
gtk_widget_destroy(message);
} else {
sprintf(str_year, "%d", int_year);
sprintf(str_month, "%d", int_month);
sprintf(str_day, "%d", int_day);
/* 决定采用“年月日”的显示方式,所以对字符串的处理要求高些 */
strcat(str, str_year);
strcat(str, "年");
strcat(str, str_month);
strcat(str, "月");
strcat(str, str_day);
strcat(str, "日");
gtk_button_set_label(
GTK_BUTTON((*parents).birthday_button),
str
);
int_age = now_year - int_year;
/* 如果生日的月份小于当前月份,则没过生日 */
if (int_month > now_month) {
int_age -= 1;
}
/* 如果月份相同,但日期未到,则也没过生日 */
if (int_month == now_month && int_day > now_day) {
int_age -= 1;
}
sprintf(str_age, "%d", int_age);
gtk_entry_set_text(
GTK_ENTRY((*parents).age_entry),
str_age
);
gtk_widget_show((*parents).birthday_button);
gtk_widget_show((*parents).age_entry);
gtk_widget_destroy(dialog);
}
} else {
gtk_widget_destroy(dialog);
}
}