复制scmpoo,流浪羊

Replicating scmpoo, the stray sheep

本文关键字:scmpoo 复制      更新时间:2023-10-16

我决定复制scmpoo,你可能在旧电脑上使用过它,但它与任何新版本都不兼容,所以我决定重新制作它。

第一个问题是我还没想好如何在屏幕上画绵羊。就好像我自己的屏幕在我够不着的地方D:

我试着制作一个里面有图像的窗口,但我不知道如何使窗口透明,以保持图像可见?有什么想法吗?我相信这是可能的。

我对窗户有一些经验。h但不知道我是否可以用它来做这个?

此外,最初的绵羊可以站在窗口和任务栏上,所以我也需要一种方法来获取它们的位置。

有没有办法进入其他窗户,把羊拉进去?(主要谈论桌面)如果我可以访问其他窗口,我可以得到他们的位置。

假设您在Win32环境中使用GDI+,则需要注意以下几点:

  • 在可视化图像时,分层窗口的透明度可以通过UpdateLayeredWindow实现(假设您的图像位于选定的HBITMAP中)

  • 使用分层窗口进行平滑的图形重绘

这应该会给你一个很好的起点来实现你的屏幕伴侣。为了篡改现有窗口和/或其大小,请使用EnumWindows。

参考资料:带有GDI+的启动屏幕


编辑:由于您在评论中决定使用CSplash,为了将位置更改为初始屏幕,您应该修改窗口位置

    DWORD nScrWidth  = ::GetSystemMetrics(SM_CXFULLSCREEN);
    DWORD nScrHeight = ::GetSystemMetrics(SM_CYFULLSCREEN);
    int x = (nScrWidth  - m_dwWidth) / 2; // Center horizontally
    int y = (nScrHeight - m_dwHeight) / 2; // Center vertically
    m_hwnd = ::CreateWindowEx(WS_EX_TOPMOST|WS_EX_TOOLWINDOW, m_lpszClassName, 
                              TEXT("Banner"), WS_POPUP, x, y, 
                              m_dwWidth, m_dwHeight, NULL, NULL, NULL, this);