在DirectX / Win API程序中全屏渲染内部Windows程序

时间:2012-10-23 10:18:37

标签: windows winapi directx fullscreen cmd

我想制作这样的东西,我可以在全屏模式下在cmd.exe中运行我的内部程序。

早些时候,在Windows XP中,我可以使用Alt + Enter在全屏模式下使用cmd.exe,但是在Windows Vista中由于WDDM(Windows显示驱动程序模型)而禁用此类内容。

我认为,制作此类内容的最佳方法是:“制作全屏DirectX / Win API程序,然后在其中渲染另一个内部程序”。

我知道如何使用DirectX / Win API创建全屏程序,但无法想象如何在我的全屏程序中渲染另一个程序。

另一种方法是:“只需使用cmd.exe或其他内部程序操作输入/输出流,然后在DirectX全屏程序中全屏解析信息”。

您对此类问题有何建议?

1 个答案:

答案 0 :(得分:1)

通过DirectX这样做将是一场噩梦,而且非常复杂。

最好创建一个与屏幕大小相同的最顶层窗口。它比这更复杂,因为你需要在窗口大小的边框上添加空间,然后将它稍微偏离屏幕,这样只有窗口本身可见。

在C / C ++中,您可以使用GetSystemMetrics函数执行此操作。

  • SM_CYCAPTION - 是标题栏的高度。
  • SM_CYFRAME - 是一个相当大的框架的高度。
  • SM_CXFRAME - 是相当大的帧的宽度。

这意味着您要创建一个1024x768屏幕的窗口,其宽度/高度及其位置如下所示。

const int cxFrame   = GetSystemMetrics( SM_CXFRAME );
const int cyFrame   = GetSystemMetrics( SM_CYFRAME );
const int cyCaption = GetSystemMetrics( SM_CYCAPTION );

const int winWidth  = 1024 + (cxFrame * 2);
const int winHeight = 768 + (cyFrame * 2) + cyCaption;

const int winPosX   = -cxFrame;
const int winPosY   = -cyFrame - cyCaption;

你现在有一个“全屏显示”的窗口,它可以在任何Windows系统上运行,并且不依赖于DirectX和所有其他基于驱动程序的地狱。