¸®´ª½º °ü·Ã °Á¶õ |
---|
Á¦¸ñ | Motif #7 1999/01/02 (15:25) |
À̸§ | ±èÈ¿¿ø |
¹øÈ£ | 84 |
Á¶È¸ | 442 |
º»¹® |
----------------------------------------------------------------------- [°ÁÂ7] Motif Programming for X windows Using Lesstif ----------------------------------------------------------------------- 10. Callback ¿ì¼± callback¿¡ ´ëÇؼ ¹è¿ì±â Àü¿¡ »õ·Î¿î À§Á¬À» ¹è¿öº¾½Ã´Ù. ¿©Å±îÁö ¹è¿î À§Á¬À» °£´ÜÈ÷ ³ª¿ÇÏÀÚ¸é ¶óº§À§Á¬,½ºÄÉÀÏÀ§Á¬,ÅؽºÆ®À§Á¬,ºÐ¸®ÀÚÀ§Á¬,bulletinboardÀ§Á¬,formÀ§Á¬ µîÀÔ´Ï´Ù. À̹ø¿¡´Â ¹öÆ° À§Á¬À» °£´ÜÈ÷ ¼Ò°³ÇÏ°Ú½À´Ï´Ù. ex11) pushb.c #include<Xm/Xm.h> #include<Xm/PushB.h> XtAppContext context; XmStringCharSet char_set=XmSTRING_DEFAULT_CHARSET; Widget toplevel,button; void main(int argc,char *argv[]) { Arg al[10]; int ac; toplevel=XtAppInitialize(&context,"",NULL,0,&argc,argv,NULL, NULL,0); ac=0; XtSetArg(al[ac],XmNlabelString, XmStringCreateLtoR("Push Me",char_set)); ac++; button=XmCreatePushButton(toplevel,"button",al,ac); XtManageChild(button); XtRealizeWidget(toplevel); XtAppMainLoop(context); } ÀÌÁ¦ »õ·Î¿î °³³äÀ» ¹è¿ì±â ¶§¹®¿¡ óÀ½À¸·Î ´Ù½Ã µ¹¾Æ°¡¾ß °ÚÀ¾´Ï´Ù. labelÀ§Á¬À» toplevel¿¡ ºÙÀÎ °Íó·³ buttonÀ§Á¬À» toplevel¿¡ ºÙÀÎ ¿¹ÀÔ´Ï´Ù PushB.h¶ó´Â Çì´õÆÄÀÏÀ» Àоú°í, WidgetÀ¸·Î buttonÀ̶ó°í ¼±¾ðÇÑ ÈÄ¿¡ XmCraete~ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ¹öÆ°À§Á¬À» ¸¸µé¾ú½À´Ï´Ù. ¾Õ¿¡ ÀÎÀÚ¸¦ Àü´ÞÇÑ °Í À» ÀÚ¼¼È÷ º¸½Ã¸é Push Me¶ó´Â ½ºÆ®¸µÀ» XmStringCreateLtoRÀ̶ó´Â ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ¸ðƼÇÁ ½ºÆ®¸µÀ¸·Î ¸¸µç ÈÄ¿¡ XmNlabelStringÀ̶ó´Â ¸®¼Ò½º¸¦ ÀÌ¿ë ÇÏ¿© button À§Á¬À¸·Î Àü´ÞÇÔÀ¸·Î½á button¿¡ ±Û¾¾°¡ ³ªÅ¸³ªµµ·Ï ÇÑ °ÍÀÔ´Ï´Ù. ÀÌ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°¸é Push Me¶ó´Â ±ÛÀÚ°¡ »õ°ÜÁø ¹öÆ°ÀÌ À©µµ¿ì¿¡ ´Þ¶û ¶ß°Ô µË´Ï´Ù. ¹öÆ°À» ´·¯º¼±î¿ä? ¹öÆ°ÀÌ µé¾î°¬´Ù°¡ ³ª¿Ô´Ù°¡ Çϴ±º¿ä. ±×·±µ¥ ±× ¿Ü¿¡ ¹öÆ°ÀÌ ÇÏ´Â ÀÏÀÌ ¾ø³×¿ä. ¹öÆ°À» ´©¸£¸é ºÒÀÌ ÄÑÁø´ÙµçÁö ÇÏ´Â °Ç ¾ø°í ±×³É ¹öÆ°¸¸ ÀÖ´Â °ÍÀÔ´Ï´Ù. ´Ù½Ã ¸»ÇØ ¿ì¸®°¡ Áý¿¡¼ ÄÄÇ»ÅÍÀÇ ÆÄ¿ö¹öÆ°À» ´©¸£¸é ÄÄÇ»ÅÍ°¡ ÄÑÁö´Â °Íó·³ ¹öÆ°ÀÌ ÇÏ´Â ÀÏÀÌ ÀÖÀ» °ÍÀÔ´Ï´Ù. ±×·±µ¥ ¿ì¸®´Â ±× ³É ±× ÆÄ¿ö¹öÆ°ÀÌ ÄÄÇ»ÅÍ º»Ã¼¿¡ ¿¬°áµÈ °ÍÀÌ ¾Æ´Ï¶ó ´ÜÁö ÆÄ¿ö¹öÆ°¸¸À» °¡ Áö°í ÀÖ´Â °ÍÀÔ´Ï´Ù. ±× ¹öÆ°¸¸À¸·Î´Â ¾Æ¹«·± ¼Ò¿ëÀÌ ¾ø°ÚÁö¿ä.. ¿ì¸®°¡ ¿©Å±îÁö ¹è¿î À§Á¬µéÀº Ưº°È÷ ÇÏ´Â ÀÏÀÌ ¾ø¾ú½À´Ï´Ù. ´ÜÁö ¸ð¾ç¸¸ °¡Áö°í ÀÖ´Â ²®µ¥±â¿¡ ºÒ°ú ÇÕ´Ï´Ù. ¿ì¸®´Â ¿©Å±îÁö ²®µ¥±â¸¦ ¸¸µç °ÍÀÔ´Ï ´Ù. ±×·¯¸é ÀÌ·¯ÇÑ ²®µ¥±â°¡ ÀÏÀ» Çϵµ·Ï ÇØ¾ß ÇÏÁö ¾ÊÀ»±î¿ä? ¹öÆ°À» ´©¸£ ¸é ºÒÀÌ¶óµµ ÄÑÁö°Ô ÇÏ´Â °Íó·³ ¸»ÀÔ´Ï´Ù. ÀÌ°ÍÀÌ ¹Ù·Î callbackÀÇ °³³äÀÔ´Ï´Ù. ¸ðƼÇÁ´Â ÄݹéÀ» ÅëÇؼ ³»ºÎ ÇÁ·Î±×·¥°ú Åë½ÅÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹öÆ°°ú ³»ºÎ ÇÁ·Î±×·¥À» ¿¬°áÇؼ ¹öÆ°À» ´©¸£¸é ³»ºÎ ÇÁ·Î±×·¥ÀÌ ½ÇÇà µÇ µµ·Ï ÇÏ´Â °ÍÀÌÁö¿ä. 1)buttonÀ§Á¬ÀÇ Äݹé ex12) pushbcb.c #include<Xm/Xm.h> #include<Xm/PushB.h> XtAppContext context; XmStringCharSet char_set=XmSTRING_DEFAULT_CHARSET; Widget toplevel,button; void handle_button(Widget w,XtPointer client_data, XmPushButtonCallbackStruct *call_data) { printf("button pushed\n"); } void main(int argc, char *argv[]) { Arg al[10]; int ac; toplevel=XtAppInitialize(&context,"",NULL,0,&argc,argv,NULL ,NULL,0); ac=0; XtSetArg(al[ac],XmNlabelString, XmStringCreate("Push Me",char_set)); ac++; button=XmCreatePushButton(toplevel,"button",al,ac); XtManageChild(button); XtAddCallback(button,XmNactivateCallback,handle_button,NULL); XtRealizeWidget(toplevel); XtAppMainLoop(context); } ÀÌ ÇÁ·Î±×·¥Àº ¹öÆ°À» ´©¸¦ ¶§¸¶´Ù button pushed¶ó°í ÇÁ·Î±×·¥À» ½ÇÇà½ÃŲ Äֿܼ¡ Ç¥½Ã°¡ µË´Ï´Ù. ¾ÕÀÇ ÇÁ·Î±×·¥°ú ¹«¾ùÀÌ ´Þ¶óÁ³´ÂÁö º¾½Ã´Ù. ¹Ù²ï °ÍÀ̶ó°í´Â XtManageChildÇÔ¼ö µÚ¿¡ XtAddCallbackÇÔ¼ö¸¦ Ãß°¡½ÃŲ °Í °ú ¸ÞÀÎÇÔ¼ö ¾Õ¿¡ handle_buttonÀ̶ó´Â ÇÔ¼ö°¡ Ãß°¡µÈ °Í¹Û¿¡ ¾ø½À´Ï´Ù. ±×·³ ÀÌ µÎ ÇÔ¼ö°¡ ¾î¶»°Ô ¾²Àϱî¿ä? XtAddCallbackÇÔ¼öÀÇ Ã¹ ¹ø° ÆĶó¹ÌÅÍ´Â WidgetÀÔ´Ï´Ù. Áï ¾î¶² À§Á¬À» Åë Çؼ ÀÏÀ» ½Ãų °ÍÀΰ¡ ÇÏ´Â °ÍÀ» Àû½À´Ï´Ù. ¿©±â¼´Â ù ¹ø° ÆĶó¹ÌÅÍ¿¡ button À̶ó°í Àû¾î ÁÜÀ¸·Î½á buttonÀ§Á¬°ú ³»ºÎ ÇÁ·Î±×·¥À» ¿¬°á½Ãų °Í ÀÔ´Ï´Ù. µÎ ¹ø° ÆĶó¹ÌÅÍ´Â ¾î¶² ÄݹéÀ» ¾µ°ÍÀΰ¡Çϴ°ÍÀ» Àû¾îÁÖ´Â °ÍÀÔ´Ï´Ù. ¿©±â¼´Â activate Äݹ鿡 ´ëÇؼ¸¸ ½Å°æÀ» ¾µ °ÍÀ̹ǷΠXmNactivateCallbackÀ̶ó´Â °ªÀ» ³Ö¾ú½À´Ï´Ù. Àß ÀÌÇØ°¡ ¾È°¡´õ¶óµµ ±×³É ¹öÆ°À» ´·¶À» ¶§ ¹ß»ýÇÏ´Â À̺¥Æ®¶ó°í »ý°¢ÇÏ¸é µË´Ï´Ù. ¼¼ ¹ø° ÆĶó¹ÌÅÍ´Â ÇÔ¼öÀÇ À̸§ÀÔ´Ï´Ù. Á¤È®È÷ ¸»ÇÏÀÚ¸é ÇÔ¼ö¿¡ ´ëÇÑ Æ÷ÀÎ ÅÍÀÌÁö¸¸ ±×³É ÇÔ¼öÀ̸§À» Àû¾îÁØ´Ù°í »ý°¢Çϼ¼¿ä. ÀÌ ÇÔ¼ö°¡ ¹Ù·Î ¿ì¸® °¡ À§Á¬°ú ¿¬°áÇÒ ³»ºÎ ÇÁ·Î±×·¥ÀÔ´Ï´Ù. (³»ºÎ ÇÁ·Î±×·¥À̶ó°í ÇغÁ¾ß ¿© ±â ¿¹Á¦¿¡¼´Â printf¹® Çϳª¹Û¿¡ ¾ø½À´Ï´Ù. ^^; ) ÀÌ ÇÔ¼ö¿¡ ¹öÆ°ÀÌ ´ ·¯Á³À»¶§ ½ÃÅ°°í ½ÍÀº ÀÏÀ» ¸¶À½²¯ Àû¾îÁÖ¸é µË´Ï´Ù. ¸Ç ¸¶Áö¸· ÆĶó¹ÌÅÍ¿¡´Â nullÀ» ³Ö¾ú½À´Ï´Ù. ÀÌ°ÍÀº ¿©±â¼´Â ¼³¸íÇÏÁö ¾Ê À» °Ì´Ï´Ù. ÀÌÁ¦ handle_buttonÀ̶ó´Â ÇÔ¼ö¸¦ º¾½Ã´Ù. ù ¹ø° ÆĶó¹ÌÅÍ·Î À§Á¬À» ¹Þ½À´Ï´Ù. ¿©±â¼´Â buttonÀ§Á¬°ú ¿¬°áÀ» ÇßÀ¸ ¹Ç·Î ¹öÆ°À§Á¬À» ³Ñ°Ü ÁÙ °ÍÀÔ´Ï´Ù. µÎ ¹ø° ÆĶó¹ÌÅÍ·Î client_data¶ó´Â°Í À» ¹Þ´Âµ¥ ¾Æ±î XtAddCallback¿¡¼ NULLÀ¸·Î ³Ñ°ÜÁØ ºÎºÐÀ» ¹Þ´Â °ÍÀÔ´Ï´Ù. ¸¶Âù°¡Áö·Î Áö±ÝÀº ½Å°æ ¾²Áö ¸¿½Ã´Ù. ¼¼ ¹ø° ÆĶó¹ÌÅ͵µ ´ÙÀ½¿¡ ¼³¸íÀ» ÇÒ °ÍÀÔ´Ï´Ù. ÀÌÁ¦ ÇÔ¼ö¸¦ ¿¸é printfÇÔ¼ö·Î button pushed¶ó´Â ¸»À» ¾²´Â °ÍÀ¸·Î ³¡ÀÌ ³³´Ï´Ù. ¿©±â¼ ÁÖÀÇ ÇÒ Á¡Àº ¸Ç ¸¶Áö¸·¿¡ "\n"À» »©¸ÔÁö ¸»µµ·Ï Çϼ¼¿ä. ÀÌÀ¯´Â ÀÚ¼¼È÷ ¸ð¸£°ÚÀ¸³ª ÀÌ°ÍÀ» ºü¶ß¸®¸é ÇÁ·Î±×·¥ÀÌ Á¦´ë·Î ÀÛµ¿ÇÏÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ¿ä¾àÇϸé ÀÌ ÇÁ·Î±×·¥Àº ¹öÆ°À» ¸¸µé¾î¼ Toplevel¿¡ ºÙÀÎ ÈÄ¿¡ ¹öÆ°À» ´©¸¦ ¶§¸¶´Ù Äֿܼ¡ button pushed¶ó´Â ±ÛÀÚ¸¦ Âï´Â °ÍÀÌ ÀüºÎÀÔ´Ï´Ù. Áö±Ý Àº ±×³É printÇÏ´Â °Í¸¸ ½ÃÄ×Áö¸¸ ÀÌ ¹öÆ°¿¡ ¾öû³ ¿©·¯ °¡Áö ÀÏÀ» ¿¬°áÇÏ ¸é (¸¸¾à ÀÌ ¹öÆ°¿¡ ÀÎÅͳݿ¡ Á¢¼ÓÇؼ Áê¶ó±â °ø¿ø¿¡ µé¾î°¡´Â ÀÏÀ» ¿¬ °áÇϸé?? ^^; ) ¸ÚÁø ÇÁ·Î±×·¥ÀÌ µÇ´Â °ÍÀÔ´Ï´Ù. ¿½ÉÈ÷ °øºÎÇϽñ⸦.. ¿À´ÃÀº Äݹ鿡 ´ëÇؼ °£´ÜÇÏ°Ô ¼³¸íÇß½À´Ï´Ù. ´ÙÀ½½Ã°£¿¡´Â ¿©·¯ °³ÀÇ À§Á¬¿¡ °¢°¢ ÄݹéÀ» ³Ö¾î º¸µµ·Ï ÇÏ°Ú½À´Ï´Ù. |