²é¿´: 527  |  »Ø¸´: 6
µ±Ç°Ö÷ÌâÒѾ­´æµµ¡£
µ±Ç°Ö»ÏÔʾÂú×ãÖ¸¶¨Ìõ¼þµÄ»ØÌû£¬µã»÷ÕâÀï²é¿´±¾»°ÌâµÄËùÓлØÌû

zsglly

ľ³æ (ÖøÃûдÊÖ)

[½»Á÷] DircetDraw c/c++ ʹÓÃÖ¸µ¼

ÕâÊÇһϵÁеÄDirectDrawµÄÖ¸ÄÏ,½ÌÄãÒ»²½²½µÄÈ¥¹¹½¨Ò»¸ö¼òµ¥µÄDirectDrawÓ¦ÓÃ.Õâ¸öÖ¸ÄÏÓõ½ÁËsdk°üÌṩµÄºÜ¶àDirectDrawµÄÀý×Ó.ÕâЩÀý×ÓչʾÁËÔõÑùÉèÖÃDirectDraw,ÔõÑùÓÃDirectDraw·½·¨ÊµÏÖÒ»°ãÈÎÎñ:

×¢Òâ:ÕâЩָÄÏÖеÄÀý×ÓÊÇÓÃc++дµÄ.Èç¹ûÄãʹÓõÄÊÇc±àÒëÆ÷,Çë½øÐÐÊʵ±µÄ¸Ä±ä,ÒÔÄܽøÐгɹ¦µÄ±àÒë.ÄãÐèÒª°ÑvtableºÍthisÖ¸ÕëÌí¼Óµ½½Ó¿Ú·½·¨ÖÐ.

1.DirectDraw»ù´¡Ó÷¨

ҪʹÓÃDirectDraw,Äã±ØÐëÏÈ´´½¨Ò»¸ö´ú±í¼ÆËã»úÏÔʾ½Ó¿ÚµÄDirectDrawʵÀý.È»ºó,Äã¾Í¿ÉÒÔͨ¹ý½Ó¿ÚµÄ·½·¨À´²Ù×ÝÕâ¸ö¶ÔÏó.Äã¿ÉÄÜ»áÐèÒª´´½¨Ò»¸ö»ò¸ü¶àµÄDirectDrawÆ½Ãæ¶ÔÏó(DirectDraw surface object)µÄʵÀý
À´ÔÚͼÐÎÉ豸ÉÏÏÔʾÄãµÄÓ¦ÓóÌÐò.

ΪÁËÑÝʾÕâ¸ö,Àý×ÓDDEx1 sample((SDK root)\Samples\Multimedia\DDraw\Src\Ddex1)ÑÝʾÁËÒÔϼ¸²½:

step 1:´´½¨Ò»¸öDirectDraw¶ÔÏó
Ïë´´½¨Ò»¸öDirectDraw¶ÔÏóµÄʵÀý,ÄãµÄÓ¦ÓóÌÐò±ØÐëÔÚInitAppº¯ÊýÖÐʹÓÃDirectDrawCreateExº¯Êý,¾ÍÏñÀý³Ìddex1ÖÐÒ»Ñù.DirectDrawCreateExº¯Êý°üÀ¨4¸ö²ÎÊý.µÚÒ»¸öÊÇ:ÏÔʾÉ豸ȫ¾ÖΨһ±êʶ(GUID).GUID´ó²¿·ÖÇé¿öÏÂÊÇÉèΪNULL,Ñ¡ÔñϵͳĬÈϵÄÏÔʾÉ豸.µÚ¶þ¸ö²ÎÊýÊÇ:°üº¬µÄÊDZêʾDirectDraw¶ÔÏóÊÇ·ñ½¨Á¢µÄÖ¸ÕëµÄµØÖ·.µÚÈý¸ö²ÎÊýÊÇIDirectDraw7½Ó¿ÚµÄ²Î¿¼±êʾ.±ØÐëÉèΪIID_IDirectDraw7.µÚËĸö²ÎÊýÊÇÉèÖÃΪNULLµÄ,ÊÇΪÁ˽«À´µÄÀ©Õ¹×ö×¼±¸µÄ.
ÒÔϵÄÀý×ÓչʾÁËÔõÑù´´½¨DirectDraw¶ÔÏó,²¢Åжϴ´½¨ÊÇ·ñ³É¹¦.
hRet = DirectDrawCreateEx(NULL, (VOID**)&g_pDD, IID_IDirectDraw7, NULL);
if(hRet == DD_OK)  
{  
   // g_pDD is a valid DirectDraw object.  
}  
else  
{  
   // The DirectDraw object could not be created.  
}



step2:¾ö¶¨³ÌÐòµÄÐÐΪ
ÔÚÄã¸Ä±äÏÔʾ·½·¨Ç°,Äã±ØÐëÖÁÉÙÔÚIDirectDraw7::SetCooperativeLevelº¯ÊýÖÐÖ¸¶¨dwFlags²ÎÊý(DDSCL_EXCLUSIVE ºÍ DDSCL_FULLSCREEN).ÕâÑù,ÄãµÄÓ¦ÓóÌÐò¾ÍµÃµ½ÁËÏÔʾÉ豸µÄÈ«²¿¿ØÖÆÈ¨,ÆäËûµÄ³ÌÐò²»Äܹ²Ïí.DDSCL_FULLSCREENÈÃÄãµÄÓ¦ÓóÌÐòÔÚÈ«ÆÁĻģʽÏÂÔËÐÐ.ÄãµÄ³ÌÐò¸²¸ÇÁË×ÀÃæ,²¢ÇÒÖ»ÓÐÄãµÄ³ÌÐòÄÜÔÚÆÁÄ»ÉÏÊä³ö.µ«ÊÇ,×ÀÃæÈÔÈ»ÊÇÓÐЧµÄ.(°´ALT+TABÇл»µ½×ÀÃæ)

ÏÂÃæµÄÀý×ÓÑÝʾÁËSetCooperativeLevelº¯ÊýµÄÓ÷¨.
HRESULT       hRet;  
LPDIRECTDRAW7 g_pDD;   // already created by DirectDrawCreateEx

hRet = g_pDD->SetCooperativeLevel(hWnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
if (hRet != DD_OK)
{  
   // Exclusive mode was successful.  
}  
else  
{  
   // Exclusive mode was not successful.  
   // The application can still run, however.  
}

Èç¹û SetCooperativeLevel²»·µ»ØDD_OK,Äã¿ÉÒÔÖ¸¶¨ÎªDDSCL_NORMAL¼ÌÐøÔËÐÐÄãµÄ³ÌÐò.µ«ÊÇ,ÄãµÄ³ÌÐò²»ÔÙÊǶÀռģʽ,¶øÇÒ,¿ÉÄÜ»áÎÞ·¨Íê³ÉÄãµÄÒ»²¿·ÖÒªÇó.ÔÚÕâÖÖÇé¿öÏÂ,Äã×îºÃÏÔʾһ¸ö¶Ô»°¿òÈÃÓû§¾ö¶¨ÊÇ·ñÒª¼ÌÐø.
Èç¹ûÄãÉèÖõÄÊÇÈ«ÆÁÄ»¶ÀÕ¼ºÏ×÷¼¶±ð,Äã±ØÐë°Ñ³ÌÐòµÄ´°¿Ú¾ä±ú´«µÝ¸øSetCooperativeLevel,ÕâÑù¿ÉÒÔÈÃWindowsÓÐÄÜÁ¦¾ö¶¨ÄãµÄ³ÌÐòÊÇ·ñÒì³£ÖÕÖ¹.



step3 :¸Ä±äÏÔʾģʽ
½ÓÏÂÀ´,Äã¿ÉÒÔÓÃIDirectDraw7::SetDisplayModeº¯ÊýÀ´¸Ä±äÏÔʾģʽ.ÏÂÃæµÄÀý×Ó½«ÑÝʾÔõÑù°ÑÏÔʾģʽÉèÖÃΪ640 ¡Á 480 ¡Á 8 bits per pixel (bpp).
HRESULT       hRet;  
LPDIRECTDRAW7 g_pDD;   // already created by DirectDrawCreateEx  

hRet = g_pDD->SetDisplayMode(640, 480, 8, 0, 0);
if (hRet != DD_OK)
{  
   // The display mode changed successfully.  
}  
else  
{  
   // The display mode cannot be changed.  
   // The mode is either not supported or  
   // another application has exclusive mode.  
}

µ±ÄãÉèÖÃÏÔʾģʽµÄʱºò,ÄãÓ¦¸ÃÈ·¶¨Óû§µÄÓ²¼þÊÇ·ñÖ§³ÖÕâÑùµÄģʽ.Äã¿ÉÒÔÉèÖÃÒ»¸öÄܱ»´ó²¿·ÖÏÔʾÊÊÅäÆ÷Ö§³ÖµÄ±ê×¼µÄģʽ.ÀýÈç:ÄãµÄ³ÌÐò¿ÉÒÔÒÔ640 ¡Á 480 ¡Á 8×÷Ϊ±¸Ñ¡Ä£Ê½,Éè¼Æ³ÉΪ¿ÉÒÔÔÚËùÓÐϵͳÉÏÔËÐÐ.
×¢Òâ:IDirectDraw7::SetDisplayMode·µ»ØÒ»¸öDDERR INVALIDMODE´íÎóÖµ,Èç¹ûÏÔʾÊÊÅäÆ÷ÎÞ·¨Çл»µ½ÏëÒªµÄģʽʱ.Äã¿ÉÒÔÔÚÊÔͼ¸Ä±äÏÔʾģʽǰ,ÓÃIDirectDraw7::EnumDisplayModesº¯Êý¿´Ò»ÏÂÓû§ÏÔʾÊÊÅäÆ÷µÄÄÜÁ¦.


step4:´´½¨½»»»Ò³(flipping surface)
ÉèÖÃÍêÏÔʾģʽÒÔºó,ÄãÓ¦¸Ã´´½¨Ò»¸öÆ½Ãæ.Àý³ÌDEx1ÓÃIDirectDraw7::SetCooperativeLevel ÉèÖÃΪ¶Àռģʽ.ËùÒÔ,Äã¿ÉÒÔ´´½¨½»»»Ò³(flipping surfaces).Èç¹ûÄãÉèÖõÄÊÇDDSCL_NORMALģʽ,Äã¿ÉÒÔ´´½¨Ò»¸ö¿ÉÒÔ¿éÒÆ¶¯(blit)µÄÆ½Ãæ.´´½¨½»»»Ò³(flipping surfaces)ÐèÒªÒÔϲ½Öè:
(4.1)¶¨ÒåÐèÇóµÄÆ½Ãæ:
µÚÒ»²½ÊÇÒÔDDSURFACEDESC2½á¹¹¶¨ÒåÒ»¸öÐèÇóµÄÆ½Ãæ.ÏÂÃæµÄÀý×ÓÑÝʾÁ˽ṹµÄ¶¨ÒåºÍ±ê־λµÄÉ趨:
// Create the primary surface with one back buffer.  
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP |
                     DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;

ÔÚÕâ¸öÀý×ÓÖÐ,dwSize³ÉÔ±ÊÇDDSURFACEDESC2½á¹¹µÄ´óС.ÕâÊÇ·ÀÖ¹ÄãÓõ½µÄDirectDraw·½·¨·µ»ØÎÞЧ³ÉÔ±µÄ´íÎó.(dwSizeÊÇ×¼±¸¸ø½«À´µÄDDSURFACEDESC2½á¹¹µÄÀ©Õ¹ÓõÄ)
dwFlags³ÉÔ±¾ö¶¨µÄDDSURFACEDESC2½á¹¹ÖÐÄÇЩ³ÉÔ±½«±»Ìî³äÓÐЧµÄÐÅÏ¢.ÀýÈçÔÚDDEx1ÖÐ,dwFlags±»ÉèΪÄãÏëÒªÓÃDDSCAPS½á¹¹(DDSD_CAPS)ºÍÄãÏë´´½¨Ò»¸öºǫ́»º³å(back buffer)(DDSD_BACKBUFFERCOUNT)
dwCaps³ÉÔ±ÔÚÀý×ÓÖбêʾһ¸ö½«ÒªÔÚDDSCAPS½á¹¹ÖÐʹÓõıê־λ.ÔÚÕâÖÖÇé¿öÏÂ,ËûÖ¸¶¨Ò»¸öÖ÷Æ½Ãæ(primary surface DDSCAPS_PRIMARYSURFACE),Ò»¸ö½»»»Ò³(flipping surface DDSCAPS_FLIP),Ò»¸öºÏ³É±íÃæ(complex surface DDSCAPS_COMPLEX).
×îºó,Àý×ÓÖ¸¶¨ÁËÒ»¸öºǫ́»º³å.ºǫ́»º³å¾ÍÊÇʵ¼ÊµÄ»æÍ¼²Ù×÷ÏÈÔÚÄÇÀïÍê³É,È»ºó,ÔÙ¿ìËٵķ­¶¯(flip)µ½Ö÷Æ½Ãæ(primary surface)ÉÏ.ÔÚDDEx1ÖÐ,ºǫ́»º³åµÄÊýÄ¿ÊÇ1.Æäʵ,ÄãÒªÄãµÄÏÔ´æÔÊÐí,ÄãÏ뽨¼¸¸ö¾Í½¨¼¸¸ö.ÄãÏëÖªµÀ¸ü¶àµÄ¹ØÓÚ´´½¨´óÓÚ1¿é»º³åµÄÐÅÏ¢,¿ÉÒÔÈ¥¿´  "triple buffering".
´´½¨µÄ"Æ½Ãæ"Õ¼ÓõĴ洢¿Õ¼ä,¿ÉÒÔÊÇϵͳÄÚ´æÒ²¿ÉÒÔÊÇÏÔ´æ.Èç¹ûÓ¦ÓóÌÐòʹÓõĿռ䳬³öÁËÏÔ´æ,DirectDraw¾Í»áʹÓÃϵͳÄÚ´æ.(ÀýÈçÄãÖ¸¶¨¶à¿é»º´æÔÚÒ»¸ö½öÓÐ1MBÏÔ´æµÄÊÇÅäÆ÷ÉÏ).ÄãÒ²¿ÉÒÔÕâÑùÉèÖÃDDSCAPS½á¹¹µÄdwCaps³ÉÔ±,Éè³ÉDDSCAPS_VIDEOMEMEORY»òDDCAPS_SYSTEMMEMORYÒÔ´ïµ½Ö»ÓÃÏÔ´æ»òÖ»ÓÃÄÚ´æ.(ÈçÖ¸¶¨ÓÃÏÔ´æ,¶øÏÔ´æ²»¹»,IDirectDraw7::CreateSurface·µ»ØÒ»¸öDDERR_OUTOFVIDEOMEMORY´íÎó)  
(4.2)´´½¨Æ½Ãæ  
ÔÚÌî³äÍêDDSURFACEDESC2½á¹¹ºó,Äã¾Í¿ÉÒÔÓÃËûºÍg_pDDÖ¸Õë(DirectDrawCreateExº¯Êý´´½¨µÄDirectDraw¶ÔÏóµÄÖ¸Õë)µ÷ÓÃIDirectDraw7::CreateSurface·½·¨,¾ÍÏñÏÂÃæ :
hRet = g_pDD->CreateSurface(&ddsd, &g_pDDSPrimary, NULL);
if (hRet != DD_OK)
{  
   // g_pDDSPrimary points to the new surface.  
}  
else  
{  
   // The surface was not created.  
   return FALSE;  
}
g_pDDSPrimary²ÎÊý½«Ö¸ÏòÓÉCreateSurfaceº¯Êý·µ»ØµÄÖ÷Æ½Ãæ(primary surface)µÄµØÖ·,Èç¹ûµ÷Óóɹ¦µÄ»°.
Ö¸ÏòÖ÷Æ½Ãæ(primary surface)µÄÖ¸ÕëÓÐЧºó,¾Í¿ÉÒÔµ÷ÓÃIDirectDrawSurface7::GetAttachedSurface·½·¨È¥µÃµ½Ò»¸öÖ¸Ïò»º³åµÄÖ¸Õë.ÈçÏÂ:
ZeroMemory(&ddscaps, sizeof(ddscaps));
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
hRet = g_pDDSPrimary->GetAttachedSurface(&ddscaps, &g_pDDSBack);
if (hRet != DD_OK)
{  
   // g_pDDSBack points to the back buffer.  
}  
else  
{  
   return FALSE;  
}
Èç¹ûIDirectDrawSurface7::GetAttachedSurfaceµ÷Óóɹ¦,g_pDDSBack²ÎÊý½«Ö¸Ïò»º´æÇø.



step5:ÔÚÆ½ÃæÉÏÊä³ö
ÔÚÖ÷Æ½Ãæ(primary surface)ºÍºǫ́»º³å(back buffer)´´½¨Íê³Éºó,Àý×ÓDDEx1ÓÃwindows±ê×¼GDIº¯ÊýÊä³öÁËһЩÎı¾ÔÚ»º³åÉÏ.ÈçÏÂ:
if (g_pDDSBack->GetDC(&hdc) == DD_OK)
   {
       SetBkColor(hdc, RGB(0, 0, 255));
       SetTextColor(hdc, RGB(255, 255, 0));
       if (phase)
       {
           GetClientRect(hWnd, &rc);
           GetTextExtentPoint(hdc, szMsg, lstrlen(szMsg), &size);
           TextOut(hdc, (rc.right - size.cx) / 2, (rc.bottom - size.cy) / 2,
                   szMsg, sizeof(szMsg) - 1);
           TextOut(hdc, 0, 0, szFrontMsg, lstrlen(szFrontMsg));
           phase = 0;
       }
       else
       {
           TextOut(hdc, 0, 0, szBackMsg, lstrlen(szBackMsg));
           phase = 1;
       }
       g_pDDSBack->ReleaseDC(hdc);
   }

Õâ¸öÀý×ÓʹÓÃthe IDirectDrawSurface7::GetDC·½·¨»ñµÃÉ豸ÉÏÏÂÎĵľä±ú,²¢ÇÒ,ΪÁË×¼±¸Ð´Èë,½«»º³åÉÏËø.Èç¹ûÄã²»×¼±¸ÓÃÐèÒªÉ豸ÉÏÏÂÎľä±úµÄwindowsº¯Êý,Äã¿ÉÒÔʹÓÃIDirectDrawSurface7::Lock  IDirectDrawSurface7::Unlock·½·¨¼Ó½âËø.
½ÓÏÂÀ´,phase±äÁ¿¾ö¶¨ÁËÓ¦¸ÃÊä³öµ½Ö÷»º´æÏûÏ¢(primary buffer message)»¹ÊǺǫ́»º´æÏûÏ¢(back buffer message).Èç¹ûphase=1,Êä³ö
Ö÷»º´æÏûÏ¢,ÇÒÉèphase=0.Èç¹ûphase=0,Êä³öºǫ́»º´æÏûÏ¢,ÇÒÉèphase=1.
µ±ÏûÏ¢Êä³öµ½»º´æÇøºó,ÓÃIDirectDrawSurface7::ReleaseDC ·½·¨½«»º´æÇø½âËø.
¶Ô´´½¨Æ½ÃæµÄÄÚ´æÉÏËø,ÊDZ£Ö¤ÄãµÄ³ÌÐòºÍϵͳ²»ÄÜͬʱ¶Ô´ËÄÚ´æ½øÐдæÈ¡.Õâ·ÀÖ¹ÄãдÈë"Æ½Ãæ"ÄÚ´æÊ·¢Éú´íÎó.ÁíÍâ,²»¶Ô"Æ½Ãæ"ÄÚ´æ½âËø,ÄãµÄ³ÌÐò½«ÎÞ·¨·­×ªÆ½Ãæ.
Æ½Ãæ±»¼ÓËøÖ®ºó,Àý×ÓÖÐÓÃÁ˱ê×¼windowsGDIº¯Êý:SetBkColorÉèÖñ³¾°É«,SetTextColorÉèÖÃÔÚ±³¾°ÉÏÏÔʾµÄ×ÖµÄÑÕÉ«,ÓÃTextOutÔÚ"±íÃæ"ÉÏÊä³öÎÄ×ֺͱ³¾°É«.
µ±ÎÄ×Ö±»Êä³öµ½»º´æÖ®ºó,Àý×ÓÓ¦ÓÃIDirectDrawSurface7::ReleaseDC·½·¨½âËø"±íÃæ"²¢ÇÒÊͷžä±ú.²»ÂÛÔÚʲôʱºòÄãµÄ³ÌÐòÍê³ÉÁ˶Իº´æµÄдÈë,Ò»¶¨Òªµ÷ÓÃIDirectDrawSurface7::ReleaseDC »òIDirectDrawSurface7::UnlockÖ®Ò»,¾ßÌåÓÃÄĸö,ÓÉÄãµÄ³ÌÐò¶ø¶¨.²»½âËø,ÄãµÄ³ÌÐò½«²»ÄÜ·­×ªÆ½Ãæ.
×¢Òâ:ÓÃIDirectDrawSurface7::Unlock¶Ô"Æ½Ãæ"½âËøºó,Ö¸Ïò"Æ½Ãæ"µÄÖ¸Õ뽫»áÎÞЧ.Äã±ØÐëÔÙÓÃIDirectDrawSurface7::lockÈ¥»ñµÃÒ»¸öÓÐЧµÄÖ¸Õë.

[ Last edited by »ÃÓ°ÎÞºÛ on 2006-11-29 at 07:56 ]
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

×öÈËÒªºñµÀ°¡£¡ºñµÀ°¡£¡
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

zsglly

ľ³æ (ÖøÃûдÊÖ)

step1:½¨Á¢µ÷É«°å
ÔÚddex2ÖÐ,Ê×ÏÈÓÃÈçÏ´úÂ뽨Á¢µ÷É«°å.
lpDDPal = DDLoadPalette(lpDD, szBackground);  

if (lpDDPal == NULL)  
   goto error;
DDLoadPaletteÕâ¸öº¯ÊýÊÇÔÚ\Dxsdk\sdk\samples\misc\ddutil.cppÖеĹ«¹²directdrawº¯Êý.ºÜ¶àdirectdrawµÄÀý×Ó(sdk°üÖеÄ)¶¼Óõ½Õâ¸öÎļþ.ÖØÒªµÄÊÇ,Ëü°üº¬ÁËÔØÈëµ÷É«°åºÍλͼµÄº¯Êý,ÎÞÂÛÊÇ´ÓÎļþ»¹ÊÇ×ÊÔ´.ΪÁ˲»Öظ´µÄд´úÂë,¾Í°ÑËû·ÅÔÚÁËÒ»¸ö¿ÉÒÔÖØ¸´Ê¹ÓõÄÎļþÖÐ.È·ÐÅÄãÔÚ±àÒëddexnÊǰüº¬ÁËÕâÎļþ.
(ÒÔÏÂÄÚÈÝÔÚddutial.cppÖÐ)ddex2ÖÐ,DDLoadPaletteº¯Êý´Óback.bmpÎļþ´´½¨ÁËDirectDrawPalette¶ÔÏó.DDLoadPaletteº¯ÊýÅжϴ´½¨µ÷É«°åµÄÎļþ»ò×ÊÔ´ÊÇ·ñ´æÔÚ.Èç¹û²»Êǵϰ,¾Í´´½¨Ò»¸öĬÈϵĵ÷É«°å.ÔÚddex2ÖÐ,Ëû´ÓλͼÎļþÌáÈ¡µ÷É«°åÐÅÏ¢²¢´¢´æÔÚÒ»¸öapeÖ¸ÏòµÄ½á¹¹ÖÐ.
DDEx2Ëæºó´´½¨ÁËDirectDrawPalette¶ÔÏó,ÈçÏÂ:
pdd->CreatePalette(DDPCAPS_8BIT, ape, &ddpal, NULL);  
return ddpal;
µ±IDirectDraw7::CreatePalette·½·¨·µ»Ø,ddpal²ÎÊýÖ¸Ïò´ÓDDLoadPaletteº¯Êý·µ»ØµÄDirectDrawPalette¶ÔÏó.
ape²ÎÊýÊÇÒ»¸öÖ¸Õë,Ö¸ÏòÒ»¸öÄܰüº¬»òÕß2»ò4»ò16»ò256¸öÏßÐÔ×éÖ¯µÄ¼Í¼µÄ½á¹¹.¼Ç¼µÄÊýÄ¿ÒÀ¿¿ÓÚCreatePalette·½·¨ÖеÄdwFlags²ÎÊý.ÔÚÉÏÃæµÄÇé¿öÏÂ,dwFlags²ÎÊýÉèΪDDPCAPS_8BIT.Õâ±íʾ½á¹¹ÖÐÓÐ256¸ö¼Ç¼.ÿһÌõ¼Ç¼°üº¬4×Ö½Ú(·Ö±ðÊǺì,ÂÌ,À¼µÄͨµÀºÍÒ»¸ö±ê־λ).








step2:ÉèÖõ÷É«°å
´´½¨Íêµ÷É«°åÒÔºó,ͨ¹ýÖ¸Õëµ÷ÓÃÖ÷Æ½ÃæµÄIDirectDrawSurface7::SetPalette·½·¨,ÈçÏÂ:
ddrval = lpDDSPrimary->SetPalette(lpDDPal);  

if(ddrval != DD_OK)  
   goto error;// SetPalette failed.
ÔÚÄãµ÷ÓÃÍêIDirectDrawSurface7::SetPalette·½·¨Ö®ºó,DirectDrawPalette¶ÔÏó¾ÍÓëDirectDrawSurface¶ÔÏóÁªÏµÆðÀ´ÁË.ʲôʱºòÄãÏë¸Ä±äµ÷É«°åÁË,¿ÉÒÔ¼òµ¥µÄ´´½¨Ò»¸öеĵ÷É«°å,È»ºóÉèÖÃһϾͿÉÒÔÁË.(ËäÈ»ÕâÆªÖ¸µ¼ÓÃÁËÕâЩ²½Öè,Æäʵ»¹ÓÐÆäËûµÄ·½·¨¸Ä±äµ÷É«°å,ÒÔºóµÄÀý×ÓÖн«»áÑÝʾ)




step3:ÔÚ»º´æÇøÔØÈëλͼ
DirectDrawPalette¶ÔÏóÓëDirectDrawSurface¶ÔÏóÁªÏµÆðÀ´Ö®ºó,DDEx2ÓÃÏÂÃæµÄ´úÂëÔÚ»º´æÖÐÔØÈëλͼback.bmp
// Load a bitmap into the back buffer.  
ddrval = DDReLoadBitmap(lpDDSBack, szBackground);  

if(ddrval != DD_OK)  
   // Load failed.
DDReLoadBitmapÊÇÁíÒ»¸öÔÚDdutil.cppÖеĺ¯Êý.ËûÔØÈëÒ»¸öλͼÎļþ»ò×ÊÔ´µ½Ò»¸öÒѾ­´æÔÚµÄDirectDrawÆ½Ãæ.(ÄãÒ²¿ÉÒÔʹÓÃDDLoadBitmapº¯Êý´´½¨Ò»¸öÆ½ÃæÈ»ºóÔØÈë.º¯ÊýÒ²ÔÚddutil.cppÖÐ.)ÔÚddex2ÖÐ,ËûÔØÈëÓÉszBackground(ID)Ö¸ÏòµÄback.bmpÎļþµ½ÓÉlpDDSBack(Ö¸Õë)Ö¸ÏòµÄºǫ́»º´æ.DDReLoadBitmapº¯Êýµ÷ÓÃDDCopyBitmapº¯Êý½«Îļþ¿½±´µ½»º´æ,²¢À­Éìµ½Êʵ±µÄ´óС.
DDCopyBitmapº¯Êý½«Î»Í¼¿½±´µ½ÄÚ´æÖÐ,ÓÃGetObjectº¯Êý»Ö¸´Î»Í¼µÄ´óС.È»ºóÊÇÓÉÏÂÃæµÄ´úÂ뽫λͼµ÷Õûµ½½«Òª·ÅλͼµÄ»º´æµÄ´óС.
// Get the size of the surface.  
ddsd.dwSize = sizeof(ddsd);  
ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;  
pdds->GetSurfaceDesc(&ddsd);
ddsdÊÇÒ»¸öDDSURFACEDESC2½á¹¹µÄÖ¸Õë.Õâ¸ö½á¹¹±£´æÁËÏÖÔÚµÄDirectDrawÆ½ÃæµÄÃèÊö.ÔÚÕâÖÖÇé¿öÏÂ,DDSURFACEDESC2µÄ³ÉÔ±ÃèÊöÁËÆ½ÃæµÄ¸ßºÍ¿í,ÓÉDDSD_HEIIGHTºÍDDSD_WIDTH±êʾµÄ.IDirectDrawSurface7::GetSurfaceDesc·½·¨µÄµ÷ÓðÑÊôÐÔÖµ×°ÈëÁËÕâ¸ö½á¹¹.ÔÚDDEX2ÖÐ,Öµ½«±»ÉèΪ¸ß480,¿í640.
DDCopyBitmapº¯Êý¸øÆ½Ãæ¼ÓËøÈ»ºó°Ñλͼ¿½±´µ½»º´æÖÐ,ÓÃStretchBltº¯ÊýÀ­Éì»òѹËõ.ÈçÏÂ:
if ((hr = pdds->GetDC(&hdc)) == DD_OK)  
{  
   StretchBlt(hdc, 0, 0, ddsd.dwWidth, ddsd.dwHeight, hdcImage, x, y,  
       dx, dy, SRCCOPY);  
   pdds->ReleaseDC(hdc);  
}
×öÈËÒªºñµÀ°¡£¡ºñµÀ°¡£¡
3Â¥2005-12-23 20:22:53
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
²é¿´È«²¿ 7 ¸ö»Ø´ð

zsglly

ľ³æ (ÖøÃûдÊÖ)

step:6 ·­×ªÆ½Ãæ
ÔÚDDEx1ÖÐ,WM_TIMERÏûÏ¢Òý·¢´Ó»º´æµ½Ö÷Æ½ÃæµÄ·­×ª.µ±"Æ½Ãæ"ÄÚ´æ½âËøºó,Äã¾Í¿ÉÒÔÓÃIDirectDrawSurface7::Flip·½·¨ÊµÏÖ´Ó»º´æµ½Ö÷Æ½ÃæµÄ·­×ª.ÈçÏÂ:
case WM_TIMER:
       // Update and flip surfaces
       if (g_bActive && TIMER_ID == wParam)
       {
           UpdateFrame(hWnd);
           while (TRUE)
           {
               hRet = g_pDDSPrimary->Flip(NULL, 0);
               if (hRet == DD_OK)
                   break;
               if (hRet == DDERR_SURFACELOST)
               {
                   hRet = g_pDDSPrimary->Restore();
                   if (hRet != DD_OK)
                       break;
               }
               if (hRet != DDERR_WASSTILLDRAWING)
                   break;
           }
       }
       break;

ÔÚÀý×ÓÖÐ,g_pDDSPrimary²ÎÊýָʾÖ÷Æ½ÃæºÍÓëËûÁ¬½ÓµÄ»º´æ.µ±IDirectDrawSurface7::Flip±»µ÷ÓÃ,ǰºóÆ½Ãæ½«»á½»»»(Ö»Êǽ»»»Ö¸Õë,ûÓÐʵ¼ÊµÄÊý¾Ý½»»»).Èç¹û·­×ª³É¹¦,·µ»ØDD_OK,Ìø³öÑ­»·.
Èç¹û·­×ª·µ»ØµÄÊÇDDERR_SURFACELOSTÖµ,¾ÍÊÔͼÓÃIDirectDrawSurface7::Restore ·½·¨±£´æÆ½Ãæ.Èç¹û±£´æ³É¹¦,³ÌÐòÑ­»·µ½µ÷ÓÃIDirectDrawSurface7::Flip,ÔÙÊÔÒ»´Î.Èç¹û±£´æ²»³É¹¦,³ÌÐòÌø³öÑ­»·,·µ»ØÒ»¸ö´íÎó.
×¢Òâ:µ±Äãµ÷ÓÃIDirectDrawSurface7::Flip ʱ,·­×ª¶¯×÷²¢²»ÄÜÂíÉÏÍê³É.Èç¹û,ǰһ¸ö·­×ª¶¯×÷»¹Ã»ÓÐÍê³É,IDirectDrawSurface7::Flip »á·µ»ØDDERR_WASSTILLDRAWING.ÔÚÕâ¸öÀý×ÓÖÐ,IDirectDrawSurface7::Flip»áÒ»Ö±µ÷ÓÃÖ±µ½·µ»ØDD_OK.


step7:ÊÍ·ÅDirectDraw¶ÔÏó
µ±Äã°´ÏÂF12¼üʱ,Àý×ÓDDEx1½«ÔÚÍ˳ö³ÌÐòǰ´¦ÀíWM_DESTROYÏûÏ¢.Õâ¸öÏûÏ¢½«µ÷ÓÃReleaseAllObjectsº¯Êý,Õâ¸öº¯Êý°üÀ¨Á˶à¸öReleaseµ÷ÓÃ.ÏñÏÂÃæÒ»Ñù:
static void
ReleaseAllObjects(void)
{
   if (g_pDD != NULL)
   {
       if (g_pDDSPrimary != NULL)
       {
           g_pDDSPrimary->Release();
           g_pDDSPrimary = NULL;
       }
       g_pDD->Release();
       g_pDD = NULL;
   }
}
Õâ¸ö³ÌÐò¼ì²âDirectDraw¶ÔÏóµÄÖ¸Õëg_pDDºÍDirectDrawÆ½Ãæ¶ÔÏóµÄÖ¸Õëg_pDDSPrimaryÊÇ·ñΪNULL.È»ºó,µ÷ÓÃIDirectDrawSurface7::Release·½·¨ÁîDirectDrawÆ½Ãæ¶ÔÏóµÄreference count(¿ÉÒÔÈÏΪÊÇ´´½¨µÄ¶ÔÏóµÄÊýÄ¿)Êý¼õ1,ÕâʹµÃreference count¼õΪ0,DirectDrawÆ½Ãæ¶ÔÏó¾ÍÊÍ·ÅÁË.È»ºó,»¹Ð轫ËûµÄÖ¸ÕëÖµÉèΪNULL.½ÓÏÂÀ´,³ÌÐòµ÷ÓÃIDirectDraw7::Release,ͬÑùÊÇÁîDirectDrawµÄreference count¼õ1,È»ºóÈ»ºó....È«Ïú»Ù.  
tutorial2:ÔÚ»º´æÖÐÔØÈëλͼ



Õâ¸öÀý×ÓÌÖÂÛÔÚddex1µÄ»ù´¡ÉϽøÐÐÀ©Õ¹.ddex2(Àý³ÌÔÚmsdnÉϾÍÓÐ,ËÑË÷...)½²°üº¬ÔØÈëλͼÎļþµÄº¯Êý.ÐµĹ¦ÄÜ¿¿ÒÔϵIJ½ÖèʵÏÖ:
step1:´´½¨µ÷É«°å
step2:ÉèÖõ÷É«°å
step3:ÔÚ»º´æÖÐÔØÈëλͼ
step4:·­×ªÆ½Ãæ.
ÏñÔÚddex1ÖÐÒ»Ñù,ÔÚ³õʼ»¯º¯ÊýÖгõʼ»¯ÁËddex2.
²»Í¬µÄ´úÂëÈçÏÂ:
lpDDPal = DDLoadPalette(lpDD, szBackground);  

if (lpDDPal == NULL)  
   goto error;  

ddrval = lpDDSPrimary->SetPalette(lpDDPal);  

if(ddrval != DD_OK)  
   goto error;  

// Load a bitmap into the back buffer.  
ddrval = DDReLoadBitmap(lpDDSBack, szBackground);  

if(ddrval != DD_OK)  
   goto error;
×öÈËÒªºñµÀ°¡£¡ºñµÀ°¡£¡
2Â¥2005-12-23 20:22:37
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

zsglly

ľ³æ (ÖøÃûдÊÖ)

step4:·­×ªÒ³Ãæ
ddex2Öз­×ªÒ³ÃæµÄ²¿·ÖÓëddex1ÖеÄÊ®·ÖµÄÏàÏñ.Ëù²»Í¬µÄÊÇ:µ±Æ½Ã涪ʧʱ(DDERR_SURFACELOST),ÔÚÆ½Ãæ´¢´æºó,±ØÐëÓÃDDReLoadBitmapº¯Êý½«Î»Í¼ÖØÐÂÔØÈ뻺´æ.

tutorial2:ÔÚ»º´æÖÐÔØÈëλͼ

Õâ¸öÀý×ÓÌÖÂÛÔÚddex1µÄ»ù´¡ÉϽøÐÐÀ©Õ¹.ddex2(Àý³ÌÔÚmsdnÉϾÍÓÐ,ËÑË÷...)½²°üº¬ÔØÈëλͼÎļþµÄº¯Êý.ÐµĹ¦ÄÜ¿¿ÒÔϵIJ½ÖèʵÏÖ:
step1:´´½¨µ÷É«°å
step2:ÉèÖõ÷É«°å
step3:ÔÚ»º´æÖÐÔØÈëλͼ
step4:·­×ªÆ½Ãæ.
ÏñÔÚddex1ÖÐÒ»Ñù,ÔÚ³õʼ»¯º¯ÊýÖгõʼ»¯ÁËddex2.
²»Í¬µÄ´úÂëÈçÏÂ:
lpDDPal = DDLoadPalette(lpDD, szBackground);  

if (lpDDPal == NULL)  
   goto error;  

ddrval = lpDDSPrimary->SetPalette(lpDDPal);  

if(ddrval != DD_OK)  
   goto error;  

// Load a bitmap into the back buffer.  
ddrval = DDReLoadBitmap(lpDDSBack, szBackground);  

if(ddrval != DD_OK)  
   goto error;








step1:½¨Á¢µ÷É«°å
ÔÚddex2ÖÐ,Ê×ÏÈÓÃÈçÏ´úÂ뽨Á¢µ÷É«°å.
lpDDPal = DDLoadPalette(lpDD, szBackground);  

if (lpDDPal == NULL)  
   goto error;
DDLoadPaletteÕâ¸öº¯ÊýÊÇÔÚ\Dxsdk\sdk\samples\misc\ddutil.cppÖеĹ«¹²directdrawº¯Êý.ºÜ¶àdirectdrawµÄÀý×Ó(sdk°üÖеÄ)¶¼Óõ½Õâ¸öÎļþ.ÖØÒªµÄÊÇ,Ëü°üº¬ÁËÔØÈëµ÷É«°åºÍλͼµÄº¯Êý,ÎÞÂÛÊÇ´ÓÎļþ»¹ÊÇ×ÊÔ´.ΪÁ˲»Öظ´µÄд´úÂë,¾Í°ÑËû·ÅÔÚÁËÒ»¸ö¿ÉÒÔÖØ¸´Ê¹ÓõÄÎļþÖÐ.È·ÐÅÄãÔÚ±àÒëddexnÊǰüº¬ÁËÕâÎļþ.
(ÒÔÏÂÄÚÈÝÔÚddutial.cppÖÐ)ddex2ÖÐ,DDLoadPaletteº¯Êý´Óback.bmpÎļþ´´½¨ÁËDirectDrawPalette¶ÔÏó.DDLoadPaletteº¯ÊýÅжϴ´½¨µ÷É«°åµÄÎļþ»ò×ÊÔ´ÊÇ·ñ´æÔÚ.Èç¹û²»Êǵϰ,¾Í´´½¨Ò»¸öĬÈϵĵ÷É«°å.ÔÚddex2ÖÐ,Ëû´ÓλͼÎļþÌáÈ¡µ÷É«°åÐÅÏ¢²¢´¢´æÔÚÒ»¸öapeÖ¸ÏòµÄ½á¹¹ÖÐ.
DDEx2Ëæºó´´½¨ÁËDirectDrawPalette¶ÔÏó,ÈçÏÂ:
pdd->CreatePalette(DDPCAPS_8BIT, ape, &ddpal, NULL);  
return ddpal;
µ±IDirectDraw7::CreatePalette·½·¨·µ»Ø,ddpal²ÎÊýÖ¸Ïò´ÓDDLoadPaletteº¯Êý·µ»ØµÄDirectDrawPalette¶ÔÏó.
ape²ÎÊýÊÇÒ»¸öÖ¸Õë,Ö¸ÏòÒ»¸öÄܰüº¬»òÕß2»ò4»ò16»ò256¸öÏßÐÔ×éÖ¯µÄ¼Í¼µÄ½á¹¹.¼Ç¼µÄÊýÄ¿ÒÀ¿¿ÓÚCreatePalette·½·¨ÖеÄdwFlags²ÎÊý.ÔÚÉÏÃæµÄÇé¿öÏÂ,dwFlags²ÎÊýÉèΪDDPCAPS_8BIT.Õâ±íʾ½á¹¹ÖÐÓÐ256¸ö¼Ç¼.ÿһÌõ¼Ç¼°üº¬4×Ö½Ú(·Ö±ðÊǺì,ÂÌ,À¼µÄͨµÀºÍÒ»¸ö±ê־λ).
×öÈËÒªºñµÀ°¡£¡ºñµÀ°¡£¡
4Â¥2005-12-23 20:23:18
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

zsglly

ľ³æ (ÖøÃûдÊÖ)

step2:ÉèÖõ÷É«°å
´´½¨Íêµ÷É«°åÒÔºó,ͨ¹ýÖ¸Õëµ÷ÓÃÖ÷Æ½ÃæµÄIDirectDrawSurface7::SetPalette·½·¨,ÈçÏÂ:
ddrval = lpDDSPrimary->SetPalette(lpDDPal);  

if(ddrval != DD_OK)  
   goto error;// SetPalette failed.
ÔÚÄãµ÷ÓÃÍêIDirectDrawSurface7::SetPalette·½·¨Ö®ºó,DirectDrawPalette¶ÔÏó¾ÍÓëDirectDrawSurface¶ÔÏóÁªÏµÆðÀ´ÁË.ʲôʱºòÄãÏë¸Ä±äµ÷É«°åÁË,¿ÉÒÔ¼òµ¥µÄ´´½¨Ò»¸öеĵ÷É«°å,È»ºóÉèÖÃһϾͿÉÒÔÁË.(ËäÈ»ÕâÆªÖ¸µ¼ÓÃÁËÕâЩ²½Öè,Æäʵ»¹ÓÐÆäËûµÄ·½·¨¸Ä±äµ÷É«°å,ÒÔºóµÄÀý×ÓÖн«»áÑÝʾ)




step3:ÔÚ»º´æÇøÔØÈëλͼ
DirectDrawPalette¶ÔÏóÓëDirectDrawSurface¶ÔÏóÁªÏµÆðÀ´Ö®ºó,DDEx2ÓÃÏÂÃæµÄ´úÂëÔÚ»º´æÖÐÔØÈëλͼback.bmp
// Load a bitmap into the back buffer.  
ddrval = DDReLoadBitmap(lpDDSBack, szBackground);  

if(ddrval != DD_OK)  
   // Load failed.
DDReLoadBitmapÊÇÁíÒ»¸öÔÚDdutil.cppÖеĺ¯Êý.ËûÔØÈëÒ»¸öλͼÎļþ»ò×ÊÔ´µ½Ò»¸öÒѾ­´æÔÚµÄDirectDrawÆ½Ãæ.(ÄãÒ²¿ÉÒÔʹÓÃDDLoadBitmapº¯Êý´´½¨Ò»¸öÆ½ÃæÈ»ºóÔØÈë.º¯ÊýÒ²ÔÚddutil.cppÖÐ.)ÔÚddex2ÖÐ,ËûÔØÈëÓÉszBackground(ID)Ö¸ÏòµÄback.bmpÎļþµ½ÓÉlpDDSBack(Ö¸Õë)Ö¸ÏòµÄºǫ́»º´æ.DDReLoadBitmapº¯Êýµ÷ÓÃDDCopyBitmapº¯Êý½«Îļþ¿½±´µ½»º´æ,²¢À­Éìµ½Êʵ±µÄ´óС.
DDCopyBitmapº¯Êý½«Î»Í¼¿½±´µ½ÄÚ´æÖÐ,ÓÃGetObjectº¯Êý»Ö¸´Î»Í¼µÄ´óС.È»ºóÊÇÓÉÏÂÃæµÄ´úÂ뽫λͼµ÷Õûµ½½«Òª·ÅλͼµÄ»º´æµÄ´óС.
// Get the size of the surface.  
ddsd.dwSize = sizeof(ddsd);  
ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;  
pdds->GetSurfaceDesc(&ddsd);
ddsdÊÇÒ»¸öDDSURFACEDESC2½á¹¹µÄÖ¸Õë.Õâ¸ö½á¹¹±£´æÁËÏÖÔÚµÄDirectDrawÆ½ÃæµÄÃèÊö.ÔÚÕâÖÖÇé¿öÏÂ,DDSURFACEDESC2µÄ³ÉÔ±ÃèÊöÁËÆ½ÃæµÄ¸ßºÍ¿í,ÓÉDDSD_HEIIGHTºÍDDSD_WIDTH±êʾµÄ.IDirectDrawSurface7::GetSurfaceDesc·½·¨µÄµ÷ÓðÑÊôÐÔÖµ×°ÈëÁËÕâ¸ö½á¹¹.ÔÚDDEX2ÖÐ,Öµ½«±»ÉèΪ¸ß480,¿í640.
DDCopyBitmapº¯Êý¸øÆ½Ãæ¼ÓËøÈ»ºó°Ñλͼ¿½±´µ½»º´æÖÐ,ÓÃStretchBltº¯ÊýÀ­Éì»òѹËõ.ÈçÏÂ:
if ((hr = pdds->GetDC(&hdc)) == DD_OK)  
{  
   StretchBlt(hdc, 0, 0, ddsd.dwWidth, ddsd.dwHeight, hdcImage, x, y,  
       dx, dy, SRCCOPY);  
   pdds->ReleaseDC(hdc);  
}

step4:·­×ªÒ³Ãæ
ddex2Öз­×ªÒ³ÃæµÄ²¿·ÖÓëddex1ÖеÄÊ®·ÖµÄÏàÏñ.Ëù²»Í¬µÄÊÇ:µ±Æ½Ã涪ʧʱ(DDERR_SURFACELOST),ÔÚÆ½Ãæ´¢´æºó,±ØÐëÓÃDDReLoadBitmapº¯Êý½«Î»Í¼ÖØÐÂÔØÈ뻺´æ.


tutorial2:ÔÚ»º´æÖÐÔØÈëλͼ

Õâ¸öÀý×ÓÌÖÂÛÔÚddex1µÄ»ù´¡ÉϽøÐÐÀ©Õ¹.ddex2(Àý³ÌÔÚmsdnÉϾÍÓÐ,ËÑË÷...)½²°üº¬ÔØÈëλͼÎļþµÄº¯Êý.ÐµĹ¦ÄÜ¿¿ÒÔϵIJ½ÖèʵÏÖ:
step1:´´½¨µ÷É«°å
step2:ÉèÖõ÷É«°å
step3:ÔÚ»º´æÖÐÔØÈëλͼ
step4:·­×ªÆ½Ãæ.
ÏñÔÚddex1ÖÐÒ»Ñù,ÔÚ³õʼ»¯º¯ÊýÖгõʼ»¯ÁËddex2.
²»Í¬µÄ´úÂëÈçÏÂ:
lpDDPal = DDLoadPalette(lpDD, szBackground);  

if (lpDDPal == NULL)  
   goto error;  

ddrval = lpDDSPrimary->SetPalette(lpDDPal);  

if(ddrval != DD_OK)  
   goto error;  

// Load a bitmap into the back buffer.  
ddrval = DDReLoadBitmap(lpDDSBack, szBackground);  

if(ddrval != DD_OK)  
   goto error;
×öÈËÒªºñµÀ°¡£¡ºñµÀ°¡£¡
5Â¥2005-12-23 20:23:37
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 290·Ö²ÄÁϹ¤³Ì085601Çóµ÷¼Á Êý¶þÓ¢Ò» +5 llx0610 2026-03-02 5/250 2026-03-02 20:20 by hypershenger
[¿¼ÑÐ] ²ÄÁÏ284Çóµ÷¼Á£¬Ò»Ö¾Ô¸Ö£ÖÝ´óѧӢһÊý¶þר˶ +15 ÏëÉϰ¶µÄÍÁ²¦Êó 2026-02-28 15/750 2026-03-02 20:13 by hypershenger
[¿¼ÑÐ] ¿ÎÌâ×é½ÓÊÕ²ÄÁÏÀàµ÷¼ÁÑо¿Éú +4 gaoxiaoniuma 2026-02-28 5/250 2026-03-02 19:33 by Xinyuu
[¿¼²©] 26³¬¼¶µçÈÝÆ÷É격 +3 dhdjdjend 2026-02-25 3/150 2026-03-02 19:21 by ÇáËɲ»ÉÙËæ
[¿¼ÑÐ] Ò»Ö¾Ô¸ÖÐʯÓÍ£¨»ª¶«£©±¾¿ÆÆë³¹¤Òµ´óѧ +3 ʯÄÜΰ 2026-03-02 3/150 2026-03-02 18:54 by caszguilin
[¿¼ÑÐ] 290Çóµ÷¼Á +6 ErMiao1020 2026-03-02 6/300 2026-03-02 18:14 by lature00
[¿¼ÑÐ] Ò»Ö¾Ô¸»ªÖпƼ¼´óѧ£¬»¯Ñ§×¨Òµ344·Ö£¬Çóµ÷¼Á +3 ÐÏxing1 2026-03-02 3/150 2026-03-02 17:32 by houyaoxu
[¿¼ÑÐ] Ò»Ö¾Ô¸¶«±±´óѧ²ÄÁÏר˶328£¬Çóµ÷¼Á +3 shs1083 2026-03-02 3/150 2026-03-02 17:27 by houyaoxu
[¿¼ÑÐ] 0856»¯¹¤×¨Ë¶Çóµ÷¼Á +15 ¶­boxing 2026-03-01 15/750 2026-03-02 15:06 by »Î»Î²»Ðí»Î
[¿¼ÑÐ] ½­ËÕʡũ¿ÆÔºÕе÷¼Á1Ãû +4 Qwertyuop 2026-03-01 4/200 2026-03-02 14:27 by Éý¸ñ°¢´ï
[¿¼ÑÐ] ²ÄÁÏÓ뻯¹¤328Çóµ÷¼Á +3 ¡££¬¡££¬¡££¬¡£i 2026-03-02 3/150 2026-03-02 13:09 by houyaoxu
[¿¼ÑÐ] 291 Çóµ÷¼Á +3 »¯¹¤2026½ì±ÏÒµÉ 2026-03-02 3/150 2026-03-02 12:55 by houyaoxu
[¿¼ÑÐ] Çóµ÷¼Á +3 °¾Ò¹µÄèͷӥ 2026-03-02 3/150 2026-03-02 11:45 by Áõ±ø
[¿¼ÑÐ] ²ÄÁϹ¤³Ì269Çóµ÷¼Á +3 °×´Ìõ 2026-03-02 3/150 2026-03-02 09:25 by Ò»ÐݸçFU
[¿¼ÑÐ] 279Çóµ÷¼Á +3 dua1 2026-03-01 4/200 2026-03-02 00:23 by ´óÁ³µ°×Ó
[»ù½ðÉêÇë] ¸Õ¼Óã¬Ã»ÓÐÆÚ¿¯ºÅ£¬µ«ÊÇÔÚÏ߿ɿ´µÄÂÛÎÄ¿ÉÒÔ·ÅΪ´ú±í×÷Âð 10+3 arang1 2026-03-01 3/150 2026-03-01 16:43 by babero
[¿¼ÑÐ] 311Çóµ÷¼Á +6 ͤͤͤ01 2026-03-01 6/300 2026-03-01 15:41 by 324616
[¿¼ÑÐ] 307Çóµ÷¼Á +5 wyyyqx 2026-03-01 5/250 2026-03-01 15:21 by Fff-1
[¿¼ÑÐ] 304Çóµ÷¼Á +6 ÂüÊâ2266 2026-02-28 7/350 2026-03-01 15:14 by wjLi2017
[ÂÛÎÄͶ¸å] Optics lettersͶ¸å±»¾ÜÇóÖú 30+3 luckyry 2026-02-26 4/200 2026-03-01 09:06 by babero
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û