11 12
发新话题
打印

在桌面上画图的问题

在桌面上画图的问题

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

TOP

桌面的DC不应当是0吧,你需要查找窗口,才能找到桌面的DC

TOP

哦,我程序上写的是null

我随便写了个0,不好意思
不过,桌面这个必须GetDC(null),查找窗口没用的

TOP

对了,如果桌面用了显示WEB内容,就是不GETDC可以控制的了,因为此时的DC已经不是正常的DC,而是使用的是IE的东西。

TOP

恩,不过目前使用GetDC(null)还是可以获得桌面设备场景的,但是如何在上面画图像……郁闷啊

TOP

刚才我用程序试了一个,桌面的HWND不是空的,也是一个窗口。所以不可能用GetDC(null)来得到,使用桌面应当使用API函数GetDesktopWindow()来实现

TOP

难道和系统有关?

那个函数在我程序里没有作用……难道和系统有关么?

TOP

HWND dhwnd = GetDesktopWindow();
dhwnd = FindWindowEx(dhwnd, 0, "rogman", "rogram Manager");
这个窗口才是桌面的窗口

TOP

这是我的代码,已经通过,语言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);

TOP

好呀,恭喜

TOP

 11 12
发新话题