谢谢。

解决方案 »

  1.   

    图形设备的句柄,通过它在选定范围内进行画图,输出文字等操作!/*----------------------------------------
       ENDJOIN.C -- Ends and Joins Demo
                    (c) Charles Petzold, 1998
      ----------------------------------------*/#include <windows.h>LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
         static TCHAR szAppName[] = TEXT ("EndJoin") ;
         HWND         hwnd ;
         MSG          msg ;
         WNDCLASS     wndclass ;
         
         wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
         wndclass.lpfnWndProc   = WndProc ;
         wndclass.cbClsExtra    = 0 ;
         wndclass.cbWndExtra    = 0 ;
         wndclass.hInstance     = hInstance ;
         wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
         wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
         wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
         wndclass.lpszMenuName  = NULL ;
         wndclass.lpszClassName = szAppName ;
         
         if (!RegisterClass (&wndclass))
         {
              MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                          szAppName, MB_ICONERROR) ;
              return 0 ;
         }
         
         hwnd = CreateWindow (szAppName, TEXT ("Ends and Joins Demo"),
                              WS_OVERLAPPEDWINDOW,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              NULL, NULL, hInstance, NULL) ;
         
         ShowWindow (hwnd, iCmdShow) ;
         UpdateWindow (hwnd) ;
         
         while (GetMessage (&msg, NULL, 0, 0))
         {
              TranslateMessage (&msg) ;
              DispatchMessage (&msg) ;
         }
         return msg.wParam ;
    }
    LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
    {
         static int  iEnd[] = { PS_ENDCAP_ROUND, PS_ENDCAP_SQUARE, PS_ENDCAP_FLAT };
         static int  iJoin[]= { PS_JOIN_ROUND,   PS_JOIN_BEVEL,    PS_JOIN_MITER } ;
         static int  cxClient, cyClient ;
         HDC         hdc ;
         int         i ;
         LOGBRUSH    lb ;
         PAINTSTRUCT ps ;
         
         switch (iMsg)
         {
         case WM_SIZE:
              cxClient = LOWORD (lParam) ;
              cyClient = HIWORD (lParam) ;
              return 0 ;
              
         case WM_PAINT:
              hdc = BeginPaint (hwnd, &ps) ;
              
              SetMapMode (hdc, MM_ANISOTROPIC) ;
              SetWindowExtEx (hdc, 100, 100, NULL) ;
              SetViewportExtEx (hdc, cxClient, cyClient, NULL) ;
              
              lb.lbStyle = BS_SOLID ;
              lb.lbColor = RGB (128, 128, 128) ;
              lb.lbHatch = 0 ;
              
              for (i = 0 ; i < 3 ; i++)
              {
                   SelectObject (hdc,
                        ExtCreatePen (PS_SOLID | PS_GEOMETRIC |
                                      iEnd [i] | iJoin [i], 10,
                                      &lb, 0, NULL)) ;
                   BeginPath (hdc) ;
                   
                   MoveToEx (hdc, 10 + 30 * i, 25, NULL) ;
                   LineTo   (hdc, 20 + 30 * i, 75) ;
                   LineTo   (hdc, 30 + 30 * i, 25) ;
                   
                   EndPath (hdc) ;
                   StrokePath (hdc) ;
                   
                   DeleteObject (
                        SelectObject (hdc,
                             GetStockObject (BLACK_PEN))) ;
                   MoveToEx (hdc, 10 + 30 * i, 25, NULL) ;
                   LineTo   (hdc, 20 + 30 * i, 75) ;
                   LineTo   (hdc, 30 + 30 * i, 25) ;
              }
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY:
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
    }
      

  2.   

    handle device context  应该是设备上下文句柄吧,我认为!!!
      

  3.   

    A device context is a structure that defines a set of graphic objects and their associated attributes, as well as the graphic modes that affect output. The graphic objects include a pen for line drawing, a brush for painting and filling, a bitmap for copying or scrolling parts of the screen, a palette for defining the set of available colors, a region for clipping and other operations, and a path for painting and drawing operations. The remainder of this section is divided into the following three areas. MSDN里有,很详细
      

  4.   

    A device context is actually a complicated web of structures and objects linked using pointers, spreading in both user mode application address space and kernel mode system address space.
    A device context serves two important purposes within the graphics system. The main purpose is to provide an abstraction of a graphics device, such that anything above the device driver, which includes the graphics engine, the Win32 client DLLs, and the user application, can be device independent. Another usage of a device context is for storing commonly used drawing attributes, like foreground color, raster operation, pen, brush, font, etc., such that individual drawing calls do not have to carry these settings over and over again.
      

  5.   

    在windows编程中类型名前面加H的基本是句柄
    常用句柄
    HBITMAP 保存位图信息的内存域的句柄
    HBRUSH 画刷句柄
    HCTR 子窗口控件句柄
    HCURSOR 鼠标光标句柄
    HDC 设备描述表句柄
    HDLG 对话框句柄
    HFONT 字体句柄
    HICON 图标句柄
    HINSTANCE 应用程序实例句柄
    HMENU 菜单句柄
    HMODULE 模块句柄
    HPALETTE 颜色调色板句柄
    HPEN 笔的句柄
    HWND 窗口句柄
      

  6.   

    HDC 是 设备描述表(Device Context)的句柄 。    设备描述表中记录和此设备相关的各种信息,比如对于显示器来说,记录了显示器的尺寸、分辨率,还有当前选择的画笔、画刷、字体等GDI对象的信息。    可以将HDC理解做一个设备的表面,比如显示器的表明,打印机的表面等等,我们可以使用这个HDC在这些表明上绘制图形——很多GDI绘图函数,都需要使用这个HDC作为参数的。