#include "stdafx.h"
HINSTANCE g_hInstance;int g_x2=100;
int g_y2=100;void DrawS(HDC hDC)
{
    MoveToEx(hDC,g_x2+200,g_y2+100,NULL);//300,200
LineTo(hDC,g_x2+150,g_y2-20);//250,80
LineTo(hDC,g_x2+250,g_y2-20);//350,80
LineTo(hDC,g_x2+200,g_y2+100);//300,200
}void OnPaint(HWND hWnd)
{
    PAINTSTRUCT obj={0};
HDC hDC=BeginPaint(hWnd,&obj);
    HPEN nPen=CreatePen(PS_DASH,6,RGB(192,168,026));
    HGDIOBJ nOldPen = SelectObject(hDC,nPen);
    HBRUSH nBrush2 = CreateHatchBrush(HS_HORIZONTAL,RGB(87,11,11));
    HGDIOBJ nOldBrush2 = SelectObject(hDC, nBrush2);
    DrawS(hDC);
    SelectObject(hDC,nOldBrush2);
    DeleteObject(nBrush2);
    SelectObject(hDC,nOldPen);
    DeleteObject(nPen);
    EndPaint(hWnd,&obj);
}LRESULT CALLBACK Windowproc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    case WM_PAINT:
        OnPaint(hWnd);
        break;
    }
    return DefWindowProc(hWnd,uMsg,wParam,lParam);
}void Register(LPSTR pszClassName, WNDPROC pszWndProc )
{
    WNDCLASSEX obj={0};
    obj.cbSize = sizeof(obj);
    obj.cbClsExtra=0;
    obj.cbWndExtra=0;
    obj.hbrBackground=(HBRUSH)(COLOR_GRAYTEXT+2);
    obj.hCursor=NULL;
    obj.hIcon=NULL;
    obj.hIconSm=NULL;
    obj.hInstance=g_hInstance;
    obj.lpfnWndProc=pszWndProc;
    obj.lpszClassName=pszClassName;
    obj.lpszMenuName=NULL;
    obj.style=CS_HREDRAW|CS_VREDRAW|CS_OWNDC;
    RegisterClassEx(&obj);
}HWND Create(LPSTR pszClassName,LPSTR pszWndName)
{
    HWND hWnd= CreateWindowEx(NULL,pszClassName,pszWndName,WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,g_hInstance,NULL);
    return hWnd;
}
void Display(HWND hWnd)
{
    ShowWindow(hWnd,SW_SHOW);
    UpdateWindow(hWnd);
}void Message(HWND hWnd)
{
    MSG nMsg={0};
    while(GetMessage(&nMsg,NULL,0,0))
    {
        TranslateMessage(&nMsg);
        DispatchMessage(&nMsg);
    }
}int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
     // TODO: Place code here.
    g_hInstance=hInstance;
    Register("Main", (WNDPROC)Windowproc);
    HWND hMain = Create("Main","Application");
    Display(hMain);
    Message(hMain);
    return 0;
}

解决方案 »

  1.   

    先CreatePolygonRgn创建一个多边形 region,然后用FillRgn
      

  2.   

    不只有OnPaint函数中才可以使用dc
    任何位置都可以通过GetDC获取dc
    只不过OnPaint里要通过BeginPaint和EndPaint来操作dc
      

  3.   


    BOOL FillRgn(
      HDC hdc,    // handle to device context
      HRGN hrgn,  // handle to region to be filled//这个参数穿啥啊?
      HBRUSH hbr  // handle to brush used to fill the region
    );
      

  4.   

    就是你用CreatePolygonRgn所创建的region啊,返回一个HRGN
      

  5.   

    我说过了
    可通过GetDC获取hrgn是你要填充的区域的句柄
    详见http://msdn.microsoft.com/en-us/library/dd162717(v=vs.85).aspx