RiCGEN_BY_X() 或 CGEN_BY_X()

RiCGEN_BY_X() 陳述式會產生事件,並在識別事件寄件者時將其傳送給實例。

RiCGEN_BY_X()CGEN_BY_X() 的效果相同。任一陳述式都可用於傳送廣域函數中的事件。

RiCGEN_BY_X() 使用 RiCReactive_genBySender() 架構常式來傳送事件,因為它將特殊物件識別為事件的寄件者。

例如,若要在將事件寄件者識別為 Room[2] 時,將 fault() 事件傳送至 Furnace[1] 實例,請使用:

RiCGEN_BY_X(Furnace[1], fault(), Room[2], Room);

最後一個引數(在此案例中為 Room)可識別寄件者的類型。

只將 GEN_BY_X 用於您知道是哪個 AOMAnimationItem 在傳送訊息的特殊情況,因為 IBM® Rational® Rhapsody® 在沒有協助時無法確定原因。例如,您可以使用一些 GUI 類別(GUI1GUI2)及一些執行事物的類別(HueyLouey)來建立應用程式。 在 Rational Rhapsody 中建立所有類別,以便動畫顯示所有四個類別的實例。

將某個 GUI 與類別 GUI1GUI2 建立關聯。 因為使用 MFC 精靈比使用 Rational Rhapsody 更易建立 GUI,請使用精靈。GUI1 的建構子會建構具有一些按鈕的無限制模式的對話框。

配置每個按鈕來產生事件。 例如:

void myDialog::OnButtonXPushed() {
   myHuey->GEN(E);
}

這個配置會運作(除了動畫不知道事件來源之外)。可以改而採取下列方式使用 GEN_BY_GUI

void myDialog::OnButtonXPushed() {
   myHuey->GEN_BY_GUI

動畫輸出視窗顯示下列訊息:

event E generated by GUI

如果類別 myDialog 具有指向它隸屬之 GUI1 實例的 GUI1 *myOwner 方法,則您可以撰寫:

void myDialog::OnButtonXPushed() {
   myHuey->GEN_BY_X(E,myOwner);
}

在這個案例中,動畫(輸出視窗、事件佇列及序列圖)將 E 顯示為來自正確的 GUI1 物件。如果 GUI 及其對話框是測試控制工具,用來建立尚未撰寫的真實類別,則這個方法尤其有用。

RiCGEN_BY_X() 的定義如下所示:

#define RiCGEN_BY_X(INSTANCE,EVENT,SENDER,theClass)        \
{                                                          \
   if ((INSTANCE) != NULL) {                               \
      RiCReactive * reactive = &((INSTANCE)->ric_reactive);\
      RiCEvent * event = &(RiC_Create_##EVENT->ric_event); \
      RiCReactive_genBySender(reactive, event,             \
         aomX2Item(SENDER,aomc##theClass));                \
   }                                                       \
}

意見回饋