¸®´ª½º °ü·Ã °­Á¶õ

HomePage Backward Forward Post Reply List
Delete Modify
  Á¦¸ñ   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ÇÏ´Â °Í¸¸ ½ÃÄ×Áö¸¸ ÀÌ ¹öÆ°¿¡ ¾öû³­ ¿©·¯ °¡Áö ÀÏÀ» ¿¬°áÇÏ
¸é (¸¸¾à ÀÌ ¹öÆ°¿¡ ÀÎÅͳݿ¡ Á¢¼ÓÇؼ­ Áê¶ó±â °ø¿ø¿¡ µé¾î°¡´Â ÀÏÀ» ¿¬
°áÇϸé?? ^^; ) ¸ÚÁø ÇÁ·Î±×·¥ÀÌ µÇ´Â °ÍÀÔ´Ï´Ù. ¿­½ÉÈ÷ °øºÎÇϽñ⸦..
¿À´ÃÀº Äݹ鿡 ´ëÇؼ­ °£´ÜÇÏ°Ô ¼³¸íÇß½À´Ï´Ù.

´ÙÀ½½Ã°£¿¡´Â ¿©·¯ °³ÀÇ À§Á¬¿¡ °¢°¢ ÄݹéÀ» ³Ö¾î º¸µµ·Ï ÇÏ°Ú½À´Ï´Ù.


HomePage Backward Forward Post Reply List
1998 by swindler