GetDC函数是通过窗口的句柄获取设备环境,这样就可以把获取到的设备环境使用到后面的GDI函数里,这样就可以在窗口的客户区中绘图了。当应用程序结束时,需要使用ReleaseDC来释放设备环境。如果是私有设备时,就可以不删除它。这个API实现函数如下:
#001 EXTINLINE HDC WINAPI
#002 GetDC(HWND hWnd)
#003 {
这里调用函数NtUserGetDC来实现相应的功能。
#004 return NtUserGetDC(hWnd);
#005 }
NtUserGetDC函数是在内核WIN32K里实现的,如下:
#001 HDC APIENTRY
#002 NtUserGetDC(HWND hWnd)
#003 {
#004 DPRINT("NtUGetDC -> %x:%x\n", hWnd, !hWnd ? DCX_CACHE | DCX_WINDOW : DCX_USESTYLE );
#005
这里是调用函数NtUserGetDCEx来实现。
#006 return NtUserGetDCEx(hWnd, NULL, NULL == hWnd ? DCX_CACHE | DCX_WINDOW : DCX_USESTYLE);
#007 }
NtUserGetDCEx函数代码如下:
#001 HDC APIENTRY
#002 NtUserGetDCEx(HWND hWnd OPTIONAL, HANDLE ClipRegion, ULONG Flags)
#003 {
#004 PWINDOW_OBJECT Wnd=NULL;
#005 DECLARE_RETURN(HDC);
#006
进入用户临界区。
#007 DPRINT("Enter NtUserGetDCEx\n");
#008 UserEnterExclusive();
#009
从窗口句柄获取窗口对象。
#010 if (hWnd && !(Wnd = UserGetWindowObject(hWnd)))
#011 {
#012 RETURN(NULL);
#013 }
使用函数UserGetDCEx从窗口对象获取窗口相关的设备句柄。
#014 RETURN( UserGetDCEx(Wnd, ClipRegion, Flags));
#015
#016 CLEANUP:
#017 DPRINT("Leave NtUserGetDCEx, ret=%i\n",_ret_);
#018 UserLeave();
#019 END_CLEANUP;
#020 }
分享到:
相关推荐
ReactOS-0.3.3源码是一款开源操作系统项目,旨在构建一个与Microsoft Windows系统高度兼容的免费替代品。这个项目对于那些希望了解操作系统工作原理,尤其是Windows内核机制的开发者和研究者来说,是一个宝贵的资源...
ReactOS源代码是开源项目ReactOS的核心组成部分,它旨在实现一个与Microsoft Windows操作系统高度兼容的免费和开放源代码操作系统。这个项目始于1996年,由一群对Windows内核工作原理感兴趣的开发者发起,目标是提供...
ReactOS是一款开源、免费的操作系统,致力于实现与微软Windows NT系列操作系统高度兼容。这款系统采用微内核架构,由全球的志愿者开发者共同维护和开发。"reactos可调试光盘映像"指的是专为开发和调试目的设计的...
ReactOS-0.3.14源代码是一个重要的开源项目,旨在实现与Windows NT系列操作系统高度兼容的自由软件。这个项目的核心目标是提供一个与Windows系统底层行为相似的开源环境,使得用户和开发者可以在不依赖Microsoft ...
这个版本的VMware虚拟机文件(ReactOS-0.3.13-VMware)包含了所有必要的组件,包括ReactOS操作系统映像以及VMware Workstation Player或Player Pro的配置设置,以便用户可以直接启动并运行ReactOS。文件名中的...
ReactOS是一个开源、免费的操作系统项目,旨在实现与Microsoft Windows高度兼容。它的源代码是学习Windows操作系统底层工作原理以及软件开发的重要资源。ReactOS的开发始于1996年,目标是提供一个与Windows NT系列...
ReactOS是一个开源、免费的操作系统项目,其目标是创建一个与Windows NT家族(包括NT4.0、2000、XP和2003)高度兼容的替代品。这个项目始于1996年,旨在提供一个与微软Windows类似的用户体验,同时保持底层操作系统...
ReactOS是一个开源项目,旨在实现一个与Microsoft Windows操作系统兼容的自由软件。它的目标是提供一个与Windows NT内核类似的环境,允许Windows应用程序和驱动程序在ReactOS上无缝运行。 在开发和维护ReactOS的...
ReactOS键盘切换程序,简称KBSwitch,是ReactOS操作系统中的一个重要组件,它负责管理和实现系统小托盘区域的键盘布局切换功能。ReactOS是一个开源、免费的操作系统,旨在实现与微软Windows系统的高度兼容性。...
ReactOS是一个开源操作系统项目,旨在实现与微软Windows操作系统兼容的免费和开放源代码替代品。ReactOS-0317-CLT2015-Source这个压缩包包含了ReactOS在2015年3月17日版本的源代码。这个版本的源代码对于开发者和...
ReactOS是一个开源、免费的操作系统项目,旨在实现与微软Windows操作系统高度兼容。它的目标是创建一个与Windows NT内核相似的系统,使得软件开发者和用户可以在ReactOS上运行原本为Windows设计的应用程序,无需进行...
ReactOS是一个开源、免费的操作系统项目,旨在实现与Microsoft Windows操作系统兼容。它的源码提供了深入理解Windows内核工作原理的机会,对于操作系统开发者、驱动程序编写者以及对底层系统有兴趣的人员来说,是一...
ReactOS是一个开源操作系统,旨在与Microsoft Windows兼容。在ReactOS中,`Rundll`是实现Windows兼容性的重要组成部分,它允许程序加载和执行DLL(动态链接库)中的函数。`Rundll32.exe`是Windows系统中的一个实用...
ReactOS是一个旨在创建自由及开源的操作系统的项目,其主要目标是实现对Microsoft Windows的高度兼容性。这意味着除了用户界面的相似之外,ReactOS还必须能够运行大量为Windows设计的软件和硬件驱动。为了达到这一...
本书《Windows内核情景分析-采用开源代码ReactOS(下册)》是一本深入探讨Windows操作系统内核的专著,作者采用了开源操作系统ReactOS的源代码作为分析材料,对Windows内核的结构、功能、算法和实现进行了详细的解剖...
ReactOS-0.4.11-src.zip是一个包含ReactOS 0.4.11源代码的压缩包,该项目是一个开放源代码的操作系统,旨在实现与Microsoft Windows的高度兼容性。这个压缩包对于开发者、学生以及对操作系统底层工作原理感兴趣的人...
ReactOS 是一个开源的、免费的操作系统项目,旨在实现与微软Windows NT内核系列操作系统(如Windows 2000, XP, Vista, 7等)的高度兼容。ReactOS-0.3.13-REL-src(1).zip 文件是一个包含ReactOS 0.3.13版本源代码的...
ReactOS是一个开源、免费的操作系统项目,旨在实现与Microsoft Windows的源代码级兼容性。它的设计目标是提供一个与Windows NT内核家族相媲美的、符合用户和开发者期望的环境,但并不依赖于任何专有技术。ReactOS的...
ReactOS是一个开源、免费的操作系统,致力于实现与微软Windows NT系列操作系统高度兼容。ReactOS-0.4.7-PressKit是ReactOS项目为0.4.7版本发布准备的媒体资料包,主要包含了用于宣传和报道ReactOS 0.4.7版本更新的...
ReactOS 是一个开源操作系统项目,旨在实现与微软Windows操作系统高度兼容的免费软件。"ReactOS-0.4.7-PressKit4_ReactOS_" 可能是ReactOS项目发布0.4.7版本时提供的媒体资料包,主要用于宣传和展示项目进展。...