我写了一个程序,在桌面图标下绘制桌面壁纸上的小部件,一切都很好。 但我揭示了一个奇怪的错误 - 我的程序在其他一些计算机上无效 - 它们显示出来 启动后没有小部件的同一个桌面。
那么,任何人都有这方面的知识吗?请帮我! :)
(在我的电脑中,我找不到附近的任何电脑,小部件不起作用,一切正常。 我写了很多测试程序,尝试用相当的方法在桌面上绘制任何东西, 但测试在我的朋友计算机上也没有显示任何内容。)
绘图方法:
我写了一个dll,找到了桌面窗口(progman-> child-> child)) 并创建一个钩子并为桌面安装自己的窗口过程。 在窗口过程中,我挂钩了WM_ERASEBKGND:
case WM_ERASEBKGND:
HDC hdc = (HDC)wparam;
PaintDesktop(hdc);
WidgetPaint(hdc);
return 1;
//我跳过这段代码来获取和设置剪裁区域以便快速绘制。 (我尝试了所有剪辑和剪辑的组合)
在测试中,我也尝试在WM_PAINT消息中绘制具有相同结果的小部件 - 所有这些都已经对我有用,但并不适用于所有朋友。
upd:我解决了! :)
答案 0 :(得分:4)
我解决了! 这很简单就是一台64位机器) 所以我编译我的64位代码和小部件启动工作相当不错!
而且, -
PaintDesktop(hdc);
将使用Aero在Windows7(和Vista)中生成非常明亮的壁纸。 (用户的壁纸变得明亮)。 必须是
CallWindowProc(OldWndProc, WM_ERASEBKGND, wparam, lparam);
原因 - Aero将PaintDesktop()视为通常的颜色(通过虚拟屏幕壁纸,与桌面上相同)并使用颜色求和。
问候! :)