64位win7系统下可以用gdi 绘图吗

64位win7系统下可以用gdi 绘图吗,第1张

在一个图片上使用OpengL绘图, 在另一个透明图片上调用GDI函数TextOut输出文字,然后再调用GDI函数BitBlt把文字图片粘贴到OpenGL图片上。

新方法在xp上运行一切正常。

但是在win7上运行,会出现问题,主要表现为:只显示文字,不显示OpenGL图层。

后来总结,Win7下,同时使用OpenGL函数,和GDI绘图函数,会出现问题。

#define _WIN32_WINNT 0x0501 //仅XP或以上系统有效

#include <windows.h>

int main()

{

RECT rc

HWND hwnd = FindWindow(TEXT("Notepad"), NULL)//注意窗口不能最小化

if (hwnd == NULL)

{

cout <<"找不到记事本窗口" <<endl

return 0

}

GetClientRect(hwnd, &rc)

//创建

HDC hdcScreen = GetDC(NULL)

HDC hdc = CreateCompatibleDC(hdcScreen)

HBITMAP hbmp = CreateCompatibleBitmap(hdcScreen, rc.right - rc.left, rc.bottom - rc.top)

SelectObject(hdc, hbmp)

//复制

PrintWindow(hwnd, hdc, PW_CLIENTONLY)

//PW_CLIENTONLY:Only the client area of the window is copied to hdcBlt.

//By default, the entire window is copied.

//PW_CLIENTONLY表示仅仅拷贝窗口的客户区域,而默认情况下,执行printwindow会拷贝整个窗口

//复制到粘贴板

OpenClipboard(NULL)

EmptyClipboard()

SetClipboardData(CF_BITMAP, hbmp)

CloseClipboard()

//释放

DeleteDC(hdc)

DeleteObject(hbmp)

ReleaseDC(NULL, hdcScreen)

cout <<"成功把记事本窗口复制到粘贴板,请粘贴到Windows画图工具" <<endl

return 0

}

楼上乱说:GetDesktopWindow,翻译过来是“获取台式电脑窗口”,也就是指“屏幕句柄”(定值65556,属于系统进程),不是“桌面句柄”(变值,属于explorer进程)。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11145267.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存