📄 csdn_文档中心_一个directx的例子.htm
字号:
color=#ffffff>标题</FONT></TD>
<TD><B> 一个DirectX的例子</B> ghj1976(转贴)
</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399><FONT color=#ffffff>关键字</FONT></TD>
<TD width=500> 一个DirectX的例子</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>出处</FONT></TD>
<TD height=10> <A
href="http://my.szptt.net.cn/vcdynasty/tips/index.htm">http://my.szptt.net.cn/vcdynasty/tips/index.htm</A></TD></TR>
<TR>
<TD align=middle height=10></TD>
<TD height=10></TD></TR></TBODY></TABLE><!--文章说明信息结束//-->
<TABLE border=0 width=600>
<TBODY>
<TR>
<TD align=left><BR>
<P align=center> </P>
<P
align=left>发信人: winson (阿苦), 信区: Programming <BR>标 题: 一个DirectX的例子 <BR>发信站: BBS 水木清华站 (Wed Jan 14 16:49:07 1998) <BR> <BR>#include <windows.h> <BR>#include <ddraw.h> <BR>#include <dsound.h> <BR> <BR>IDirectDraw *dd; <BR>IDirectDrawSurface *dds0, *dds1, *dds2, *dds3; <BR>IDirectDrawClipper *ddc; <BR>IDirectSound *ds; <BR>IDirectSoundBuffer *dsb1, *dsb2; <BR> <BR>int x = 20, y = 20; <BR>int vx = 5, vy = 3; <BR> <BR>void MoveBall(HWND hwnd, BOOL bMove) <BR>{ <BR> BOOL bBounce = FALSE; <BR> RECT rectSrc, rectDest; <BR> int ox, oy, nx, ny; <BR> GetClientRect(hwnd, &rectDest); <BR> ClientToScreen(hwnd, (POINT *)&rectDest.left); <BR> ClientToScreen(hwnd, (POINT *)&rectDest.right); <BR> if (bMove) <BR> { <BR> ox = rectDest.left + <BR> MulDiv(rectDest.right - rectDest.left - 32, x, 500); <BR> oy = rectDest.top + <BR> MulDiv(rectDest.bottom - rectDest.top - 32, y, 500); <BR> x += vx; <BR> y += vy; <BR> if (x < 0) { x = 0; vx = -vx; bBounce = TRUE; } <BR> if (x >= 500) { x = 1000 - x; vx = -vx; bBounce = TRUE; } <BR> if (y < 0) { y = -y; vy = -vy; bBounce = TRUE; } <BR> if (y >= 500) { y = 1000 - y; vy = -vy; bBounce = TRUE; } <BR> if (bBounce) <BR> { <BR> dsb1->SetCurrentPosition(0); <BR> dsb1->Play(0, 0, 0); <BR> } <BR> } <BR> nx = rectDest.left + <BR> MulDiv(rectDest.right - rectDest.left - 32, x, 500); <BR> ny = rectDest.top + <BR> MulDiv(rectDest.bottom - rectDest.top - 32, y, 500); <BR> rectSrc.left = rectSrc.top = 0; <BR> rectSrc.right = rectSrc.bottom = 32; <BR> if (bMove) <BR> { <BR> rectDest.left = rectDest.top = 0; <BR> rectDest.right = rectDest.bottom = 32; <BR> dds2->Blt(&rectDest, dds3, &rectSrc, DDBLT_WAIT, NULL); <BR> if (abs(nx - ox) < 32 && abs(ny - oy) < 32) <BR> { <BR> if (nx < ox) <BR> { <BR> rectSrc.left = ox - nx; <BR> rectSrc.right = 32; <BR> rectDest.left = 0; <BR> rectDest.right = 32 - rectSrc.left; <BR> } <BR> else <BR> { <BR> rectDest.left = nx - ox; <BR> rectDest.right = 32; <BR> rectSrc.left = 0; <BR> rectSrc.right = 32 - rectDest.left; <BR> } <BR> if (ny < oy) <BR> { <BR> rectSrc.top = oy - ny; <BR> rectSrc.bottom = 32; <BR> rectDest.top = 0; <BR> rectDest.bottom = 32 - rectSrc.top; <BR> } <BR> else <BR> { <BR> rectDest.top = ny - oy; <BR> rectDest.bottom = 32; <BR> rectSrc.top = 0; <BR> rectSrc.bottom = 32 - rectDest.top; <BR> } <BR> dds2->Blt(&rectDest, dds1, &rectSrc, DDBLT_WAIT, NULL); <BR> } <BR> rectSrc.left = rectSrc.top = 0; <BR> rectSrc.right = rectSrc.bottom = 32; <BR> rectDest.left = ox; <BR> rectDest.top = oy; <BR> rectDest.right = rectDest.left + 32; <BR> rectDest.bottom = rectDest.top + 32; <BR> dds0->Blt(&rectDest, dds2, &rectSrc, DDBLT_WAIT, NULL); <BR> } <BR> rectDest.left = nx; <BR> rectDest.top = ny; <BR> rectDest.right = rectDest.left + 32; <BR> rectDest.bottom = rectDest.top + 32; <BR> dds0->Blt(&rectDest, dds1, &rectSrc, DDBLT_WAIT, NULL); <BR>} <BR>LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, <BR> WPARAM wParam, LPARAM lParam) <BR>{ <BR> HDC hDC; <BR> PAINTSTRUCT paintStruct; <BR> switch(uMsg) <BR> { <BR> case WM_PAINT: <BR> hDC = BeginPaint(hwnd, &paintStruct); <BR> if (hDC != NULL) <BR> { <BR> MoveBall(hwnd, FALSE); <BR> EndPaint(hwnd, &paintStruct); <BR> } <BR> break; <BR> case WM_TIMER: <BR> MoveBall(hwnd, TRUE); <BR> break; <BR> case WM_KEYDOWN: <BR> switch (wParam) <BR> { <BR> case VK_LEFT: vx--; break; <BR> case VK_UP: vy--; break; <BR> case VK_RIGHT: vx++; break; <BR> case VK_DOWN: vy++; break; <BR> case VK_ESCAPE: PostMessage(hwnd, WM_CLOSE, 0, 0); <BR> } <BR> break; <BR> case WM_DESTROY: <BR> PostQuitMessage(0); <BR> break; <BR> default: <BR> return DefWindowProc(hwnd, uMsg, wParam, lParam); <BR> } <BR> return 0; <BR>} <BR>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, <BR> LPSTR d3, int nCmdShow) <BR>{ <BR> MSG msg; <BR> HWND hwnd; <BR> WNDCLASS wndClass; <BR> DDSURFACEDESC ddsd; <BR> DSBUFFERDESC dsbd; <BR> HDC hddDC; <BR> RECT rect; <BR> HRSRC hrsrc; <BR> HGLOBAL hRData; <BR> DWORD *pRData; <BR> LPBYTE pMem1, pMem2; <BR> DWORD dwSize1, dwSize2; <BR> if (hPrevInstance == NULL) <BR> { <BR> memset(&wndClass, 0, sizeof(wndClass)); <BR> wndClass.style = CS_HREDRAW | CS_VREDRAW; <BR> wndClass.lpfnWndProc = WndProc; <BR> wndClass.hInstance = hInstance; <BR> wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); <BR> wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); <BR> wndClass.lpszClassName = "BOUNCE"; <BR> if (!RegisterClass(&wndClass)) return FALSE; <BR> } <BR> hwnd = CreateWindow("BOUNCE", "BOUNCE", <BR> WS_OVERLAPPEDWINDOW, <BR> CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, <BR> NULL, NULL, hInstance, NULL); <BR> DirectDrawCreate(NULL, &dd, NULL); <BR> dd->SetCooperativeLevel(hwnd, <BR> DDSCL_NORMAL | DDSCL_NOWINDOWCHANGES); <BR> memset(&ddsd, 0, sizeof(DDSURFACEDESC)); <BR> ddsd.dwSize = sizeof(DDSURFACEDESC); <BR> ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; <BR> ddsd.dwFlags = DDSD_CAPS; <BR> dd->CreateSurface(&ddsd, &dds0, NULL); <BR> dd->CreateClipper(0, &ddc, NULL); <BR> dds0->SetClipper(ddc); <BR> ddc->SetHWnd(0, hwnd); <BR> ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; <BR> ddsd.dwHeight = 32; <BR> ddsd.dwWidth = 32; <BR> ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; <BR> dd->CreateSurface(&ddsd, &dds1, NULL); <BR> dd->CreateSurface(&ddsd, &dds2, NULL); <BR> dd->CreateSurface(&ddsd, &dds3, NULL); <BR> dds1->GetDC(&hddDC); <BR> SaveDC(hddDC); <BR> rect.left = rect.top = 0; <BR> rect.right = rect.bottom = 32; <BR> FillRect(hddDC, &rect, (HBRUSH)(COLOR_WINDOW + 1)); <BR> SelectObject(hddDC, GetStockObject(BLACK_BRUSH)); <BR> SelectObject(hddDC, GetStockObject(BLACK_PEN)); <BR> Ellipse(hddDC, 0, 0, 32, 32); <BR> RestoreDC(hddDC, -1); <BR> dds1->ReleaseDC(hddDC); <BR> dds3->GetDC(&hddDC); <BR> FillRect(hddDC, &rect, (HBRUSH)(COLOR_WINDOW + 1)); <BR> dds3->ReleaseDC(hddDC); <BR> DirectSoundCreate(NULL, &ds, NULL); <BR> ds->SetCooperativeLevel(hwnd, DSSCL_NORMAL); <BR> memset(&dsbd, 0, sizeof(DSBUFFERDESC)); <BR> dsbd.dwSize = sizeof(DSBUFFERDESC); <BR> dsbd.dw= (LPWAVEFORMATEX)(pRData + 5); <BR> ds->CreateSoundBuffer(&dsbd, &dsb1, NULL); <BR> dsb1->Lock(0, dsbd.dwBufferBytes, &pMem1, &dwSize1, <BR> &pMem2, &dwSize2, 0); <BR> memcpy(pMem1, (LPBYTE)(pRData + 11), dwSize1); <BR> if (dwSize2 != 0) <BR> memcpy(pMem2, (LPBYTE)(pRData + 11) + dwSize1, dwSize2); <BR> dsb1->Unlock(pMem1, dwSize1, pMem2, dwSize2); <BR> hrsrc = FindResource(hInstance, "HUM.WAV", "WAVE"); <BR> hRData = LoadResource(hInstance, hrsrc); <BR> pRData = (DWORD *)LockResource(hRData); <BR> dsbd.dwBufferBytes = *(pRData + 10); <BR> dsbd.lpwfxFormat = (LPWAVEFORMATEX)(pRData + 5); <BR> ds->CreateSoundBuffer(&dsbd, &dsb2, NULL); <BR> dsb2->Lock(0, dsbd.dwBufferBytes, &pMem1, &dwSize1, <BR> &pMem2, &dwSize2, 0); <BR> memcpy(pMem1, (LPBYTE)(pRData + 11), dwSize1); <BR> if (dwSize2 != 0) <BR> memcpy(pMem2, (LPBYTE)(pRData + 11) + dwSize1, dwSize2); <BR> dsb2->Unlock(pMem1, dwSize1, pMem2, dwSize2); <BR> dsb2->Play(0, 0, DSBPLAY_LOOPING); <BR> ShowWindow(hwnd, nCmdShow); <BR> UpdateWindow(hwnd); <BR> SetTimer(hwnd, 1, 100, NULL); <BR> while (GetMessage(&msg, NULL, 0, 0)) <BR> DispatchMessage(&msg); <BR> KillTimer(hwnd, 1); <BR> return msg.wParam; <BR>} <BR> <BR>-- <BR>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.128.111] <BR></P>
<P
align=center> </P><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE align=center bgColor=#006699 border=0 cellPadding=0 cellSpacing=0
width=770>
<TBODY>
<TR bgColor=#006699>
<TD align=middle bgColor=#006699 id=white><FONT
color=#ffffff>对该文的评论</FONT></TD>
<TD align=middle>
<SCRIPT src="CSDN_文档中心_一个DirectX的例子.files/readnum.htm"></SCRIPT>
</TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_一个DirectX的例子.files/ico_pencil.gif" width=16>
</SPAN> sgr0426 <I>(2001-12-15 13:22:28)</I>
</TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>oh!加一点说明好不好!
<BR></TD></TR></TBODY></TABLE><BR>
<DIV align=center>
<TABLE align=center bgColor=#cccccc border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TH bgColor=#006699 id=white><FONT
color=#ffffff>我要评论</FONT></TH></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE border=0 width=770>
<TBODY>
<TR>
<TD>你没有登陆,无法发表评论。 请先<A
href="http://www.csdn.net/member/login.asp?from=/Develop/read_article.asp?id=1521">登陆</A>
<A
href="http://www.csdn.net/expert/zc.asp">我要注册</A><BR></TD></TR></TBODY></TABLE></DIV><BR>
<HR noShade SIZE=1 width=770>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=500>
<TBODY>
<TR align=middle>
<TD height=10 vAlign=bottom><A
href="http://www.csdn.net/intro/intro.asp?id=2">网站简介</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=5">广告服务</A> - <A
href="http://www.csdn.net/map/map.shtm">网站地图</A> - <A
href="http://www.csdn.net/help/help.asp">帮助信息</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=2">联系方式</A> - <A
href="http://www.csdn.net/english">English</A> </TD>
<TD align=middle rowSpan=3><A
href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001032100010"><IMG
border=0 height=48 src="CSDN_文档中心_一个DirectX的例子.files/biaoshi.gif"
width=40></A></TD></TR>
<TR align=middle>
<TD vAlign=top>百联美达美公司 版权所有 京ICP证020026号</TD></TR>
<TR align=middle>
<TD vAlign=top><FONT face=Verdana>Copyright © CSDN.net, Inc. All rights
reserved</FONT></TD></TR>
<TR>
<TD height=15></TD>
<TD></TD></TR></TBODY></TABLE></DIV>
<DIV></DIV><!--内容结束//--><!--结束//--></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -