課程設(shè)計---gtk圖形界面編程-計算器的實現(xiàn)_第1頁
已閱讀1頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  目錄</b></p><p><b>  1引言2</b></p><p><b>  1.1課題背景2</b></p><p>  1.2課程設(shè)計目的2</p><p>  1.3課程設(shè)計任務(wù)3</p><p>&

2、lt;b>  2系統(tǒng)需求分析3</b></p><p>  2.1功能需求分析3</p><p>  2.2 性能需求分析3</p><p><b>  3總體設(shè)計4</b></p><p>  3.1功能模塊分析與設(shè)計4</p><p>  3.2 系統(tǒng)功能模塊設(shè)計

3、4</p><p><b>  4系統(tǒng)功能測試9</b></p><p>  4.1一個Helloworld窗口9</p><p>  4.2計算器功能測試10</p><p>  5 課程設(shè)計總結(jié)14</p><p><b>  參考文獻15</b></p&

4、gt;<p><b>  1引言</b></p><p><b>  1.1課題背景</b></p><p>  簡單的計算器是一種能實現(xiàn)加、減、乘、除等簡單運算的工具。要實現(xiàn)計算功能,可以用C語言的知識和GTK+編寫程序來解決此問題。該計算器大大的降低了數(shù)字計算的難度及提高了計算的準確度和精確度。該計算器使用非常簡單和方便,對廣大

5、中小學生的學習有巨大幫助作用,也對在職人員的工作有點幫助作用。</p><p>  GTK+2.0 是自由軟件,并且是GNU 工程的一部分[1]。GTK+2.0 的許可協(xié)議LGPL,允許任何開發(fā)者使用(包括那些開發(fā)中的專利軟件)且不收任何費用。GTK+2.0 是當今惟一百分之百零付費的工業(yè)級的圖形界面開發(fā)工具。本設(shè)計就以 GTK+2.0 為開發(fā)工具,全面展示在Linux 平臺上開發(fā)應用程序的各個側(cè)面,也展現(xiàn)在Li

6、nux 平臺上開發(fā)圖形界面應用程序。</p><p>  計算機信息管理技術(shù)的應用,除了能在相當大的程度上代替人工作業(yè),從而減少人員工作量,減輕工作負擔,減少工作中因人為原因而產(chǎn)生的錯誤從而避免不必要的損失外,更重要的是能建立準確暢通、簡便的信息流通渠道,為工作提供所需要的準確、及時的信息以幫助做出正確而及時的選擇與決定,從而給采用這門技術(shù)的單位帶來了巨大的可見或不可見的利益與效益。</p><

7、;p><b>  1.2課程設(shè)計目的</b></p><p>  現(xiàn)在大多數(shù)的計算器都具備+,-,*,/等四則運算的功能。用計算器來算數(shù)顯然比用腦袋或用紙筆計算要來得方便。講究高效的我們勢必要用到傻瓜設(shè)備(就是拿到手看看說明就知道怎樣使用的東東)。當我們看到一個很長很大的表達式需要得到結(jié)果時,我們就會想到計算器,這樣,本程序就是為解決大家基本四則運算的問題而產(chǎn)生的。只要你讀懂說明,那么

8、你所輸入的表達式就一定能得到正確的結(jié)果。</p><p>  本文主要基于對表達式的分析并利用C進行編程進而實現(xiàn)算法的。與Java和C#等其他高級語言相比,C在程序運行效率、內(nèi)存使用的可控性和編程的靈活性上均具有較大的優(yōu)勢[2],與匯編語言和C語言更具有面向?qū)ο蟮膬?yōu)點,因此本文采用Ubuntu Linux操作系統(tǒng)以及GTK+2.0,以達到算法快速有效地執(zhí)行。</p><p><b&g

9、t;  1.3課程設(shè)計任務(wù)</b></p><p>  本課程設(shè)計內(nèi)容是在Linux平臺下開發(fā)一個簡單的計算器程序,采用GCC編程工具和GTK+2.0工具包等軟件為開發(fā)工具以及C語言知識實現(xiàn)圖形化的計算器程序。該程序能夠?qū)崿F(xiàn)的對整數(shù)的加減乘除和小數(shù)的加減乘除。</p><p><b>  2系統(tǒng)需求分析</b></p><p>&l

10、t;b>  2.1功能需求分析</b></p><p>  整數(shù)之間的加減乘除運算,如:1+2、6-5、24/12、90*2等。</p><p>  小數(shù)之間的加減乘除運算,如:1.2+2.3、3.1-1.2、4.2*1.9、66.1/2.1等。</p><p>  小數(shù)與整數(shù)之間的加減乘除運算,如:1.4+4、2.4*6等。</p>

11、<p>  2.2 性能需求分析</p><p><b>  (1)硬件環(huán)境</b></p><p>  處理器:奔騰4或以上。</p><p>  內(nèi)存:128MB或以上。</p><p>  硬盤空間:20M以上。</p><p><b>  (2)軟件環(huán)境</b&

12、gt;</p><p>  操作系統(tǒng):Linux Kernel 2.6.20以上版本。</p><p>  工具軟件:GTK+2.0工具包、GCC編程工具。</p><p><b>  技術(shù)需求</b></p><p>  GCC,即GNU Compiler Collection,GNU編譯器套裝,是一套由 GNU 開發(fā)

13、的編程語言編譯器。它是一套以GPL 及 LGPL 許可證所發(fā)行的自由軟件,也是 GNU計劃的關(guān)鍵部分,亦是自由的類Unix及蘋果電腦 Mac OS X 操作系統(tǒng)的標準編譯器??商幚鞢、C++、 Fortran、Pascal、Objective-C、Java, 以及 Ada與其他語言[3]。</p><p>  GTK+是一種圖形用戶界面工具包。也就是說,它是一個庫(或者,實際上是若干個密切相關(guān)的庫的集合),它支持

14、創(chuàng)建基于GUI 的應用程序[4]??梢园袵TK+ 想像成一個工具包,從這個工具包中可以找到用來創(chuàng)建GUI 的許多已經(jīng)準備好的構(gòu)造塊。使用 GTK+ 這樣的庫比起編寫自己的 GUI 代碼來有多個優(yōu)勢。例如,它可以顯著節(jié)約開發(fā)時間,讓開發(fā)人員把精力集中在項目真正重要和真正獨特的地方,而不必重復公共的功能。對于用戶來說,這意味著 他們使用的應用程序之間具有更好的一致性:工具包能在哪使用,應用程序就能跟到哪里。就像使用LEGO一樣,所有的人都使

15、用同一兼容尺寸這一事實,意味著設(shè)計可以在使用庫的人之間共享,不論他們在哪里使用它。</p><p><b>  3總體設(shè)計</b></p><p>  3.1功能模塊分析與設(shè)計</p><p>  本計算器主要是完成整數(shù)之間、小數(shù)之間、整數(shù)和小數(shù)之間的加減乘除的運算,使用GTK+完成界面布局。</p><p>  根據(jù)需

16、求分析的結(jié)果,總體結(jié)構(gòu)如圖3-1所示。</p><p>  圖3-1 總體結(jié)構(gòu)圖</p><p>  3.2 系統(tǒng)功能模塊設(shè)計</p><p>  本課程設(shè)計所實現(xiàn)的計算器可以分為以下幾個模塊實現(xiàn):</p><p><b>  圖形界面設(shè)計</b></p><p><b>  數(shù)字鍵處理

17、模塊</b></p><p><b>  小數(shù)點處理模塊</b></p><p>  加減乘除運算按鍵處理模塊</p><p>  結(jié)果按鍵,即等號處理模塊</p><p><b>  清除模塊</b></p><p>  3.2.1 圖形界面設(shè)計</p&g

18、t;<p>  此程序采用一個縱向盒狀容器和多個橫向盒狀容器來設(shè)計界面。另外在單行輸入控件的閱讀方向?qū)傩陨嫌煤瘮?shù)gtk_widget_set_direction 設(shè)定為GTK_TEXT_DIR_RTL,即從右向左,使此控件的數(shù)字顯示更像一個計算器的顯示屏。</p><p> ?。?)主窗體關(guān)鍵代碼:</p><p>  window = gtk_window_new(GTK_

19、WINDOW_TOPLEVEL); //主窗體</p><p>  G_CALLBACK(gtk_main_quit),NULL);</p><p>  gtk_window_set_title(GTK_WINDOW(window),"我的計算器"); //窗體名稱</p><p>  gtk_window_set_position(GTK_

20、WINDOW(window),GTK_WIN_POS_CENTER);</p><p>  gtk_container_set_border_width(GTK_CONTAINER(window),10);</p><p>  vbox = gtk_vbox_new(FALSE,0);</p><p>  gtk_container_add(GTK_CONTAINE

21、R(window),vbox);</p><p>  hbox = gtk_hbox_new(FALSE,0);</p><p>  gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,5);</p><p>  各個按鍵布局的關(guān)鍵代碼:</p><p>  label = gtk_label_

22、new("Calculator"); //標簽名稱</p><p>  gtk_box_pack_start(GTK_BOX(hbox),label,TRUE,TRUE,5);</p><p>  button = gtk_button_new_with_label("C"); //清除按鍵</p><p>  

23、gtk_box_pack_start(GTK_BOX(hbox),button,TRUE,TRUE,5);</p><p>  構(gòu)建一個hbox1容納數(shù)字“1”、“2”、“3”、“+”四個按鍵:</p><p>  hbox1 = gtk_hbox_new(FALSE,0); //hbox1的構(gòu)建</p><p>  gtk_box_pack_start(G

24、TK_BOX(vbox),hbox1,FALSE,FALSE,5);</p><p>  button = gtk_button_new_with_label("3"); //按鍵3</p><p>  gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);</p><p>  G_C

25、ALLBACK(on_num_clicked),NULL);</p><p>  button = gtk_button_new_with_label("2"); //按鍵2</p><p>  gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);</p><p>  G_CALLB

26、ACK(on_num_clicked),NULL);</p><p>  button = gtk_button_new_with_label("1"); //按鍵1</p><p>  gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);</p><p>  類似的構(gòu)建hbox2控

27、件容納“4”、“5”、“6”和“-”四個按鍵,hbox3容納“7”、“8”、“9”和“*”四個按鍵,hbox4容納“0”、“.”、“=”和“/”四個按鍵。</p><p>  而對于hbox1~hbox4,是控件vbox的子類,布局如下:</p><p>  gtk_box_pack_start(GTK_BOX(vbox),hbox1,FALSE,FALSE,5);</p>

28、<p>  gtk_box_pack_start(GTK_BOX(vbox),hbox2,FALSE,FALSE,5);</p><p>  gtk_box_pack_start(GTK_BOX(vbox),hbox3,FALSE,FALSE,5);</p><p>  gtk_box_pack_start(GTK_BOX(vbox),hbox4,FALSE,FALSE,5);&

29、lt;/p><p>  3.2.2數(shù)字鍵處理模塊</p><p>  數(shù)字按鈕 0~9 的功能是向計算器輸入數(shù)字,通過計算和定位,最后顯示出來,所以它們的回調(diào)函數(shù)都是同一個,只不過傳遞的參數(shù)根據(jù)不同的按鈕傳遞不同的數(shù)字,關(guān)鍵代碼如下:</p><p>  void on_num_clicked (GtkButton* button,gpointer data)</

30、p><p>  { //當數(shù)定鍵按下時執(zhí)行</p><p>  const gchar *num;</p><p><b>  gint i;</b></p><p>  if(have_result)</p><p>  clear_all(); //有結(jié)果則全部清除

31、</p><p>  if(count == 6) return; //夠6位數(shù)則不能再輸入數(shù)字</p><p><b>  count++;</b></p><p>  num = gtk_button_get_label(GTK_BUTTON(button)); //取數(shù)</p><p>  i =

32、g_strlcat(number,num,100); //保存</p><p><b>  if(first)</b></p><p>  nn = strtod(number,NULL); //數(shù)一</p><p><b>  else</b></p><p>

33、;  mm = strtod(number,NULL); //數(shù)二</p><p>  gtk_entry_set_text(GTK_ENTRY(entry),number); //顯示</p><p><b>  }</b></p><p>  3.2.3小數(shù)點處理模塊</p><p>  小數(shù)點

34、按鈕的回調(diào)函數(shù)是較特殊的一個。首先小數(shù)點在一個數(shù)中只能出現(xiàn)一次,再按的話則不起作用,小數(shù)點按鈕在點擊后要對所輸入的數(shù)字做一下處理,使之成為浮點數(shù),并且讓后續(xù)數(shù)字也轉(zhuǎn)換為相應的浮點數(shù)字,關(guān)鍵代碼如下:</p><p>  void on_dot_clicked (GtkButton* button,gpointer data)</p><p>  { //當小數(shù)點按下時&

35、lt;/p><p><b>  gint i;</b></p><p>  if(have_result)</p><p>  clear_all(); //全部清除</p><p>  if(have_dot == FALSE) //如果無小數(shù)點則可以</p><p><b&g

36、t;  {</b></p><p>  have_dot = TRUE;</p><p>  i = g_strlcat(number,".",100);</p><p>  gtk_entry_set_text(GTK_ENTRY(entry),number);</p><p>  }//如果有小數(shù)點則不輸

37、出</p><p><b>  }</b></p><p>  3.2.4運算按鍵處理模塊</p><p>  本計算器軟件只有加減乘除4種運算功能,這4個運算按鈕用了同一個回調(diào)函數(shù),根據(jù)傳遞的參數(shù)設(shè)定當前的計算方法。其關(guān)鍵代碼如下:</p><p>  switch(GPOINTER_TO_INT(data))<

38、/p><p><b>  {</b></p><p>  case 1: //當"+"時</p><p><b>  s = 1;</b></p><p>  gtk_entry_set_text(GTK_ENTRY(entry),"");</p

39、><p>  first = FALSE ; count = 0; break;</p><p>  case 2: //當"-"時</p><p><b>  s = 2;</b></p><p>  gtk_entry_set_text(GTK_ENTRY(entry),"");

40、</p><p>  first = FALSE ; count = 0; break;</p><p>  case 3: //當"*"時</p><p><b>  s = 3;</b></p><p>  gtk_entry_set_text(GTK_ENTRY(entry),"&q

41、uot;);</p><p>  first = FALSE ; count = 0; break;</p><p>  case 4: //當"/"時</p><p><b>  s = 4;</b></p><p>  gtk_entry_set_text(GTK_ENTRY(entry),&q

42、uot;");</p><p>  first = FALSE ; count = 0; break;</p><p><b>  }</b></p><p>  3.2.5等號按鍵處理模塊</p><p>  等號按鈕的回調(diào)函數(shù)是根據(jù)當前的計算方法進行相應的運算,并將運算結(jié)果輸出到單行輸出控件中。其關(guān)鍵代碼如

43、下:</p><p>  switch(s) //判斷四則運算的符號</p><p><b>  {</b></p><p>  case 1: //當"+"時</p><p>  numb = nn+mm;</p><p><b>  break

44、;</b></p><p>  case 2: //當"-"時</p><p>  numb = nn-mm;</p><p><b>  break;</b></p><p>  case 3: //當"*"時</p><p>  

45、numb = nn*mm;</p><p><b>  break;</b></p><p>  case 4: //當"/"時</p><p>  numb = nn/mm;</p><p><b>  break;</b></p><p><

46、;b>  }</b></p><p><b>  3.2.6清除模塊</b></p><p>  清除按鈕的功能是清除當前顯示,同時清除所有標記,將標記設(shè)為默認等。關(guān)鍵代碼如下:</p><p>  void clear_all (void)</p><p>  { //清除所有相關(guān)標記<

47、;/p><p><b>  gint i;</b></p><p>  gtk_entry_set_text(GTK_ENTRY(entry),"");</p><p>  nn = 0;//第一個數(shù)清零</p><p>  mm = 0 ;//第二個數(shù)清零</p><p

48、><b>  s = 0;</b></p><p>  count = 0 ;</p><p>  first = TRUE;</p><p>  have_dot = FALSE;//小數(shù)點標記</p><p>  have_result = FALSE;//結(jié)果標記</p><p>

49、;  for(i = 0 ; i < 100 ; i++)</p><p>  number[i] = '\0';</p><p><b>  }</b></p><p><b>  4系統(tǒng)功能測試</b></p><p>  4.1一個Helloworld窗口</p&g

50、t;<p>  本例子是使用GTK+2.0編寫一個helloworld.c的程序,用以顯示一個窗口,并且在這個窗口的標題欄上顯示字符串“Hello,world!”。程序截圖如圖4-1。</p><p>  圖4-1 使用vim編寫helloworld.c</p><p>  運行g(shù)cc -Wall helloworld.c -o helloworld `pkg-config

51、--cflags --libs gtk+-2.0`命令編譯后,執(zhí)行./helloworld出現(xiàn)窗口,如圖4-2所示。</p><p>  圖4-2 Helloworld窗口</p><p>  4.2計算器功能測試</p><p>  (1)計算器主界面,如圖4-3所示。</p><p>  圖4-3 計算器主界面</p>&

52、lt;p>  加法運算演示:55+346=401,如圖4-4、4-5、4-6所示。</p><p><b>  圖4-4輸入55</b></p><p><b>  圖4-5輸入346</b></p><p>  圖4-6 按下等號得出結(jié)果</p><p> ?。?)乘法運算演示:321*22

53、=7062,如圖4-7、4-8、4-9所示。</p><p>  圖4-7 輸入321</p><p><b>  圖4-8 輸入22</b></p><p>  圖4-9 按下等號輸出結(jié)果</p><p> ?。?)除法運算演示:100/3=33.33333,如圖4-10、4-11、4-12所示。</p>

54、<p>  圖4-10 輸入100</p><p><b>  圖4-11 輸入3</b></p><p>  圖4-11 按下等號輸出結(jié)果</p><p><b>  5 課程設(shè)計總結(jié)</b></p><p>  通過兩周周的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計,我順利的完成了Linux平臺下圖形界面——

55、計算器設(shè)計的課程設(shè)計。感覺在這次課程設(shè)計中自己受益匪淺,不僅將以前在課堂上學到的東西從新又鞏固了一遍,并且又有所創(chuàng)新,將數(shù)據(jù)結(jié)構(gòu)的知識與Linux知識相結(jié)合,做出了功能豐富的應用程序,還有就是同時發(fā)現(xiàn)了以前的不足,及時的彌補!</p><p>  在課程設(shè)計中遇見的課題中的很多技術(shù)問題,當然要感謝鄧老師能給予認真的指導,并培養(yǎng)我們獨立自立的能力,讓我們對自學能力有了很高的提高,在各方面,提高了我們的主動積極性。同

56、時也要謝謝同學們的相互幫助,感謝有了這些,我才能很好的順利的完成我的這次課程設(shè)計。</p><p><b>  參考文獻</b></p><p>  [1]宋國偉.《GTK+2.0編程范例》北京:清華大學出版社,2002.11</p><p>  [2]譚誥強.《C程序設(shè)計》北京:清華大學出版社,2004.6</p><p&

57、gt;  [3]Kurt Wall et al.GUN/Linux編程指南(第二版)北京:清華大學出版社,2002.6</p><p>  [4]嚴蔚敏,吳偉民.《數(shù)據(jù)結(jié)構(gòu)》(C語言版) 北京:清華大學出版,2009.4</p><p><b>  源程序清單:</b></p><p>  #include <gtk/gtk.h>&

58、lt;/p><p>  #include <stdlib.h></p><p>  static GtkWidget *entry; //定義單行輸入控件來顯示輸入輸出的數(shù)字</p><p>  gint count = 0 ; //計位</p><p>  gdouble nn = 0 ; //計數(shù)一</p>

59、<p>  gdouble mm = 0 ; //計數(shù)二</p><p>  gint s = 0 ; //算法</p><p>  gboolean first = TRUE; //首次輸入</p><p>  gboolean have_dot = FALSE; //是否有小數(shù)點</p><p>  gboolea

60、n have_result = FALSE; //是否有結(jié)果輸出</p><p>  gchar number[100]; //保存用戶輸入的數(shù)字</p><p>  void clear_all (void)</p><p>  { //清除所有相關(guān)標記</p><p><b>  gint i;</b>

61、;</p><p>  gtk_entry_set_text(GTK_ENTRY(entry),"");</p><p><b>  nn = 0;</b></p><p><b>  mm = 0 ;</b></p><p><b>  s = 0;</b>

62、;</p><p>  count = 0 ;</p><p>  first = TRUE;</p><p>  have_dot = FALSE;</p><p>  have_result = FALSE;</p><p>  for(i = 0 ; i < 100 ; i++)</p>&l

63、t;p>  number[i] = '\0';</p><p><b>  }</b></p><p>  void on_num_clicked (GtkButton* button,gpointer data)</p><p>  { //當數(shù)定鍵按下時執(zhí)行</p><p>  c

64、onst gchar *num;</p><p><b>  gint i;</b></p><p>  if(have_result)</p><p>  clear_all();//有結(jié)果則全部清除</p><p>  if(count == 6) return; //夠6位數(shù)則不能再輸入數(shù)字</p

65、><p><b>  count++;</b></p><p>  num = gtk_button_get_label(GTK_BUTTON(button));//取數(shù)</p><p>  i = g_strlcat(number,num,100);//保存</p><p><b>  if(first)&

66、lt;/b></p><p>  nn = strtod(number,NULL);//數(shù)一</p><p><b>  else</b></p><p>  mm = strtod(number,NULL);//數(shù)二</p><p>  gtk_entry_set_text(GTK_ENTRY(entr

67、y),number);//顯示</p><p><b>  }</b></p><p>  void on_dot_clicked (GtkButton* button,gpointer data)</p><p>  { //當小數(shù)點按下時</p><p><b>  gint i;&l

68、t;/b></p><p>  if(have_result)</p><p>  clear_all();//全部清除</p><p>  if(have_dot == FALSE) //如果無小數(shù)點則可以</p><p><b>  {</b></p><p>  have_dot

69、 = TRUE;</p><p>  i = g_strlcat(number,".",100);</p><p>  gtk_entry_set_text(GTK_ENTRY(entry),number);</p><p>  }//如果有小數(shù)點則不輸出</p><p><b>  }</b><

70、;/p><p>  void on_clear_clicked (GtkButton* button,gpointer data)</p><p><b>  {</b></p><p>  clear_all();//全部清除</p><p><b>  }</b></p>

71、<p>  void on_suan_clicked (GtkButton* button,gpointer data)</p><p>  { //當計算按鈕 +,-,*,/ 按下時</p><p><b>  gint i;</b></p><p>  switch(GPOINTER_TO_INT(dat

72、a))</p><p><b>  {</b></p><p>  case 1: //當"+"時</p><p><b>  s = 1;</b></p><p>  gtk_entry_set_text(GTK_ENTRY(entry),"");&l

73、t;/p><p>  first = FALSE ; count = 0; break;</p><p>  case 2: //當"-"時</p><p><b>  s = 2;</b></p><p>  gtk_entry_set_text(GTK_ENTRY(entry),"&q

74、uot;);</p><p>  first = FALSE ; count = 0; break;</p><p>  case 3: //當"*"時</p><p><b>  s = 3;</b></p><p>  gtk_entry_set_text(GTK_ENTRY(entry),

75、"");</p><p>  first = FALSE ; count = 0; break;</p><p>  case 4: //當"/"時</p><p><b>  s = 4;</b></p><p>  gtk_entry_set_text(GTK_ENTRY

76、(entry),"");</p><p>  first = FALSE ; count = 0; break;</p><p><b>  }</b></p><p>  have_dot = FALSE;</p><p>  for(i = 0 ; i < 100 ; i++) //清除

77、數(shù)字</p><p>  number[i] = '\0';</p><p><b>  }</b></p><p>  void on_eq_clicked (GtkButton* button,gpointer data)</p><p>  { //當?shù)忍栨I按鈕按下時</p>

78、<p>  double numb;</p><p>  gchar num[100];</p><p>  gchar *result;</p><p><b>  switch(s)</b></p><p><b>  {</b></p><p>  case

79、 1: //當"+"時</p><p>  numb = nn+mm;</p><p><b>  break;</b></p><p>  case 2: //當"-"時</p><p>  numb = nn-mm;</p><p><

80、b>  break;</b></p><p>  case 3: //當"*"時</p><p>  numb = nn*mm;</p><p><b>  break;</b></p><p>  case 4: //當"/"時</p>

81、<p>  numb = nn/mm;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  result = g_ascii_dtostr(num,100,numb);</p><p>  gtk_entry_set_text(G

82、TK_ENTRY(entry),result);</p><p>  have_result = TRUE;</p><p><b>  }</b></p><p>  int main ( int argc , char* argv[])</p><p><b>  {</b></p>

83、<p>  GtkWidget *window;</p><p>  GtkWidget *vbox;</p><p>  GtkWidget *hbox,*hbox1,*hbox2,*hbox3,*hbox4;</p><p>  GtkWidget *button;</p><p>  GtkWidget *label;&l

84、t;/p><p>  gtk_init(&argc,&argv);</p><p>  window = gtk_window_new(GTK_WINDOW_TOPLEVEL); //主窗口</p><p>  g_signal_connect(G_OBJECT(window),"delete_event",</p>

85、<p>  G_CALLBACK(gtk_main_quit),NULL);</p><p>  gtk_window_set_title(GTK_WINDOW(window),"我的計算器"); //主窗口標簽欄</p><p>  gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER)

86、;</p><p>  gtk_container_set_border_width(GTK_CONTAINER(window),10);</p><p>  vbox = gtk_vbox_new(FALSE,0);</p><p>  gtk_container_add(GTK_CONTAINER(window),vbox);</p><p&

87、gt;  hbox = gtk_hbox_new(FALSE,0);</p><p>  gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,5);</p><p>  label = gtk_label_new("Calculator");</p><p>  gtk_box_pack_start

88、(GTK_BOX(hbox),label,TRUE,TRUE,5);</p><p>  button = gtk_button_new_with_label("C");</p><p>  gtk_box_pack_start(GTK_BOX(hbox),button,TRUE,TRUE,5);</p><p>  g_signal_conne

89、ct(G_OBJECT(button),"clicked",</p><p>  G_CALLBACK(on_clear_clicked),NULL);</p><p>  entry = gtk_entry_new();</p><p>  gtk_widget_set_direction(entry,GTK_TEXT_DIR_RTL);<

90、;/p><p>  gtk_box_pack_start(GTK_BOX(vbox),entry,FALSE,FALSE,5);</p><p>  hbox1 = gtk_hbox_new(FALSE,0);//定義hbox1容納3、2、1、"+"</p><p>  gtk_box_pack_start(GTK_BOX(vbox),hbox

91、1,FALSE,FALSE,5);</p><p>  button = gtk_button_new_with_label("3");//按鍵3</p><p>  gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);</p><p>  g_signal_connect(G_OBJE

92、CT(button),"clicked",</p><p>  G_CALLBACK(on_num_clicked),NULL);</p><p>  button = gtk_button_new_with_label("2");//按鍵2</p><p>  gtk_box_pack_start(GTK_BOX(hbo

93、x1),button,TRUE,TRUE,5);</p><p>  g_signal_connect(G_OBJECT(button),"clicked",</p><p>  G_CALLBACK(on_num_clicked),NULL);</p><p>  button = gtk_button_new_with_label("

94、;1");//按鍵1</p><p>  gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);</p><p>  g_signal_connect(G_OBJECT(button),"clicked",</p><p>  G_CALLBACK(on_num_clicked)

95、,NULL);</p><p>  button = gtk_button_new_with_label("+");//按鍵"+"</p><p>  g_signal_connect(G_OBJECT(button),"clicked",</p><p>  G_CALLBACK(on_suan_cl

96、icked),(gpointer)1);</p><p>  gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);</p><p>  hbox2 = gtk_hbox_new(FALSE,0);//定義hbox2容納6、5、4、"-"</p><p>  gtk_box_pack_st

97、art(GTK_BOX(vbox),hbox2,FALSE,FALSE,5);</p><p>  button = gtk_button_new_with_label("6");//按鍵6</p><p>  g_signal_connect(G_OBJECT(button),"clicked",</p><p>  G

98、_CALLBACK(on_num_clicked),NULL);</p><p>  gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);</p><p>  button = gtk_button_new_with_label("5");//按鍵5</p><p>  g_signal

99、_connect(G_OBJECT(button),"clicked",</p><p>  G_CALLBACK(on_num_clicked),NULL);</p><p>  gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);</p><p>  button = gtk_butto

100、n_new_with_label("4");//按鍵4</p><p>  g_signal_connect(G_OBJECT(button),"clicked",</p><p>  G_CALLBACK(on_num_clicked),NULL);</p><p>  gtk_box_pack_start(GTK_BO

101、X(hbox2),button,TRUE,TRUE,5);</p><p>  button = gtk_button_new_with_label("-");//按鍵"-"</p><p>  g_signal_connect(G_OBJECT(button),"clicked",</p><p> 

102、 G_CALLBACK(on_suan_clicked),(gpointer)2);</p><p>  gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);</p><p>  hbox3 = gtk_hbox_new(FALSE,0);//定義hbox3容納9、8、7、"*"</p><

103、p>  gtk_box_pack_start(GTK_BOX(vbox),hbox3,FALSE,FALSE,5);</p><p>  button = gtk_button_new_with_label("9");//按鍵9</p><p>  g_signal_connect(G_OBJECT(button),"clicked",&l

104、t;/p><p>  G_CALLBACK(on_num_clicked),NULL);</p><p>  gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);</p><p>  button = gtk_button_new_with_label("8");//按鍵8</p>

105、;<p>  g_signal_connect(G_OBJECT(button),"clicked",</p><p>  G_CALLBACK(on_num_clicked),NULL);</p><p>  gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);</p><p&g

106、t;  button = gtk_button_new_with_label("7");//按鍵7</p><p>  g_signal_connect(G_OBJECT(button),"clicked",</p><p>  G_CALLBACK(on_num_clicked),NULL);</p><p>  gtk

107、_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);</p><p>  button = gtk_button_new_with_label("*");//按鍵"*"</p><p>  g_signal_connect(G_OBJECT(button),"clicked",

108、</p><p>  G_CALLBACK(on_suan_clicked),(gpointer)3);</p><p>  gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);</p><p>  hbox4 = gtk_hbox_new(FALSE,0);//定義hbox4容納0、".&quo

109、t;、"="、"/"</p><p>  gtk_box_pack_start(GTK_BOX(vbox),hbox4,FALSE,FALSE,5);</p><p>  button = gtk_button_new_with_label("0");//按鍵0</p><p>  g_signal_c

110、onnect(G_OBJECT(button),"clicked",</p><p>  G_CALLBACK(on_num_clicked),NULL);</p><p>  gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);</p><p>  button = gtk_button_

111、new_with_label(".");//按鍵"."</p><p>  g_signal_connect(G_OBJECT(button),"clicked",</p><p>  G_CALLBACK(on_dot_clicked),NULL);</p><p>  gtk_box_pack_st

112、art(GTK_BOX(hbox4),button,TRUE,TRUE,5);</p><p>  button = gtk_button_new_with_label("=");//按鍵"="</p><p>  g_signal_connect(G_OBJECT(button),"clicked",</p>

113、<p>  G_CALLBACK(on_eq_clicked),NULL);</p><p>  gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);</p><p>  button = gtk_button_new_with_label("/");//按鍵"/"</p&g

114、t;<p>  g_signal_connect(G_OBJECT(button),"clicked",</p><p>  G_CALLBACK(on_suan_clicked),(gpointer)4);</p><p>  gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);</p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論