- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我制作了一个屏幕保护程序,它可以简单地从右向左滚动用户定义的文本,如果超出左边界则自动跳回到右边。
它可以完美地与多台显示器配合使用,除了一个异常(exception):如果“主显示器”位于右侧(即显示器 #2 是主要显示器),那么我看不到滚动文本,但是监视器被代码黑了。如果主显示器是 #1,则没有问题。
我已经研究代码几个小时了,无法确定问题出现在哪个阶段;我可以确认文本位于正确的位置(我插入了验证其当前位置的日志记录代码),但就好像其中一个 API 调用只是将其删除一样。我已经阅读了他们的文档,看起来一切正常。
我通过以下方式在 WM_CREATE 中创建自定义 DC:
if (( hDC = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL)) == NULL )
为了防止闪烁,我创建了要更新的兼容对象:
void
TickerScreensaver::Paint_Prep(HDC hDC)
{
_devcon_mem = CreateCompatibleDC(hDC);
_devcon_orig = hDC;
_bmp_mem = CreateCompatibleBitmap(hDC, _width, _height);
}
并且在 WM_PAINT 中绘制时(在 BeginPaint 等之后),执行到实际设备上下文的位 block 传输:
void
TickerScreensaver::Paint(HDC hDC, RECT rect)
{
_bmp_orig = (HBITMAP)SelectObject(_devcon_mem, _bmp_mem);
FillRect(_devcon_mem, &rect, (HBRUSH)GetStockObject(BLACK_BRUSH));
if ( _gdiplus_token != NULL )
{
Graphics graphics(_devcon_mem);
SolidBrush brush(cfg.display.font_colour);
FontFamily font_family(cfg.display.font_family.c_str());
Font font(&font_family, cfg.display.font_size, FontStyleRegular, UnitPixel);
PointF point_f((f32)cfg.display.text_pos.x, (f32)cfg.display.text_pos.y);
RectF layout_rect(0, 0, 0, 0);
RectF bound_rect;
graphics.SetTextRenderingHint(TextRenderingHintAntiAlias);
graphics.MeasureString(cfg.display.text.c_str(), cfg.display.text.length(), &font, layout_rect, &bound_rect);
cfg.display.offset.x = (DWORD)(0 - bound_rect.Width);
cfg.display.offset.y = (DWORD)(bound_rect.Height / 2);
graphics.DrawString(cfg.display.text.c_str(), cfg.display.text.length(), &font, point_f, &brush);
}
BitBlt(hDC, 0, 0, _width, _height, _devcon_mem, 0, 0, SRCCOPY);
SelectObject(_devcon_mem, _bmp_orig);
}
我这样计算尺寸:
void
TickerScreensaver::GetFullscreenRect(HDC hDC, RECT *rect)
{
RECT s = { 0, 0, 0, 0 };
if ( EnumDisplayMonitors(hDC, NULL, EnumMonitorCallback, (LPARAM)&s) )
{
CopyRect(rect, &s);
s.left < 0 ?
_width = s.right + (0 + -s.left) :
_width = s.right;
s.top < 0 ?
_height = s.bottom + (0 + -s.top) :
_height = s.bottom;
}
}
请注意,计算出的宽度、高度等均为 100% 准确;纯粹是绘图代码在主显示器上似乎不起作用,只有当它在右侧时(将原点设置为 {0,0},监视器 #1 然后为负值)。它也可以在三显示器上重现,主要在中央。
最佳答案
好吧,事实证明它很好也很简单 - 在 Paint()
中,我们应该使用一个使用真实宽度和高度的矩形,而不是检索到的包含负值的矩形(实际检索到的那个来自 API 函数):
RECT r = { 0, 0, _width, _height };
_bmp_orig = (HBITMAP)SelectObject(_devcon_mem, _bmp_mem);
FillRect(_devcon_mem, &r, (HBRUSH)GetStockObject(BLACK_BRUSH));
关于c++ - Win32 Screensaver 多台显示器,主显示器不在最左边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15908022/
您能否提供简单的方法来阻止屏幕保护程序并防止锁定计算机。 我需要它来运行自动化测试,但由于全局计算机锁定公司政策,我无权在本地机器上更改它。 最佳答案 这是mouseJiggler Mouse Jig
我用 C# 和 Windows 窗体编写了一个屏幕保护程序。为了测试,我一直很懒惰,只是将配置文件用于我的所有设置(还没有设置对话框),但是当 Windows 运行屏幕保护程序时,程序似乎无法找到或读
我正在寻找一种体面的、非蹩脚的方式来禁止 xscreensaver、kscreensaver 或 gnome-screensaver,无论哪个可能正在运行,最好以与屏幕保护程序无关的方式,并且它绝对必
我只想让 Label 的 TextColor 每次从左到右进入屏幕时使用 arc4random.. 每次应用加载时,以下代码适用于 1 种随机颜色,但当它离开 View 时则无效! NSTimer*
我有一个屏幕保护程序项目。在该项目的资源中呈现了图像文件。我正在尝试像这样加载它: NSString* imageName = [[NSBundle mainBundle] pathForResour
我制作了一个屏幕保护程序,它可以简单地从右向左滚动用户定义的文本,如果超出左边界则自动跳回到右边。 它可以完美地与多台显示器配合使用,除了一个异常(exception):如果“主显示器”位于右侧(即显
我正在为 OSX 创建一个简单的屏幕保护程序,并想为一些后台计算创建一个线程。 我在 SO 中找到了这个函数,它将在 X 秒后创建一个线程: func backgroundThread(delay:
有谁知道如何仅使用命令或编辑 conf 来禁用 ubuntu 10.10 屏幕保护程序? 因为我只能通过 ssh 连接到机器来关闭屏幕保护程序 谢谢。 最佳答案 要禁用屏幕保护程序: gconftoo
这个问题在这里已经有了答案: 9年前关闭。 Possible Duplicate: How do I prevent the iPhone screen from dimming or turning
很多人可能知道the classic windows screen saver .有谁知道这是如何用 3D 或 2D 编程的?不需要真正的代码 - 只需对算法进行全面解释就可以了。 最佳答案 This
我正在尝试让 python 与 dbus 和屏幕保护程序交互,但无论如何它断然拒绝这样做。 Perl 似乎没问题,但我写的是 python,而不是 perl(还) Python 2.6.6 (r266
我编写了一个简单的屏幕保护程序,它使用 QCView 加载 Quartz 动画。但是当我在 Snow Leopard 上安装它时,它会出现在屏幕保护程序预览中,并显示一条消息“您无法在此计算机上使用
您知道在 Mac 上,大约 2-3 分钟没有事件后,它会部分淡出屏幕 - 在 iOS 上也是如此吗?好吧,我想用 jQuery 在网页上复制这个。 我知道如何让它淡出等等,但我不知道如何让它在 2 或
我想知道是否有办法在游戏运行时阻止屏幕保护程序(锁定屏幕)在 iOS 上启动? 我正在开发的游戏是在 Cocos2d for iOS 上。 我想实现的是: "while my game is runn
到目前为止,我的项目一直依靠以下命令来调整屏幕保护程序设置: defaults write com.apple.screensaver askForPasswordDelay 0 defaults w
我是一名优秀的程序员,十分优秀!