ãã®æçš¿ã¯ãã¯ãã¹ãã©ãããã©ãŒã ã®GTK +ã©ã€ãã©ãªã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãäœæããããšã«å°å¿µããŠããŸãã äž»ã«åå¿è
ã«çŠç¹ãåœãŠãŠããŸããïŒ ãããã£ãŠãããã€ãã®ããšã¯éåžžã«ã·ã³ãã«ã§å¹³å¡ã§ããããã«æãããããããŸãããããã¹ãŠãã§ããã ãæ確ã«ãªãããã«ããã¹ãŠãã§ããã ã詳现ã«èª¬æããããšããŸããã
ãã®ã©ã€ãã©ãªã®å€§ããªå©ç¹ã¯ãç¡æã§åçšå©çšã§ããããšã§ãã ã€ã³ã¿ãŒãããäžã§GTK +ãæäœããããã®ããã¥ã¡ã³ããæ¬åœã«è³ªã®é«ãèšäºã¯ããŸããããŸããã å€ãã®äŸã§ã¯ãããã°ã©ã ã€ã³ã¿ãŒãã§ã€ã¹ã¯ããã³ãã§èšè¿°ãããŠããŸãããããã¯éåžžã«äžäŸ¿ãªå ŽåããããŸãã ç§èªèº«ãããã«åºããããå€ãã®å Žåããã©ãŒã ïŒã³ã³ããïŒã«ãŠã£ãžã§ããïŒãªããžã§ã¯ãïŒãæ£ããé
眮ããã¿ã¹ã¯ã®è§£æ±ºã«éäžããŠããŸããã§ããã
Gladeããžã¥ã¢ã«GUIã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠGTK +ã®ã€ã³ã¿ãŒãã§ã€ã¹ããã°ããäœæããããã°ã©ã ã«çµ±åããæ¹æ³ã瀺ããŸãã Gladeã¯ã³ã³ãã€ã©ã§ããããã¬ã§ããããŸããã ã€ã³ã¿ãŒãã§ã€ã¹ãèšè¿°ããGladeXML XML圢åŒãã¡ã€ã«ã§è¡šç€ºããããšã®ã¿ãèš±å¯ãããŸãã
GTK +ã©ã€ãã©ãªã®åºæ¬çãªã€ã³ã¿ãŒãã§ã€ã¹ã¯Cã§ãããããããã®äŸã§ã¯C ++ã䜿çšããŸãã ãããã£ãŠãå°ããªæ©èœã衚瀺ãããŸãããããã«ã€ããŠèª¬æããŸãã Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³Ubuntu 10.04ã䜿çšããŠããŸãã
ã¿ã¹ã¯ã¯æ¬¡ã®ããã«ãªããŸãïŒãã£ã³ãã¹ããµã€ãã¡ãã¥ãŒïŒãã£ã³ãã¹ã«æç»ãããã®ãéžæããïŒãã¡ã€ã³ã¡ãã¥ãŒãã¹ããŒã¿ã¹ããŒã§æ§æãããå°ããªã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã åæã«ãã¢ããªã±ãŒã·ã§ã³ãŠã£ã³ããŠå
šäœã®ãµã€ãºãå€æŽããå Žåããµã€ãã¡ãã¥ãŒãšãã£ã³ãã¹ã®ãµã€ãºãäžå®ã«ä¿ã€å¿
èŠããããŸãã ãã ãããã£ã³ãã¹ãé
眮ãããŠããã³ã³ããã¯ãã¡ã€ã³ãŠã£ã³ããŠã®ãµã€ãºã®å¢æžã«å¿ããŠãµã€ãºãå€æŽã§ããŸãã å¿
èŠã«å¿ããŠãã¹ã¯ããŒã«ããŒã衚瀺ãããŸãã
èšç»ã¯æ¬¡ã®ãšããã§ãã
- Glade3ãã€ã³ã¹ããŒã«ããŠèµ·åãã
- Glade3ã§ã¢ããªã±ãŒã·ã§ã³ã®ã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ãäœæããã¡ã€ã³ãŠã£ãžã§ããïŒãªããžã§ã¯ãïŒãã¡ã€ã³ãŠã£ã³ããŠãšã³ã³ãããŒã«é
眮ãããŠã£ãžã§ãããšãã®ãã³ãã©ãŒïŒãã³ãã©ãŒïŒã®ã€ãã³ãïŒSingnalsãsignalïŒãå®çŸ©ããŸãã ãã®ã·ã°ãã«ãçºçãããšãã«åŒã³åºãããããã°ã©ã ã®ã³ãŒãå
ã®ããã·ãŒãžã£
- ããã°ã©ã ã³ãŒãã®èšè¿°ïŒXMLãã¡ã€ã«ãã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ãšçµ±åãããã³ãã©ãŒãšãã¢çšã®æ©èœãèšè¿°ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ãå°ããã¹ãããŸã
Glade3ãã€ã³ã¹ããŒã«ããŠèµ·åãã
GTK + devããã±ãŒãžãæ¢ã«ã€ã³ã¹ããŒã«ãããŠããããšãåæã§ããã€ã³ã¹ããŒã«ãããŠããªãå Žåã¯ãã³ã³ãœãŒã«ãããããå®è¡ã§ããŸãã
sudo aptitude install libgtk2.0-dev
Gladeã¯ãUbuntu Update CenterããããŸãã¯ã³ã³ãœãŒã«ã䜿çšããŠå床ã€ã³ã¹ããŒã«ã§ããŸãã
sudo apt-get install glade-gnome
ã€ã³ã¹ããŒã«åŸãã¢ããªã±ãŒã·ã§ã³-ããã°ã©ãã³ã°-Glade Interface Designerãå®è¡ããŸã
å³ã«ç€ºãããã«ããã¹ãŠã®ãã©ã¡ãŒã¿ãŒãèšå®ããŸãã ããŒãžã§ã³ããŒã«ãããããŒãžã§ã³éžæ2.16
å·ŠåŽã«ã¯ãããŸããŸãªãŠã£ãžã§ããã®ã»ããããããŠã£ã³ããŠããããŸãã ãã«ãã¡ã€ã®éçºWindowsãã©ãŒã ã§åããŠãã人ããŸãã¯ç°å¢ã«ïŒã¯ããã«ãœãŒããããŸããã å³åŽã«ã¯2ã€ã®ã¡ãã¥ãŒããããŸãã1ã€ã¯ãŠã£ãžã§ããã®éå±€ã衚瀺ãã2ã€ç®ã®ãŠã£ã³ããŠã¯ãŠã£ãžã§ããã®ããããã£ãŠã£ã³ããŠã衚瀺ããŸãã
GUIäœæ
GTK +ã¢ããªã±ãŒã·ã§ã³ã®ã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ã®äœæã¯ãã¡ã€ã³ãã©ãŒã ïŒããã°ã©ã ã®ã¡ã€ã³ãŠã£ã³ããŠïŒã®èšå®ããå§ãŸããŸãã ãŠã£ã³ããŠãŠã£ãžã§ããã¯ãå·Šã¡ãã¥ãŒã®[ãããã¬ãã«]ã»ã¯ã·ã§ã³ã«ãããŸãã
[ããããã£]ãŠã£ã³ããŠã®å³åŽã§ããã®ãŠã£ãžã§ããã®ããããã£ãèšå®ããŸãã
åå
ïŒtopWindow
Windowsã®äœçœ®ïŒ
äžå€®
ããã©ã«ãã®å¹
ïŒ
500
ããã©ã«ãã®é«ãïŒ
320
Signalsã¿ãïŒsignalãeventïŒã«ç§»åããGtkObjectãdestroyãæ¢ããHandleråïŒhandlerïŒã«
topWindow_destroy_cbãæžã蟌ããããªã¹ãããéžæããŸãã ã¡ã€ã³ãã©ãŒã ã®éé - ããã¯ãç Žå£ããããã«ä¿¡å·ãåŠçããããã·ãŒãžã£ã®ååã«ãªããŸãã
ããã«ãã¢ããªã±ãŒã·ã§ã³ã«ã¯ãã¡ã€ã³ã¡ãã¥ãŒãã¡ã€ã³æ©èœéšåïŒããã¯ãã£ã³ãã¹ãšæç»å¯Ÿè±¡ãéžæããããã®ã¡ãã¥ãŒã§ãïŒãããã³ã¹ããŒã¿ã¹ããŒãããã¯ãã§ãã [ã³ã³ãã]ã»ã¯ã·ã§ã³ã®å·ŠåŽã®ã¡ãã¥ãŒã«ãã[åçŽããã¯ã¹]ãŠã£ãžã§ããã³ã³ãããã¡ã€ã³ãã©ãŒã ã«é
眮ããŸãã 衚瀺ããããã€ã¢ãã°ã§ãã¢ã€ãã æ°ïŒ3ãéžæããŸããããã¯ãäœæããã³ã³ããã«3ã€ã®ãŠã£ãžã§ãããé
眮ã§ããããšãæå³ããŸãã
vbox1ã³ã³ããã«ã¯3ã€ã®ããããã»ã«ãŸãã¯ã³ã³ããŒãã¡ã³ãããããŸãã 2çªç®ã®ïŒäžå€®ïŒã³ã³ããŒãã¡ã³ãã«ãFrameïŒãŠã£ãžã§ããã¡ãã¥ãŒã®[ã³ã³ãã]ã»ã¯ã·ã§ã³ïŒãé
眮ããŸãã å³åŽã®ãŠã£ãžã§ããããªãŒãèŠãŠãã ããã - 圌ãã¯åé€ããããšãã§ãalignment1ãšLABEL1ïŒãã¬ãŒã 1äœæãããŠã£ãžã§ããã®äžã«2 vizhdetaã«ãªããŸãã ããã«ã€ããŠå°ãéžè±ããŠãçè«ã«æ»ããŸãã
GTK +ã§ãŠã£ãžã§ããã®ãµã€ãºã管çããæ¹æ³ãç解ããããšã¯ãé©åã§å¹ççãªã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ãäœæããããã«éåžžã«éèŠã§ãã ãã®ããã»ã¹ã¯ãå€ãã®å Žåãäºã€ã®æåïŒãã§ãŒãº2ïŒãããªããããã³ã°åŠçãšåŒã°ããèŠæ±ããããµã€ãºã®è§£å床ãå²ãåœãŠãããŸãã
ãããªãã¯ã©ã®ãããã®ã¹ããŒã¹ãå¿
èŠãªã®ã§ããããïŒãïŒãåãåããã®ã¹ãããã¯ãååž°çãªè³ªåã§ãã ã¡ã€ã³ãŠã£ã³ããŠã¯åãŠã£ã³ããŠã«èšå®ããåãŠã£ã³ããŠã¯åãŠã£ã³ããŠã«èšå®ããããããã®éå±€å
šäœã®ãã¹ãŠã®ãŠã£ãžã§ãããå¿çãããŸã§ã§ãã
2ã€ã®éèŠãªãã€ã³ãããããŸãã
- åãŠã£ãžã§ããã¯èŠªãŠã£ãžã§ããã®ãµã€ãºã«ã€ããŠäœãç¥ããŸãã
- 芪ãŠã£ãžã§ããã®ãµã€ãºã¯ãåãŠã£ãžã§ããã®ãµã€ãºã«äŸåããŸã
ã¡ã€ã³ãŠã£ã³ããŠãçæ³çã«ã©ã®ãããã®ã¹ããŒã¹ãå¿
èŠã§ããããç¥ã£ãã®ã§ãå®éã«ã©ã®ãããã®ã¹ããŒã¹ãå©çšå¯èœã«ãªããã«ã€ããŠæ±ºå®ãäžãããŸãã 劥åœãªå€ããªã¯ãšã¹ãã«å«ãŸããŠããå Žåããããããã©ã«ãã§ãã ãã ãããŠã£ã³ããŠãµã€ãºãæåã§èšå®ãããŠããå ŽåïŒããšãã°ãgtk_window_setdefault_sizeã䜿çšïŒããŸãã¯ããã§ãªãå ŽåããŠã£ã³ããŠã¯èŠæ±ããããµã€ãºãç Žæ£ããå¥ã®ãµã€ãºãèšå®ããŸãã
2çªç®ã®æ®µéïŒãµã€ãºã®å²ãåœãŠïŒã§ã芪ãŠã£ãžã§ããããåãŠã£ãžã§ãããžã®ã³ãã³ããçºçããŸãïŒãããã«ã¹ããŒã¹ããããŸããããã«åãããŠãã¹ãŠãè¡ããŸããã ãŠã£ãžã§ããã«è€æ°ã®åãŠã£ãžã§ãããããå Žåããã®ã¹ãããã®ã¿ã¹ã¯ã¯ãåãŠã£ãžã§ããéã§ç©ºãã¹ããŒã¹ãé©åã«åå²ããããšã§ãã
次ã«ãã¢ããªã±ãŒã·ã§ã³ã®äž»èŠéšåã«é²ã¿ãŸãã ç§ãã¡ã¯ããŠã£ãžã§ããã¡ãã¥ãŒã«å
¥ããã³ã³ããã»ã¯ã·ã§ã³ã«æ°Žå¹³ãã€ã³ãéžæããæã
ã¯ãã¬ãŒã 1ã®äžã«çœ®ããŸãã å·ŠåŽã¯åºå®ãµã€ãºã§ããå¿
èŠããããå³åŽã¯åºå®ãµã€ãºã§ã¯ãããŸããã ç¹°ãè¿ããŸããããŠã£ãžã§ããã¡ãã¥ãŒã«ç§»åããããã§ã¹ã¯ããŒã«ãŠã£ã³ããŠãæ¢ããŸãã æåã«1ã€ã次ã«2çªç®ã®ã¹ã¯ããŒã«ãŠã£ã³ããŠãå·Šå³ã®åºç»hpand1ïŒæ°Žå¹³ãã€ã³ïŒã«é
眮ããŸãã scrolledwindow1ãšåŒã°ããå·ŠåŽã®Scrolled Windowã§ãããããã£ïŒCommonã¿ãã§ïŒWidth reguestã
145ã«èšå®ããŸã-ããã¯ãèŠæ±ããããµã€ãºïŒãããã³ã°ããã»ã¹çšïŒãæå³ããŸãã scrolledwindow1ã®Resizeããããã£ãPackingã¿ãã§
Noã§
ãã ãscrolledwindow2
Yesã§ããããšã確èªããå¿
èŠã
ãããŸãã
Containersã»ã¯ã·ã§ã³ãããæåã«æåã®ViewPortãŠã£ãžã§ãããé
眮ãã次ã«scrolledwindow1ãšscrolledwindow2ã®äž¡æ¹ã«ãããã2çªç®ã®ãŠã£ãžã§ãããé
眮ããŸãã
ãµã€ãã¡ãã¥ãŒãèŠãŠã¿ãŸãããã 3ã€ã®ã³ã³ããŒãã¡ã³ããæã€ViewPort1åçŽããã¯ã¹ã«è¿œå ããŸãã åã³ã³ããŒãã¡ã³ãã«ã©ãžãªãã¿ã³ãè¿œå ããŸãã åã©ãžãªãã¿ã³ã¯ãããããã£ããããŸãããå±éããŠèšå®ããã®ã§ã圌ãã¯èŠªãŠã£ãžã§ããã®ãµã€ãºãå¢ããããšã§äŒžã³ãŠããŸããã ãŸããå
±é]ã¿ãã§ãããªãã¯ã圌ããããã©ã«ãã®ä»£ããã«ãç§ãã¡ã¯äžããããã«å€§ããã®ãã®ã§ãããå¹
ãšé«ãã®èŠæ±ãèšå®ããããšãã§ããŸãã ãã ãããããã«ããŠããµã€ãºã¯ç°ãªããŸãã [å
šè¬]ã¿ãã§ããããã£ãå€æŽããŸãã
ãããã
rbutRectangle ã
rbutEllipse ã
rbutTriangleã®åå
ãããã
Rectangle ã
Ellipse ã
Triangleã«ã©ãã«ãä»ããŸã
ãŸããrbutEllipseããã³
rbutTriangleã®å Žåãç¹å¥ãªãã€ã¢ãã°ã䜿çšããŠGroupããããã£
rbutRectangleã§æå®ããŸãã
次ã®ããã«ãªããŸãã
次ã«ãåã©ãžãªãã¿ã³ã®ã€ãã³ããç»é²ããå¿
èŠããããŸãã [ã·ã°ãã«]ã¿ãã§ã¯ãGroupChangedã€ãã³ããšãã°ã«ïŒã©ã¡ãã§ãããŸããŸããïŒã®ã©ã¡ãã§ãããŸããŸãããrbutton_toggled_cbãã³ãã©ãŒãèšè¿°ããŸãã
次ã«ããŠã£ã³ããŠã®å³åŽã«ç®ãåããŸãã 2ã€ã®ã³ã³ããŒãã¡ã³ããæã€åçŽããã¯ã¹ãViewPort2ã«è¿œå ããŸãã äžéšã«éåžžã®ã©ãã«ãé
眮ããäžéšã®æç»é åã«ãã£ã³ãã¹ãé
眮ããŸãã Label1ã®å Žåãlabelããããã£ã«
300 x 200 Canvasãèšè¿°ããŸãã [ãããã³ã°]ã¿ãã«ç§»åãã[å±é]ã[
ããã ]ã«èšå®ããŸãã
ä»ãç§ãã¡ã®ãã£ã³ãã¹ã
ååïŒ
drawingarea
æ¯åºïŒ
ããã
å¹
ãªã¯ãšã¹ãïŒ
300
é«ããªã¯ãšã¹ãïŒ
200
ã€ãã³ãïŒ
é²åºã確èª
[Signals]ã§ãexpose-eventãæ¢ãããªã¹ãããæžã蟌ããéžæããŸãã
drawingarea_expose_event_cb
次ã«ãã¹ããŒã¿ã¹ããŒïŒäžçªäžã®ã³ã³ããŒãã¡ã³ãïŒãšã¡ã€ã³ã¡ãã¥ãŒïŒäžçªäžã®ã³ã³ããŒãã¡ã³ãïŒãè¿œå ããå¿
èŠããããŸãã ã¡ãã¥ãŒããŒïŒãŠã£ãžã§ããã¡ãã¥ãŒã®[ã³ã³ãã]ã»ã¯ã·ã§ã³ïŒãæäžéšã«é
眮ããã¹ããŒã¿ã¹ããŒã®æäžéšã®ã³ã³ããŒãã¡ã³ãïŒãŠã£ãžã§ããã¡ãã¥ãŒã®[ã³ã³ãããŒã«ãšè¡šç€º]ã»ã¯ã·ã§ã³ïŒã«ãè¿œå ã«é¢ãããã€ã¢ãã°ã衚瀺ãããŸãã[ã¢ã€ãã æ°ïŒ1]ãéžæããŸãã
ãã®äŸã®menubar1ã§ã¯ãã¡ãã¥ãŒé
ç®ã1ã€ã ãæ®ããŸã-ããã°ã©ã ãçµäºããŸãã ãããã£ãŠãããªããåé€ããããšãã§ããŸããmenuitem2ãmenuitem3ãmenuitem4ãã ãã®åŸãæã
ã¯menuitem1ãæããã«ããäžã«å
¥ããšããã¹ãŠãåé€ããŠãããimagemenuitem5 MENU1ã ããã¯Quitã¢ã€ãã ã§ãã ãããã¯ãªãã¯ããŠãããããã£ãŠã£ã³ããŠã®[å
šè¬]ã¿ãã®ããããã£ãStock Itemããããã£ãèŠãããšãã§ããŸãããã®ããããã£ã«ã¯
gtk-quitãç»é²ãããŠããŸãã ããã§ãéã¶ãããšãã§ããŸãã éåžžãã«ã¹ã¿ã ã©ãã«ãšç»åãéžæãããã¹ãŠãèªåã§èšå®ã§ããŸãã ããã¯ããã»ã©éèŠã§ã¯ãããŸããã imagemenuitem5ã®å ŽåãSignalsã¿ãã§ããã©ãŒã ãéããå ŽåãšãŸã£ããåãããã«ïŒ
topWindow_destroy_cb ïŒä¿¡å·ã®ã¢ã¯ãã£ããŒãä¿¡å·ïŒã¡ãã¥ãŒé
ç®ãã¯ãªãã¯ïŒã
èšå®ããŸãã
ããããã€ã³ã¿ãŒãã§ãŒã¹ãæçµçã«ã©ã®ããã«èŠãããã§ãã mainFormãšããååã§ãããžã§ã¯ããä¿åããŸãã ãã¡ã€ã«ã¯mainForm.gladeãšããååã«ãªããŸã
ããã°ã©ã ã®ã³ãŒã
Example1.cppããªããmainForm.gladeãä¿åããåããã©ã«ãã«ãã¡ã€ã«ãäœæããŸãã æåã«ã³ãŒãå
šäœã説æãã次ã«ããã€ãã®éèŠãªãã€ã³ãã説æããŸãã
#include <cairo.h> #include <gtk/gtk.h> #define UI_FILE "mainForm.glade" // GtkBuilder *builder; GtkWidget *topWindow; GtkRadioButton *rbutRectangle, *rbutEllipse, *rbutTriangle; GtkDrawingArea *drawingarea; // extern "C" void topWindow_destroy_cb (GtkObject *object, gpointer user_data); extern "C" gboolean drawingarea_expose_event_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data); extern "C" void rbutton_toggled_cb (GtkObject *object); int main( int argc, char **argv ) { GError *error = NULL; // GTK+ gtk_init( &argc, &argv ); // GtkBuilder builder = gtk_builder_new(); // , Glade if( ! gtk_builder_add_from_file( builder, UI_FILE, &error ) ) { g_warning( "%s", error->message ); g_free( error ); return( 1 ); } // GladeXML topWindow = GTK_WIDGET(gtk_builder_get_object(builder, "topWindow")); rbutRectangle = GTK_RADIO_BUTTON(gtk_builder_get_object(builder, "rbutRectangle")); rbutEllipse = GTK_RADIO_BUTTON(gtk_builder_get_object(builder, "rbutEllipse")); rbutTriangle = GTK_RADIO_BUTTON(gtk_builder_get_object(builder, "rbutTriangle")); drawingarea = GTK_DRAWING_AREA(gtk_builder_get_object(builder, "drawingarea")); // gtk_builder_connect_signals (builder, NULL); // g_object_unref( G_OBJECT( builder ) ); // gtk_widget_show( topWindow ); // gtk_main(); return( 0 ); } // void topWindow_destroy_cb (GtkObject *object, gpointer user_data) { // gtk_main_quit(); } // gboolean drawingarea_expose_event_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data) { cairo_t *cr; cr = gdk_cairo_create (widget->window); cairo_set_line_width (cr, 7); cairo_set_source_rgb (cr, 0, 0, 0); // if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rbutRectangle))) { // cairo_rectangle (cr, 20, 20, 200, 100); cairo_stroke_preserve(cr); cairo_set_source_rgb(cr, 0, 0.8, 0); } // if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rbutEllipse))) { // cairo_arc(cr, 150, 100, 90, 0, 2 * 3.14); cairo_stroke_preserve(cr); cairo_set_source_rgb(cr, 0.8, 0, 0); } // if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rbutTriangle))) { // cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); cairo_move_to (cr, 40, 40); cairo_line_to (cr, 200, 40); cairo_line_to (cr, 120, 160); cairo_line_to (cr, 40, 40); cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND); cairo_stroke_preserve(cr); cairo_set_source_rgb(cr, 0.8, 0, 0.8); } cairo_fill(cr); cairo_destroy(cr); return FALSE; } void rbutton_toggled_cb (GtkObject *object) { // drawingarea gtk_widget_queue_draw (GTK_WIDGET(drawingarea)); }
ã #include <cairo.h> #include <gtk/gtk.h> #define UI_FILE "mainForm.glade" // GtkBuilder *builder; GtkWidget *topWindow; GtkRadioButton *rbutRectangle, *rbutEllipse, *rbutTriangle; GtkDrawingArea *drawingarea; // extern "C" void topWindow_destroy_cb (GtkObject *object, gpointer user_data); extern "C" gboolean drawingarea_expose_event_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data); extern "C" void rbutton_toggled_cb (GtkObject *object); int main( int argc, char **argv ) { GError *error = NULL; // GTK+ gtk_init( &argc, &argv ); // GtkBuilder builder = gtk_builder_new(); // , Glade if( ! gtk_builder_add_from_file( builder, UI_FILE, &error ) ) { g_warning( "%s", error->message ); g_free( error ); return( 1 ); } // GladeXML topWindow = GTK_WIDGET(gtk_builder_get_object(builder, "topWindow")); rbutRectangle = GTK_RADIO_BUTTON(gtk_builder_get_object(builder, "rbutRectangle")); rbutEllipse = GTK_RADIO_BUTTON(gtk_builder_get_object(builder, "rbutEllipse")); rbutTriangle = GTK_RADIO_BUTTON(gtk_builder_get_object(builder, "rbutTriangle")); drawingarea = GTK_DRAWING_AREA(gtk_builder_get_object(builder, "drawingarea")); // gtk_builder_connect_signals (builder, NULL); // g_object_unref( G_OBJECT( builder ) ); // gtk_widget_show( topWindow ); // gtk_main(); return( 0 ); } // void topWindow_destroy_cb (GtkObject *object, gpointer user_data) { // gtk_main_quit(); } // gboolean drawingarea_expose_event_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data) { cairo_t *cr; cr = gdk_cairo_create (widget->window); cairo_set_line_width (cr, 7); cairo_set_source_rgb (cr, 0, 0, 0); // if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rbutRectangle))) { // cairo_rectangle (cr, 20, 20, 200, 100); cairo_stroke_preserve(cr); cairo_set_source_rgb(cr, 0, 0.8, 0); } // if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rbutEllipse))) { // cairo_arc(cr, 150, 100, 90, 0, 2 * 3.14); cairo_stroke_preserve(cr); cairo_set_source_rgb(cr, 0.8, 0, 0); } // if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rbutTriangle))) { // cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); cairo_move_to (cr, 40, 40); cairo_line_to (cr, 200, 40); cairo_line_to (cr, 120, 160); cairo_line_to (cr, 40, 40); cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND); cairo_stroke_preserve(cr); cairo_set_source_rgb(cr, 0.8, 0, 0.8); } cairo_fill(cr); cairo_destroy(cr); return FALSE; } void rbutton_toggled_cb (GtkObject *object) { // drawingarea gtk_widget_queue_draw (GTK_WIDGET(drawingarea)); }
ãŸãããããã®ãªããžã§ã¯ãã宣èšããŸãã 誰ãšæã
ã¯åããŸãã 次ã«ãã·ã°ãã«ãã³ãã©ã®ç»é²ãéå§ããŸãã ãªããªã C ++ã§èšè¿°ããexternâ Câã䜿çšããŠãå€éšé¢æ°ã«ãã£ãŠtopWindow_destroy_cbãdrawingarea_expose_event_cbãrbutton_toggled_cbã宣èšããCã®ãã€ã³ãã£ã³ã°é åºã«åŸã£ãŠãªã³ã¯ããå¿
èŠãããããšã瀺ããŸããGtkBuilderã«ã¯Gladeã®èšè¿°ããã®ãã¹ãŠã®ãªããžã§ã¯ããžã®ãªã³ã¯ãå«ãŸããŸãã gtk_builder_get_objecté¢æ°ã¯ãGtkBuilderïŒãã®å Žåã¯ãã«ããŒïŒãã察å¿ããååãæã€ãªããžã§ã¯ããžã®åç
§ãååŸããŸãã gtk_builder_connect_signalsé¢æ°ã䜿çšããŠãã³ãŒãå
ã®ãã³ãã©ãŒé¢æ°ãGladeXMLã®å¯Ÿå¿ããã·ã°ãã«ãã³ãã©ãŒã«æ¥ç¶ããŸãã ããã¯èªåçã«è¡ãããŸãã Gladeãšã³ãŒãã®ååãäžèŽããããšãéèŠã§ãã ã¢ããªã±ãŒã·ã§ã³ã¯æ£åžžã«ã³ã³ãã€ã«ãããã·ã°ãã«ã ããåŠçãããŸãããã³ã³ãœãŒã«ããããã°ã©ã ãå®è¡ãããšããã®ãããªã·ã°ãã«ã®ãã³ãã©ãŒãèŠã€ããããšãã§ããªããšããèŠåã衚瀺ãããŸãã
ãŸãã C ++ã§èšè¿°ããå Žåãæ瀺çãªåå€æã䜿çšããå¿
èŠãéåžžã«å€ããããŸãã äŸãã°
rbutRectangle = GTK_RADIO_BUTTON(gtk_builder_get_object(builder, "rbutRectangle"));
Cã§èšè¿°ããå ŽåãGTK_RADIO_BUTTONã®æ瀺çãªãŽãŒã¹ããªãã§å®è¡ã§ããŸãã
ããã°ã©ã ãã³ã³ãã€ã«ããã«ã¯ãèªåãã«ãã·ã¹ãã ïŒCMakeãªã©ïŒã䜿çšããããã¡ã€ã¯ãã¡ã€ã«ãèªåã§ç»é²ããå¿
èŠããããŸãã ããã«ã€ããŠã¯è©³ãã説æããŸããã ãããŠãmakefileã®èª¬æã®äŸãæããŠãã ããã ãã¹ãã®çµããã«èšç«ã«é¢ããæè¿ã®2ã€ã®åç
§ã¯ãåã«ãã¡ã€ã«ãäœããŸãã
CC=g++ LDLIBS=`pkg-config --libs gtk+-2.0 gmodule-2.0` CFLAGS=-Wall -g `pkg-config --cflags gtk+-2.0 gmodule-2.0` Example1: Example1.o $(CC) $(LDLIBS) Example1.o -o Example1 Example1.o: Example1.cpp $(CC) $(CFLAGS) -c Example1.cpp clean: rm -f Example1 rm -f *.o
ã³ã³ãã€ã«ã¯ã³ãã³ãã§ãã
make
ç§ãã¡ã®ããã°ã©ã ã®å°èŠæš¡ãªãã¹ã
èµ·åäž...
...ãããŠãŠã£ã³ããŠã®ãµã€ãºãå€æŽããŸã
ãµã€ãã¡ãã¥ãŒãšãã£ã³ãã¹ã¯äŒžã³ããåã寞æ³ã®ãŸãŸã§ãããããã£ã³ãã¹ã寞æ³ãå€æŽããã³ã³ããã衚瀺ãããŠããŸãã ãããŠãã©ããã©ãŒã ã®ãµã€ãºã®å¢å ã«äŒŽã£ãŠç»å Žãããã¹ãŠã®ç©ºãé åãã圌ãåŸãŸããã ç§ãã¡ãå¹
=
145 reguest scrolledwindow1ã確ç«ãã
ã¯ããµã€ãºãå€æŽããŠããã®ã§ãããããã¹ãŠã§ã
ã ã¡ã€ã³ãŠã£ã³ããŠãå°ãããªã£ããšãã«è¡šç€ºãããã¹ã¯ããŒã«ããŒã®äŸã次ã«ç€ºããŸã
ãããŠä»ãç§ã¯Yesã«ããããã£ãå±éGlade3ã«æ¥ãŠãLABEL1ã«å€æŽãããŸããã ãããžã§ã¯ããåã³ã³ãã€ã«ããå¿
èŠã¯ãããŸããã mainFormãã¡ã€ã«ãä¿åããã ãã§ãã çµæã¯æ¬¡ã®ãšããã§ãã
ãªããã åºå®ãµã€ãºã®ãã£ã³ãã¹ããããŸãã ãŸããã¡ã€ã³ãŠã£ã³ããŠãæ¡å€§ãããšãã«ååŸããããã¹ãŠã®ã¹ããŒã¹ã¯ãlabel1ãŠã£ãžã§ããã«äžããããŸãã ãã®ãã¹ãŠã®ããžãã¹ã§ãéã¶ãããšãã§ããŸãã ããšãã°ã[å±é]ã[ããã]ã«èšå®ããæ£ç¢ºãªé«ãã®å€ïŒ70ãªã©ïŒãæå®ããŸãããŸããæ¢å®ã®ãµã€ãºã§ã¯ãªããæå®ãããµã€ãºã«åºå®ãããŸãã
ããã§ãã®æçš¿ã¯çµäºã§ãã ãããã¯ã¯é¢çœãã§ãããç§ã¯ãã®æ¹åã§ããå€ãã®èšäºãæžããããšããé¡æãæã£ãŠããŸãã
Glade3ã®ãã¥ãŒããªã¢ã«-ãµã€ãºããŽã·ãšãŒã·ã§ã³ããå°ãã®çè«ãåŸãããŸãã
ç§ã¯ããªããèªãããšããå§ããïŒ
ã®ãããã³ã°ãŠã£ãžã§ããã ã
ã«ã€ãã°ã©ãã£ãã¯ãã¥ãŒããªã¢ã«ã® ã
Makefileã®äŸã«ãã ã
GNU `make 'ã