Board logo

标题: 在桌面上画图的问题 [打印本页]

作者: dahuatttt    时间: 2006-1-18 21:41     标题: 在桌面上画图的问题

在部分了解了API,GDI之后,我做了一个练习,目的是想在桌面上画图(我用的是C#),在我成功画出点和线之后,我却始终画不上图片。我现在的问题是,如果我用bitblt这个API,返回值不为0,但是桌面上看不到图片,我认为可能出错的原因是设备场景不同,一个是桌面的设备场景(GetDC(0)),一个是位图的设备场景(GetDC(Bitmap))。但是始终想不出解决方法。。。
求解,谢谢!
作者: Nothing    时间: 2006-1-18 22:26

桌面的DC不应当是0吧,你需要查找窗口,才能找到桌面的DC
作者: dahuatttt    时间: 2006-1-18 22:40     标题: 哦,我程序上写的是null

我随便写了个0,不好意思
不过,桌面这个必须GetDC(null),查找窗口没用的
作者: Nothing    时间: 2006-1-18 23:28

对了,如果桌面用了显示WEB内容,就是不GETDC可以控制的了,因为此时的DC已经不是正常的DC,而是使用的是IE的东西。
作者: dahuatttt    时间: 2006-1-18 23:47

恩,不过目前使用GetDC(null)还是可以获得桌面设备场景的,但是如何在上面画图像……郁闷啊
作者: Nothing    时间: 2006-1-19 19:36

刚才我用程序试了一个,桌面的HWND不是空的,也是一个窗口。所以不可能用GetDC(null)来得到,使用桌面应当使用API函数GetDesktopWindow()来实现
作者: dahuatttt    时间: 2006-1-21 01:23     标题: 难道和系统有关?

那个函数在我程序里没有作用……难道和系统有关么?
作者: Nothing    时间: 2006-1-21 11:02

HWND dhwnd = GetDesktopWindow();
dhwnd = FindWindowEx(dhwnd, 0, "rogman", "rogram Manager");
这个窗口才是桌面的窗口
作者: dahuatttt    时间: 2006-1-21 15:45     标题: 这是我的代码,已经通过,语言C#,系统Win2K

IntPtr hdc=(IntPtr)Gdi32.GetDC(null);    //获得桌面设备场景

Graphics g1=Graphics.FromHdc(hdc);

Bitmap MyImage = new Bitmap ( Screen.PrimaryScreen.Bounds.Width , Screen.PrimaryScreen.Bounds.Height , g1 ) ;  //根据屏幕大小创建一个与之相同大小的Bitmap对象

Graphics g2 = Graphics.FromImage ( MyImage ) ;

IntPtr dc2 = g2.GetHdc();

BitBlt ( (void*)dc2 , 0 , 0 , Screen.PrimaryScreen.Bounds.Width , Screen.PrimaryScreen.Bounds.Height , (void*)hdc , 0 , 0 , 13369376 ) ;

g2.ReleaseHdc ( dc2 ) ;

MyImage.Save(@"e:src.bmp",ImageFormat.Bmp);
作者: Nothing    时间: 2006-1-21 22:24

好呀,恭喜
作者: dahuatttt    时间: 2006-1-21 22:51     标题: 可惜这个不是我要的……

这个只是测试……我想要的是如何把文件里的图贴到桌面场景上去……因为无法修改设备场景,实在不知道怎么做了。。。




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0