none
Win API 如何建立全屏窗口 RRS feed

答案

  • 关于全屏窗口有真全屏与假全屏(独占/非独占)的区分。上面的实现是假全屏,按一下WIN键试试。对于Windows程序来说,全屏程序是一种特殊形式,不是Windows推荐的,所有没有这样的选项。

    上面的方法基本够用了,如果想真全屏(独占)方式的话可以用DirectX(DXGI)来实现,这种方式还可以改分辨率。还有一种很特别的方式,就是用虚拟桌面,这种方法效果也不错,Windows7下高权限时那个黑屏就是用虚拟桌面实现的。

    2012年9月20日 6:19
  • 你指的是覆盖全屏并且没有边界和标题栏这样的窗口吗?

    去掉标题栏和边界,用SetWindowLong方法:

    int iScreenW = GetSystemMetrics(SM_CXSCREEN);
    int iScreenH = GetSystemMetrics(SM_CYSCREEN);
    SetWindowLong(hWnd, GWL_STYLE, WS_OVERLAPPED & WS_BORDER & WS_CAPTION);
    SetWindowPos(hWnd, HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
    MoveWindow(hWnd, 0, 0, iScreenW, iScreenH, TRUE);

    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年10月1日 8:07
    版主

全部回复

  • Windows没有全屏这个窗口类型,不过是任务栏被盖住之后会自动隐藏而已。创建一个和显示区域一样大的窗口就可以了。



    Visual C++ MVP

    2012年9月16日 19:28
    版主
  • 请参考以下代码:

    int iScreenW = GetSystemMetrics(SM_CXSCREEN);
    int iScreenH = GetSystemMetrics(SM_CYSCREEN);
    
    SetWindowPos(hWnd, HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
    MoveWindow(hWnd, 0, 0, iScreenW, iScreenH, TRUE);

    GetSystemMetrics获得屏幕的宽和高。

    SetWindowPos将窗口设置为最顶层的位置,再将窗口最大化,这样窗口就可以覆盖任务栏而布满整个屏幕。


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月19日 8:09
    版主
  • 关于全屏窗口有真全屏与假全屏(独占/非独占)的区分。上面的实现是假全屏,按一下WIN键试试。对于Windows程序来说,全屏程序是一种特殊形式,不是Windows推荐的,所有没有这样的选项。

    上面的方法基本够用了,如果想真全屏(独占)方式的话可以用DirectX(DXGI)来实现,这种方式还可以改分辨率。还有一种很特别的方式,就是用虚拟桌面,这种方法效果也不错,Windows7下高权限时那个黑屏就是用虚拟桌面实现的。

    2012年9月20日 6:19
  • 我试了一下,这段代码产生的结果是一个最大化的窗口呀。

    可能我标题的表达有些问题。我其实是想用API做一个类似IE全屏的一个界面。

    2012年9月20日 6:52
  • 我其实是想用API做一个类似IE全屏的一个界面。

    您好,我还是不太明白您想要的是什么样的效果。能否再解释一下什么是“IE全屏的界面“?(如果能够截一张图说明就更好了。)

    我在上面的帖子里给出的代码,是实现一个覆盖整个显示器显示区域的窗口,任务栏也被此窗口覆盖。

    如果您只是想要一个最大化的窗口(任务栏不会被覆盖),用这行代码就可以了:

    ShowWindow(hWnd, SW_MAXIMIZE);

    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月20日 9:41
    版主
  • 您好,

    我暂时将自己的回复标记为答案,如果我提供的信息不能解决您的问题,您可以取消标记。

    同时建议您更详细地说明您的需求,谢谢您的理解和支持!


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月24日 2:17
    版主
  • 不好意思,“IE全屏的界面” 就是进入IE浏览器看网页,然后选择下拉菜单“查看”,再选择“全屏”。或者直接按F11。

    我想要的就是这种效果。显示界面非常简单,但是用API不知如何实现。

    在MFC下面是可以实现的。

    2012年9月28日 21:07
  • 不好意思,“IE全屏的界面” 就是进入IE浏览器看网页,然后选择下拉菜单“查看”,再选择“全屏”。或者直接按F11。

    我想要的就是这种效果。显示界面非常简单,但是用API不知如何实现。

    在MFC下面是可以实现的。

    2012年9月30日 22:32
  • 之前的帖子无法取消已答复,这里再提出一下,因为还是没办法解决。

    我想要建立一个类似IE全屏的界面。

    “IE全屏的界面” 就是进入IE浏览器看网页,然后选择下拉菜单“查看”,再选择“全屏”。或者直接按F11。
    我想要的就是这种效果。显示界面非常简单,但是用API不知如何实现。
    在MFC下面是可以实现的。

    2012年9月30日 22:38
  • 你指的是覆盖全屏并且没有边界和标题栏这样的窗口吗?

    去掉标题栏和边界,用SetWindowLong方法:

    int iScreenW = GetSystemMetrics(SM_CXSCREEN);
    int iScreenH = GetSystemMetrics(SM_CYSCREEN);
    SetWindowLong(hWnd, GWL_STYLE, WS_OVERLAPPED & WS_BORDER & WS_CAPTION);
    SetWindowPos(hWnd, HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
    MoveWindow(hWnd, 0, 0, iScreenW, iScreenH, TRUE);

    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年10月1日 8:07
    版主
  • 你好,

    你已经在这里问过相同的问题:http://social.microsoft.com/Forums/zh-CN/visualcpluszhchs/thread/f6b8e86d-7015-4e9a-be7e-f1b377d81bbc

    如果你对已经标记的答案不满意,你可以取消标记。我已经帮你取消标记了,并且给了一个参考方案。

    这个帖子将和原来那个合并,请继续跟进原来的帖子。谢谢你的理解和支持。


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年10月2日 1:35
    版主
  • 第四句 SetWindowPos(hWnd, HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);好像没有什么用哩。

    2012年10月6日 9:20
  • 这一句话是为了让窗口覆盖住任务栏,从而达到“全屏”的目的。

    P.S.我的操作系统是Windows 7 Professional 64-bit,如果去掉这一句,窗口不能覆盖任务栏。


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年10月8日 2:12
    版主