鍩轟簬ActiveX鎺т歡鐨?/span>DirectX娓告垙寮鍙?/span>
騫沖父寮鍙?/span>DirectX娓告垙鍩烘湰鏄敤SDK鎴栬?/span>MFC錛屽叧浜庝袱鑰呯殑寮鍙戞兂蹇呭ぇ瀹墮兘鏈変簡寰堝鐨勪簡瑙o紝浣嗘槸鍩轟簬ActiveX鎺т歡鐨?/span>DirectX娓告垙寮鍙戠綉涓婂茍涓嶅瑙侊紝榪戞棩鏈夊叴瓚g爺絀朵簡涓涓嬶紝灝忔湁鎴愭灉錛屼笉鏁㈢嫭浜紝灝忛檮鏂囩珷錛屽笇鏈涜兘璧峰埌鎶涚爾寮曠帀鐨勫姛鏁堛?/span>
鎴戦夌敤WIN2K錛?/span>VC6錛?/span>DirectX8浣滀負寮鍙戝鉤鍙幫紝棣栧厛鍒涘緩MFC ActiveX ControlWizard錛屽亣璁懼伐紼嬪悕涓?/span>DIG錛堝洜涓哄湪鍋氫竴涓悕涓?/span>Digger鐨勬父鎴忥紝鏁呭彇姝ゅ悕錛夈傜紪鍐?/span>ActiveX鎺т歡瑕佹眰璧勬簮蹇呴』閲婃斁瀹屽叏錛岃涓嶄粬浼氱粰浣犲悇縐嶅悇鏍風殑楹葷儲錛岄敊璇彁紺烘鍙彯鍜氬挌鍝嶏紝浼氳浣犳劅鍒拌繖涓笘鐣岄兘鏆椾簡錛屽洜姝や竴瀹氳娉ㄦ剰璧勬簮鐨勭鐞嗭紝瀹為檯涓?/span>C錛嬶紜瑕佹眰紼嬪簭鍛樺璧勬簮鐨勭鐞嗘湰鐪佸氨鏄緢楂樼殑錛岀畻鎴戝璦浜嗐?/span>
瀹屾垚浜嗚繖浜涙楠ゅ悗錛屽湪鍒濆鍖?/span>DirectX鏃舵垜閬囧埌浜嗕竴涓洶闅撅紝鏃犳硶鍙栧緱HWND錛屾病鏈夎繖涓庝箞鍒濆鍖?/span>D3D璁懼鍛紝鍦ㄥ悇涓被涓悳绱簡鍗婂ぉ錛岀粓浜庡湪闅愮鐨勫湴鏂瑰彂鐜頒簡榪欎釜鍙ユ焺錛屽湪OnDraw鍑芥暟涓殑CDC* pdc鍙互闂存帴寰楀埌榪欎釜鍙ユ焺錛?/span>pdc->GetWindow()->m_hWnd銆?/span>
寰楀埌鍙ユ焺鍚庡垵濮嬪寲DirectX璁懼錛岃繖閲屾垜閫夋嫨浜?/span>ID3DXSprite浣滀負鍥懼艦鏄劇ず鎺ュ彛錛屽畠鍔熻兘寮哄ぇ錛屾搷浣滅畝鍗曪紝鏀寔緙╂斁銆佸崐閫忔槑銆佹棆杞瓑銆傚洜涓?/span>MFC瀵?/span>Windows娑堟伅榪涜浜嗗皝瑁咃紝涓嶈兘綆鍗曚嬌鐢?/span>SDK閭e娑堟伅澶勭悊紼嬪簭錛堝氨鏄湁娑堟伅澶勭悊娑堟伅錛屾病娑堟伅娓叉煋鍥懼艦錛夈傚鏋滅洿鎺ュ湪OnDraw鍑芥暟涓墽琛屾覆鏌撳嚱鏁幫紝緙栬瘧鍚庡湪ActiveX Control Text Container嫻嬭瘯鏄彲浠ュ彂鐜幫紝鏁翠釜紼嬪簭澶勪簬榪愯鐘舵侊紝浣嗕笉鑳藉ActiveX榪涜澶у皬璋冭妭錛屽茍涓斿浜?/span>ActiveX Control Text Container鐨勬墍鏈夋搷浣滈兘鏄瀬绔粸鍚庣殑錛岃繖鏍峰紑鍙戝嚭鏉ョ殑ActiveX鎺т歡鏄病鏈夋剰涔夌殑錛屾墍浠ュ鎵ц娓叉煋鐨勯偅涓嚱鏁板崟鐙紑涓涓嚎紼嬫槸涓笉閿欑殑閫夋嫨錛岀敤CreateThread鍑芥暟鍒涘緩綰跨▼錛屼簨瀹炶瘉鏄庤繖縐嶅仛娉曟墍寰楀埌鐨?/span>FPS榪樻槸寰堝瑙傜殑錛屽畬鍏ㄨ兘婊¤凍鍦ㄧ綉欏典笂鐩存帴鎻掑叆ActiveX鎺т歡榪涜娓告垙錛屾祴璇曠綉欏典笂鐨勬晥鏋滀篃鏄緢瀹規槗鐨勶紝鎵撳紑FrontPage鎻掑叆ActiveX鎺т歡錛屼笉闇瑕佷竴鍙ヤ唬鐮佸氨瀹屽叏鍏煎錛屾兂璞′竴涓嬶紝榪欐槸涓嶆槸寰堜護浜哄叴濂嬶紝浠庣悊璁轟笂璇寸粷澶ч儴鍒嗗熀浜?/span>DirectX鐨勫皬娓告垙閮藉彲浠ュ仛鎴?/span>ActiveX鎺т歡錛屽叾浠栫殑鎴戞病鏈夎瘯楠岋紝鍚勪綅鍙互鍚勮嚜璇曢獙涓涓嬶紝鏈夋柊鐨勫彂鐜頒笉瑕佸繕浜嗗憡璇夋垜gogoplayer@163.com錛屼互涓嬫槸鐩稿叧鐨勬簮浠g爜錛屼粎渚涘弬鑰冦?/span>
HINSTANCE g_hInst; //瀹炰緥
HWND g_hWnd; //鍙ユ焺
CSSInput g_threadInput; //杈撳叆璁懼
HANDLE g_hThread;
DWORD g_dwThreadID;
bool g_bIsRunning;
bool g_bIsInitialise;
CDIGCtrl::CDIGCtrl()
{
InitializeIIDs(&IID_DDIG, &IID_DDIGEvents);
g_bIsInitialise = false;
// TODO: Initialize your control's instance data here.
}
/////////////////////////////////////////////////////////////////////////////
// CDIGCtrl::~CDIGCtrl - Destructor
CDIGCtrl::~CDIGCtrl()
{
// TODO: Cleanup your control's instance data here.
//閲婃斁
GameRelease();
}
/////////////////////////////////////////////////////////////////////////////
// CDIGCtrl::OnDraw - Drawing function
//娓叉煋鐢ㄧ嚎紼?/span>
void WINAPI ListenThread(void)
{
g_bIsRunning = true;
while (g_bIsRunning == true)
{
g_threadInput.Capture();
if (g_threadInput.IsUp(DIK_ESCAPE))
g_bIsRunning = false;
Render();
}
return;
}
void CDIGCtrl::OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
if (g_bIsInitialise == false)
{
g_hInst = AfxGetInstanceHandle();
g_hWnd = pdc->GetWindow()->m_hWnd;
InitGame();
g_threadInput.Create(g_hInst, g_hWnd);
g_bIsInitialise = true;
g_hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ListenThread, (void *)this, 0, &g_dwThreadID);
}
}
鍦ㄦ枃绔犵殑鏈鍚庯紝鎴戣繕鐢?/span>VB嫻嬭瘯浜嗚繖涓?/span>ActiveX鎺т歡錛屾晥鏋滃緢濂斤紝杞昏交涓鍒掞紝涓涓獥浣擄紝涓涓帶浠訛紝0琛屼唬鐮佸疄鐜版父鎴忥紝榪欐劅瑙夛紝鐖姐?/span>