在使用OpenGL初始化时候需要一个DC。有这样两个函数GetDC()和GetWindowDC()他们有什么区别呢。
如果利用下面语句获得的是什么dc是上边的哪一个函数?
CClientDC *pDC = CClientDC(this);
HDC dc = pDC->m_hDC;

解决方案 »

  1.   

    windowdc是window的dc,clientdc是window的client部分的dc。
      

  2.   

    楼上正解  windowdc是整个窗口  clientdc是窗口的客户区部分
      

  3.   

    GetDc函数:用于获得hWnd参数所指定窗口的客户区域的一个设备环境。所获得的设备环境可以是通用、类或者私有类型,具体由指定窗口的类风格决定。对于通用设备环境,GetDc函数每次获取一个设备环境时都会用默认属性对它进行初始化。该函数获得的类和私有设备环境会与它们最后一次的设置保持一致。当设备环境不再需要时,应该调用ReleaseDC函数将其释放。   
        
    GetWindowDC函数:返回hWnd参数所指定的窗口的设备环境。获得的设备环境覆盖了整个窗口(包括非客户区),例如标题栏、菜单、滚动条,以及边框。这使得程序能够在非客户区域实现自定义图形,例如自定义标题或者边框。当不再需要该设备环境时,需要调用ReleaseDC函数释放设备环境。注意,该函数只获得通用设备环境,该设备环境的任何属性改变都不会反映到窗口的私有或者类设备环境中(如果窗口有的话) ReleaseDC函数
    函数功能:函数释放设备上下文环境(DC)供其他应用程序使用。函数的效果与设备上下文环境类型有关。它只释放公用的和设备上下文环境,对于类或私有的则无效。
    函数原型:int ReleaseDC(HWND hWnd, HDC hdc);
    参数:
    hWnd:指向要释放的设备上下文环境所在的窗口的句柄。
    hDC:指向要释放的设备上下文环境的句柄。
    返回值:返回值说明了设备上下文环境是否释放;如果释放成功,则返回值为1;如果没有释放成功,则返回值为0。
    注释:每次调用GetWindowDC和GetDC函数检索公用设备上下文环境之后,应用程序必须调用ReleaseDC函数来释放设备上下文环境。
    应用程序不能调用ReleaseDC函数来释放由CreateDC函数创建的设备上下文环境,只能使用DeleteDC函数
     
      

  4.   

    GetWindowDC: The GetWindowDC function retrieves the device context (DC) for the entire window, including title bar, menus, and scroll bars
    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.
      

  5.   

    发现:pDC = BeginPaint( &ps);在界面改变大小的时候不闪。而GetWindowDC,在改变界面大小的时候会闪。
    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);
    }
      

  6.   


    那所说的通用设备环境是指什么呢,那相对于通用设备环境的又是什么呢?
    还有一点是设备环境的属性是随着时间改变的,那当某一时刻获取的dc在释放dc之前,这个dc不是已经过时了吗?谢谢