WideStudio/MWT Logo
WideStudio/MWT
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)¿¡¼­´Â »õ·Î ¼±ÅÃµÈ °´Ã¼¿Í ±× °ªÀ» ºÎ¸ð¿¡ ±â¾ï½Ãŵ´Ï´Ù.

Document Release 3.90 for WideStudio/MWT ver 3.90, Jul 2005


WideStudio/MWT documents index | Table of contents

Copyright(C) WideStudio/MWT Development Team, 1999-2005 Last modified: Jul 31, 2005