在使用OpenGL初始化时候需要一个DC。有这样两个函数GetDC()和GetWindowDC()他们有什么区别呢。
如果利用下面语句获得的是什么dc是上边的哪一个函数?
CClientDC *pDC = CClientDC(this);
HDC dc = pDC->m_hDC;
如果利用下面语句获得的是什么dc是上边的哪一个函数?
CClientDC *pDC = CClientDC(this);
HDC dc = pDC->m_hDC;
GetWindowDC函数:返回hWnd参数所指定的窗口的设备环境。获得的设备环境覆盖了整个窗口(包括非客户区),例如标题栏、菜单、滚动条,以及边框。这使得程序能够在非客户区域实现自定义图形,例如自定义标题或者边框。当不再需要该设备环境时,需要调用ReleaseDC函数释放设备环境。注意,该函数只获得通用设备环境,该设备环境的任何属性改变都不会反映到窗口的私有或者类设备环境中(如果窗口有的话) ReleaseDC函数
函数功能:函数释放设备上下文环境(DC)供其他应用程序使用。函数的效果与设备上下文环境类型有关。它只释放公用的和设备上下文环境,对于类或私有的则无效。
函数原型:int ReleaseDC(HWND hWnd, HDC hdc);
参数:
hWnd:指向要释放的设备上下文环境所在的窗口的句柄。
hDC:指向要释放的设备上下文环境的句柄。
返回值:返回值说明了设备上下文环境是否释放;如果释放成功,则返回值为1;如果没有释放成功,则返回值为0。
注释:每次调用GetWindowDC和GetDC函数检索公用设备上下文环境之后,应用程序必须调用ReleaseDC函数来释放设备上下文环境。
应用程序不能调用ReleaseDC函数来释放由CreateDC函数创建的设备上下文环境,只能使用DeleteDC函数
GetDC:The GetDC function retrieves a handle to a display device context (DC) for the client area of a specified window or for the entire screen.
LRESULT CXDialogInc::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if (message==WM_MOVE||message==WM_PAINT||message==WM_NCACTIVATE ||message == WM_NOTIFY|| message==WM_NCPAINT)
{
PAINTSTRUCT ps;
CDC * pDC = NULL;
pDC = BeginPaint( &ps);
pDC = GetWindowDC( );
CRect rectWin;
GetWindowRect( rectWin);
rectWin.SetRect( 0, 0, rectWin.Width(), rectWin.Height());
if ( m_pXDialog > 0)
{
((CXUIBase*)m_pXDialog)->Draw( pDC, rectWin);
}
ReleaseDC( pDC);
EndPaint( &ps);
return 0;
}
else if ( message == WM_ERASEBKGND)
{
return 0;
}
return CDialog::WindowProc(message, wParam, lParam);
}
那所说的通用设备环境是指什么呢,那相对于通用设备环境的又是什么呢?
还有一点是设备环境的属性是随着时间改变的,那当某一时刻获取的dc在释放dc之前,这个dc不是已经过时了吗?谢谢