|Start with the obvious the line that is supposed to make the screen grey is Render_frame
d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(70, 70, 70), 1.0f, 0);
That function actually returns a result which isn't used in your code, so use the return and debug it
HRESULT result = d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(70, 70, 70), 1.0f, 0);
Now put a breakpoint on the line and check the result is D3D_OK.
It tells you in the directx9 help for the function
IDirect3DDevice9::Clear will fail if you:
Try to clear either the depth buffer or the stencil buffer of a render target that does not have an attached depth buffer.
Try to clear the stencil buffer when the depth buffer does not contain stencil data.
Creating a Depth Buffer (Direct3D 9) (Windows)[^]
It is noted in your initD3D function it doesn't seem to do that
It is noted in you setup these two lines you appear to be missing
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
In vino veritas