新增自定義事件
首先osg在其內部通過osgga::eventqueue類維護了乙個事件佇列,佇列中的每乙個事件都是乙個osgga::guieventadapter物件(這個物件是用來存放所系統捕捉到的事件),在**迴圈階段被系統捕捉到的所有事件都會被新增到這個事件佇列中,之後會有乙個事件遍歷過程,在這個過程中實際上就是遍歷這個事件佇列,並且對事件佇列中的每乙個事件,它都會與我們在事件處理類中方法進行響應(如果事件處理類中沒有對這個事件的處理則不會響應)。
(此**來自於王銳老師的beginner『s guide中240頁)
struct timerinfo : public osg::referenced
unsigned int _count;
};
bool timerhandler::handle( const osgga::guieventadapter& ea,
osgga::guiactionadapter& aa )
} _count++;
break;
case osgga::guieventadapter::user:
if ( _switch.valid() )
break;
default:
break;
} return false;
}
在上面這個handle函式中,我們定義了對兩個事件的處理,乙個為frame事件,另乙個為user事件,在frame事件的處理中,首先判斷_count值是否能被100整除(在每乙個frame事件中都會使_count值加一),即每過100幀就會執行一遍if語句下面的內容。在if語句中,它通過呼叫userevent方法將事件加入到事件佇列中。
上面的是userevent函式的實現原始碼,我們可以看到在呼叫userevent方法時,其函式內部的實現如上,首先設定事件型別為user(即我們用此方法新增到事件佇列中的事件的型別為user),其次呼叫setuserdata方法設定使用者資料,之後設定時間,最後通過addevent方法將其新增到事件佇列中去。這樣我們就能在事件處理的handle函式中對此事件進行響應了。
osg中新增自定義事件UserEvent
新增自定義事件 首先osg在其內部通過osgga eventqueue類維護了乙個事件佇列,佇列中的每乙個事件都是乙個osgga guieventadapter物件 這個物件是用來存放所系統捕捉到的事件 在 迴圈階段被系統捕捉到的所有事件都會被新增到這個事件佇列中,之後會有乙個事件遍歷過程,在這個過...
自定義控制項新增事件
事件,委託,總是看起來有點繞,不過本文不介紹這些,只說說如何為自定義控制項新增自定義事件。本文所說的自定義控制項,非繼承其他現有microsoft控制項或者組合控制項,而是完全繼承usercontrol的東西。既然不是繼承自其他現有控制項或者控制項組合,在特定需求下,有新增自定義事件的可能性,或者對...
新增自定義事件以及對osg事件佇列的簡單理解
新增自定義事件 首先osg在其內部通過osgga eventqueue類維護了乙個事件佇列,佇列中的每乙個事件都是乙個osgga guieventadapter物件 這個物件是用來存放所系統捕捉到的事件 在 迴圈階段被系統捕捉到的所有事件都會被新增到這個事件佇列中,之後會有乙個事件遍歷過程,在這個過...