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 類別(GUI1 和 GUI2)及一些執行事物的類別(Huey 和 Louey)來建立應用程式。 在 Rational Rhapsody 中建立所有類別,以便動畫顯示所有四個類別的實例。
將某個 GUI 與類別 GUI1 和 GUI2 建立關聯。 因為使用 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)); \
} \
}