![]() | Programming Guide | WideStudio/MWT Index Table of contents |
»ùÇà À̺¥Æ® ÇÁ·Î½ÃÀú:¶óº§Æí
¸¶¿ì½º·Î ¼±Åð¡´ÉÇÑ ¶óº§·Î Çϱ⿡´Â
À̺¥Æ® ÇÁ·Î½ÃÀú¿¡ ÀÖ¾î¼ °¡Àå ±âº»ÀûÀÎ ¸¶¿ì½ºÀÇ µ¿ÀÛ¿¡ ¹ÝÀÀÇÏ´Â À̺¥Æ® ÇÁ·Î½ÃÀúÀÇ »ùÇÃÀÔ´Ï´Ù. ¶óº§À§¿¡¼ ¸¶¿ì½º°¡ Ŭ¸¯µÉ¶§¸¶´Ù ¼ýÀÚ°¡ ¿Ã¶ó°¡°ÔµÇ´Â À̺¥Æ® ÇÁ·Î½ÃÀú¸¦ ÀÛ¼ºÇغ¾½Ã´Ù.#include <WSDmouse.h> //WSEV_MOUSE_PRESS(MOUSE-PRESS) Æ®¸®°Å(trigger)·Î ¶óº§¿¡ ¼³Á¤ÇÕ´Ï´Ù. void cbop(WSCbase* object){ //(0) ¸¶¿ì½º ´ÜÃß1¿Ü´Â µÇµ¹¾Æ°¨ if ( (WSGIappMouse()->getMouseStatus() & WS_MOUSE_BTN1) == 0){ return; } //(A)WSNuserValue ¼Ó¼º¿¡ ±â¾ïµÇ¿©ÀÖ´Â ¼ýÀÚ¸¦ Ãëµæ long value = object->getProperty(WSNuserValue); //(B)±× ¼ýÀÚ¸¦ ¼¼¾î ¿Ã¸² value++; //(C)±× ¼ýÀÚÀÇ Ç¥½Ã object->setProperty(WSNlabelString,value); //(D)WSNuserValue ¼Ó¼º¿¡ ¿Ã¸° ¼ýÀÚ¸¦ ±â¾ï½ÃÅ´ object->setProperty(WSNuserValue,value); }ÀÌ À̺¥Æ® ÇÁ·Î½ÃÀú´Â WSCvbtn,WSCvlabel µîÀÇ WSNlabelString ¼Ó¼ºÀ» °¡Áö´Â °´Ã¼¿¡ MOUSE-PRESS Æ®¸®°Å(trigger)·Î ¼³Á¤ÇÕ´Ï´Ù. °´Ã¼À§¿¡¼ ¸¶¿ì½º°¡ Ŭ¸¯µÉ¶§¸¶´Ù ÀÌ ÇÔ¼ö´Â ±âµ¿µË´Ï´Ù. À̺¥Æ® ÇÁ·Î½ÃÀú°¡ ±âµ¿µÇ¸é (0)¿¡¼ ¸¶¿ì½º ´ÜÃßÀÇ ÆÇÁ¤À» ½ÇÇàÇÏ°í ¸¶¿ì½º ´ÜÃß1¿ÜÀÇ ´ÜÃß¿´´õ¶ó¸é µÇµ¹¸³´Ï´Ù. ¸¶¿ì½º ´ÜÃß ÆÇÁ¤ÀÇ Âü°í·Î ÇØ ÁֽʽÿÀ.
´ÙÀ½¿¡ (A)·Î WSNuserValue¼Ó¼º¿¡ ±â¾ïµÇ¿©ÀÖ´Â ¼ýÀÚ¸¦ ÃëµæÇÕ´Ï´Ù. WSNuserValue ¼Ó¼ºÀÇ ÃʱâÄ¡´Â 0À¸·Î, »ç¿ëÀÚ°¡ °ªÀ» ÀÚÀ¯·ÎÈ÷ ÁöÁ¤Çؼ º¸Áö ÇÒ¼ö ÀÖ½À´Ï´Ù. ¿©±â¼ °´Ã¼¿¡ ±â¾ï½ÃÄѳõÀº°ÍÀº ´Ù¼öÀÇ °´Ã¼¿¡ ºÙ¿©³õ¿´À»¶§ °¢°¢ÀÇ ¶óº§ÀÇ ¼ýÀÚ°¡ ¼¯¿©ÁöÁö¾Êµµ·Ï ÇϱâÀ§ÇؼÀÔ´Ï´Ù. ¹Ý´ë·Î Á¤Àû º¯¼öµî¿¡¼ º¸ÁöÇϵµ·Ï ÀÛ¼ºÇÏ¸é ¸ðµç ¶óº§¿¡¼ ÇϳªÀÇ ¼ýÀÚ¸¦ »ç¿ëÇÑ Ç¥½Ã¸¦ ÇÒ¼öÀÖ½À´Ï´Ù.
´ÙÀ½¿¡ (B)¿¡¼ ±× ¼ýÀÚ¸¦ ¼¼¾î ¿Ã·Á (C)¿¡¼ Ç¥½ÃÇÕ´Ï´Ù. (D)·Î Ç¥½ÃÇÑ ¼ýÀÚ¸¦ WSNuserValue¼Ó¼º¿¡ º¸ÁöÇÏ¿©, ´ÙÀ½¹øÀÇ À̺¥Æ® ÇÁ·Î½ÃÀú ±âµ¿¿¡ ÁغñÇÕ´Ï´Ù.
Ȥ½Ã ÀÌ ÇÁ·Î½ÃÀú°¡ Æ®¸®°Å(trigger),MOUSE-IN ·Î ºÙ¿©³õÀÎ °æ¿ì´Â, ¸¶¿ì½º°¡ ÃâÀÔÇÑ È¸¼ö¸¦ Ç¥½ÃÇϰԵ˴ϴÙ.
¸¶¿ì½º·Î ¼±Åð¡´ÉÇÑ ¶óº§·Î Çϱ⿡´Â
´ÙÀ½Àº ¼±Åð¡´ÉÇÑ ¶óº§À» ÀÛ¼ºÇغ¾½Ã´Ù. ¶óº§ÀÌ ¼±ÅõȰÍó·³ º¸À̵µ·Ï »öÀ» º¯È½ÃÄѺ¾½Ã´Ù. ¿©±â¼´Â WSNuserValue ¼Ó¼ºÀÇ ´ë½Å set/getUserData() ÇÔ¼ö¸¦ ½á¼ ¼±ÅûóŸ¦ º¸ÁöÇÕ´Ï´Ù.//WSEV_MOUSE_PRESS(MOUSE-PRESS) Æ®¸®°Å(trigger)·Î ¶óº§¿¡ ¼³Á¤ÇÕ´Ï´Ù. void cbop(WSCbase* object){ //(A) getUserData() ·Î ±â¾ïÇÏ´Â °ªÀ» Ãëµæ long value = (long)object->getUserData("STATUS"); //(B) value °¡ 0À̸ç´Â ¼±ÅûóÅ·Î, 1À̸ç´Â ¿ø·¡ Ç¥½Ã»óÅ·ΠµÇµ¹¸°´Ù if (value == 0){ //(C)¿ù·¡»ö¸íĪ( ¹®ÀÚ¿)À» WSNuserString ·Î ±â¾ïÇØ³õ´Ù WSCvariant color = object->getProperty(WSNbackColor); object->setProperty(WSNuserString,color); //(D) ¼±ÅûöÀÇ Ç¥½Ã$B>uBV(B»óÅ·ΠÇÑ´Ù object->setProperty(WSNbackColor,"slategray4"); //(E)»óŸ¦ ±â¾ïÇÑ´Ù value = 1; object->setUserData("STATUS",(void*)value); }else{ //(F)¿ø·¡»öÀ» ²¨³½´Ù WSCvariant color = object->getProperty(WSNuserString); //(G)¿ø·¡»öÀÇ Ç¥½Ã»óÅ·ΠÇÑ´Ù object->setProperty(WSNbackColor,color); //(H)»óŸ¦ ±â¾ïÇÑ´Ù value = 0; object->setUserData("STATUS",(void*)value); } }ÀÌ À̺¥Æ® ÇÁ·Î½ÃÀú´Â WSCvbtn,WSCvlabel µîÀÇ WSNlabelString ¼Ó¼ºÀ» °¡Áö´Â °´Ã¼¿¡ MOUSE-PRESS Æ®¸®°Å(trigger)·Î ¼³Á¤ÇÕ´Ï´Ù.
À̺¥Æ® ÇÁ·Î½ÃÀú°¡ ±âµ¿µÇ¸é (A)¿¡¼ setUserData() ÇÔ¼ö°¡ ±â¾ïÇÏ´Â ¼ýÀÚ¸¦ ÃëµæÇÕ´Ï´Ù. set/getUserData() ÇÔ¼öÀÇ ÃʱâÄ¡´Â0À¸·Î »ç¿ëÀÚ°¡ °ªÀ» ÀÚÀ¯·ÎÈ÷ ÁöÁ¤Çؼ º¸ÁöÇÒ¼öÀÖ½À´Ï´Ù. ÁÁÀº À̸§À» ºÙ¿©¼ ÀÓÀÇÀÇ °ªÀ» void* ÇüÀ¸·Î º¸ÁöÇÒ¼ö°¡ ÀÖ½À´Ï´Ù.
´ÙÀ½¿¡ (B)¿¡¼ ±× °ªÀ» ÆÇº°ÇÏ´Ù°¡, (C)¿¡¼ ´ÙÀ½¹ø¿¡ ¿ø·¡»öÀ¸·Î Ç¥½Ã¸¦ µÇµ¹¸®±â¿¡ ¼Ó¼º WSNuserString ·Î ±â¾ïÇØ³õ½À´Ï´Ù. ´ÙÀ½ (D) ¿¡¼ ¼±ÅûöÀ¸·ÎÀÇ Ç¥½Ã»óÅ·ΠÇÏ´Ù°¡, (E)·Î¼ ¼±ÅûóŸ¦ ´Ù½Ã º¸ÁöÇÕ´Ï´Ù.
¿ø·¡»öÀ¸·Î µÇµ¹¸®´Â ´Ü°è´Â (F)·Î¼ º¸ÁöÇØ³õÀº ¿ø·¡ Ç¥½Ã»öÀ» ÃëµæÇØ¼ (G)·Î ±× »öÀ» ¹Ý¿µÇÕ´Ï´Ù. ±×·¡¼ (H)¿¡¼ ¶Ç ¼±ÅûóŸ¦ º¸ÁöÇÕ´Ï´Ù.¸¶¿ì½º·Î °Á¶Ç¥½ÃÇÏ´Â ¶óº§·Î Çϱ⿡´Â
¸¶¿ì½ºÀÇ ÃâÀÔÀ¸·Î °Á¶Ç¥½ÃÇÏ´Â À̺¥Æ® ÇÁ·Î½ÃÀú¸¦ ¸¸µé¾îº¾½Ã´Ù. °´Ã¼À§¿¡ ¸¶¿ì½º°¡ µé¾î¿À¸é °Á¶Ç¥½ÃÇϰí, ¸¶¿ì½º°¡ ³ª°¡¸é µÇµ¹¾Æ°¡´Â À̺¥Æ® ÇÁ·Î½ÃÀú·Î µË´Ï´Ù.
¿©±â¼ Áß¿äÇѰÍÀº ¸¶¿ì½º°¡ µé¾î°£ °æ¿ì¿¡ ¹ß»ýÇÏ´Â Æ®¸®°Å(trigger)¿Í ¸¶¿ì½º°¡ ³ª°£ °æ¿ì¿¡ ¹ß»ýÇÏ´Â Æ®¸®°Å(trigger)¿¡ °¢°¢ À̺¥Æ® ÇÁ·Î½ÃÀú¸¦ ¼³Á¤ÇÏ´Â À̺¥Æ® ÇÁ·Î½ÃÀú¸¦ ÀÛ¼ºÇÑ´Ù´Â Á¡¿¡ ÀÖ½À´Ï´Ù.
Áï ÃʱâÈ·Î À̺¥Æ® ÇÁ·Î½ÃÀú°¡ ±âµ¿µÇ¿©, ±×¼Ó¿¡¼ »õ·Î¿î À̺¥Æ® ÇÁ·Î½ÃÀú¸¦ ¼³Á¤ÇÔÀ¸·Î¼ º¹¼öÀÇ À̺¥Æ® ÇÁ·Î½ÃÀúÀÇ ¼³Á¤À» ÇϳªÀÇ À̺¥Æ® ÇÁ·Î½ÃÀúÀÇ ¼³Á¤À¸·Î ½ÇÇöÇÏ´Â Á¡ÀÔ´Ï´Ù.//¼ºêEP1 // ¸¶¿ì½º µé¾î°¨ void subop1(WSCbase* object){ //(A)¿ø·¡»ö ¸íĪÀ» WSNuserString ¼Ó¼º¿¡ ±â¾ï½ÃŲ´Ù WSCvariant color = object->getProperty(WSNbackColor); object->setProperty(WSNuserString,color); //(B) ¼±ÅûöÀÇ Ç¥½Ã»óÅ·ΠÇÑ´Ù object->setProperty(WSNbackColor,"slategray4"); } //¼ºêEP2 // ¸¶¿ì½º ³ª°¨ void subop2(WSCbase* object){ //(C)¿ø·¡»ö ¸íĪÀ» ²¨³½´Ù WSCvariant color = object->getProperty(WSNuserString); //(D)¿ø·¡ Ç¥½Ã»óÅ·ΠÇÑ´Ù object->setProperty(WSNbackColor,color); } //WSEV_INIT(INITIALIZE) Æ®¸®°Å(trigger)·Î ¶óº§¿¡ ¼³Á¤ÇÑ´Ù. void cbop(WSCbase* object){ // ÃʱâÈ Æ®¸®°Å(trigger)°¡ ¹ß»ýÇÏ¿© ½ÇÇàµÇ¸é //¼ºêEP¸¦ °¢°¢ »õ·Î ¼³Á¤ÇÕ´Ï´Ù. //(E) À̺¥Æ® ÇÁ·Î½ÃÀúÀÇ ½Å±Ô ¼³Á¤ //¼ºêEP1 //OP¸íĪ="°Á¶OP1" ±âµ¿ Æ®¸®°Å(trigger)=WSEV_MOUSE_IN ÇÔ¼ö=subop1 WSCprocedure* ac1 = new WSCprocedure("°Á¶OP1",WSEV_MOUSE_IN); ac1->setFunction(subop1,"subop1"); object->addProcedure(ac1); //(F) À̺¥Æ® ÇÁ·Î½ÃÀúÀÇ ½Å±Ô ¼³Á¤ //¼ºêEP2 //OP¸íĪ="°Á¶OP2" ±âµ¿ Æ®¸®°Å(trigger)=WSEV_MOUSE_OUT ÇÔ¼ö=subop2 WSCprocedure* ac2 = new WSCprocedure("°Á¶OP2",WSEV_MOUSE_OUT); ac2->setFunction(subop2,"subop2"); object->addProcedure(ac2); }¼ºêEP1´Â WSEV_MOUSE_INÀÇ Æ®¸®°Å(trigger)·Î ±âµ¿µÇ¿© ¶óº§ÀÇ ¹è°æÇ¥½Ã»öÀ» °Á¶»öÀ¸·Î ÇÕ´Ï´Ù. ¼ºêEP2´Â WSEV_MOUSE_OUTÀÇ Æ®¸®°Å(trigger)·Î ±âµ¿µÇ¿© ¶óº§ÀÇ ¹è°æÇ¥½Ã»öÀ» ¿ø·¡ »öÀ¸·Î µÇµ¹¸³´Ï´Ù. À̺¥Æ® ÇÁ·Î½ÃÀúº»Ã¼´Â ÃʱâÈ Æ®¸®°Å(trigger)·Î °´Ã¼¿¡ ¼³Á¤µÇ¿©ÀÖÀ¸¸ç (E),(F)¿¡¼ ¼ºêEP1,2¸¦ °´Ã¼¿¡ ¼³Á¤ÇϰíÀÖ½À´Ï´Ù. ÀÌÈÄ ¸¶¿ì½º°¡ ÃâÀÔÀ»ÇÏ¸é »õ·Î ÇÁ·Î±×·¥ÀÇ ¾È¿¡¼ ¼³Á¤µÈ ¼ºêEP°¡ ½ÇÇàµÇµµ·Ï µË´Ï´Ù.¸¶¿ì½º·Î ¼±Åð¡´ÉÇÑ ±×·ìÈµÈ ¶óº§·Î Çϱ⿡´Â
°°Àº ¿¡¸®¾îÀ§¿¡ ¹èÄ¡µÇ´Â ¶óº§À» ¸¶¿ì½º·Î ¼±Åð¡´ÉÇÑ ±×·ìÈµÈ ¶óº§¿¡ÇÏ´Â À̺¥Æ® ÇÁ·Î½ÃÀú¸¦ ½ÇÁ¤Çϱ⿡´Â ¸¶¿ì½º·Î ¼±ÅÃµÈ ¶óº§À» ÇÔ¸ôÇÑ »óÅÂ·Î ÇØ³õ°í ±× ¿¡¸®¾î¿¡ ¾î´À ¶óº§ÀÌ ¼±Åõǿ©Àִ°¡¸¦ º¸ÁöÇϵµ·ÏÇÕ´Ï´Ù.//WSEV_MOUSE_PRESS(MOUSE-PRESS) Æ®¸®°Å(trigger)·Î ¶óº§¿¡ ¼³Á¤ÇÕ´Ï´Ù. void cbop(WSCbase* object){ //(A)WSNuserValue ¼Ó¼º¿¡ ¼³Á¤µÇ¿©ÀÖ´Â °ªÀ» ID·Î¼ »ç¿ëÇÑ´Ù long val = object->getProperty(WSNuserValue); //(B) ¼±ÅÃµÈ »óÅÂ(ÇÔ¸ô°ÅÂ)·Î ÇÑ´Ù object->setProperty(WSNshadowType,WS_SHADOW_IN); //(C)ºÎ¸ð°¡ ±â¿ÁÇÏ´Â ¼±Åõǿ©ÀÖ´ø °´Ã¼¸¦ ÃëµæÇÑ´Ù WSCbase* parent = object->getParent(); WSCbase* target = (WSCbase*)parent->getUserData("SelectedItem"); //(D)±× ¼±Åõǿ©ÀÖ´ø °´Ã¼ÀÇ Ç¥½Ã»óŸ¦ ¿ø·¡»óÅÂ(µ¹Ãâ»óÅÂ)·Î µÇµ¹¸°´Ù if (target != NULL){ target->setProperty(WSNshadowType,WS_SHADOW_OUT); } if (target == object){ //(E) ¼±ÅÃÇϰíÀÖ´Â °´Ã¼¸¦ ´Ù½Ã Ŭ¸¯ÇÑ °æ¿ì //µÎ¹øÂ°ÀÇ °æ¿ì´Â ¿Ö¿ì°íÀÖ´ø ÀÚ½ÅÀ» 0À¸·ÎÇØ¼ Ä¡¿î´Ù parent->setUserData("GroupValue",(void*)0); parent->setUserData("SelectedItem",(void*)0); }else{ //(F)ù¹øÂ°ÀÇ °æ¿ì´Â ÀÚ½ÅÀ» ºÎ¸ð¿¡ ±â¾ï½ÃÅ´. parent->setUserData("GroupValue",(void*)val); //ID parent->setUserData("SelectedItem",(void*)object); //WSCbase* Æ÷ÀÎÅÍ } }±×·ìÈÇÏ´Â ¶óº§µé¿¡ °¢°¢À» ½Äº°ÇÒ ID°¡ ÇÊ¿äÇÏÁö¸¸ WSNuserValue ¼Ó¼º¿¡ ¼³Á¤µÇ¿©ÀÖ´Â °ªÀ» ID ·Î »ç¿ëÇÏ´õ·ÏÇսôÙ.
(A)¿¡¼ WSNuserValue ¼Ó¼º¿¡ ¼³Á¤µÇ¿©ÀÖ´Â ID ¸¦ ÃëµæÇÕ´Ï´Ù.
(B)¿¡¼´Â ¼±ÅõȰÍÀ» Ç¥½ÃÇϱâÀ§ÇØ ÇÔ¸ôƲ Ç¥½Ã·Î ÇÕ´Ï´Ù.
(C)·Î¼ ¼±Åõǿ©ÀÖ´ø °´Ã¼¸¦ ÃëµæÇÕ´Ï´Ù. ¾î´À °´Ã¼³ª ¹®Á¦¾øÁö¸¸ ÀÌ ¿¹ÀÇ °æ¿ì, ±×·ìÈÇÏ´Â ¶óº§µé¿¡ °øÅëÀÎ ºÎ¸ð°´Ã¼¿¡ ±â¾ï½Ã۵µ·ÏÇÕ´Ï´Ù.
(D)´Â ¼±Åõǿ©ÀÖ´ø °´Ã¼ÀÇ Ç¥½Ã»óŸ¦ ¿ø·¡ÀÇ µ¹Ãâ»óÅ¿¡ µÇµ¹¸³´Ï´Ù.
(E)·Î ¼±Åõǿ©ÀÖ´ø °´Ã¼(target)¿Í »õ·Î ¼±ÅÃµÈ °´Ã¼(object)°¡ °°Àº°æ¿ì, Ãø µÎ¹ø ¼±ÅÃµÈ »óÅ·ΠµÈ °æ¿ì¿¡´Â ÇØÀúÇÕ´Ï´Ù. ºÎ¸ð¿¡ ±â¾ï½ÃŲ °ª°ú °´Ã¼¸¦ Ä¡¿ó´Ï´Ù.
(F)¿¡¼´Â »õ·Î ¼±ÅÃµÈ °´Ã¼¿Í ±× °ªÀ» ºÎ¸ð¿¡ ±â¾ï½Ãŵ´Ï´Ù.
Copyright(C) WideStudio/MWT Development Team, 1999-2005 | Last modified: Jul 31, 2005 |