代碼如下﹕
#include <windows.h>
#include <stdlib.h>
#include<string.h>
#include<math.h>
#define PI 3.1415926
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);
HWND hWndMain;  //Gloable  handler in the whole programint WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

MSG Message;
if(!InitWindowsClass(hInstance)) 
return FALSE;
if (!InitWindows(hInstance,nCmdShow)) 
return FALSE;
while(GetMessage(&Message,0,0,0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam ;  
}long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{
  HDC hDC;
HBRUSH hBrush;
HPEN hPen;
PAINTSTRUCT PtStr;
double dfRadious0=100.0;
double dfRadious1;
POINT lpOuterPoints[5],lpInnerPoints[5];
POINT lpTriangle[3];
dfRadious1=dfRadious0*sin(0.1*PI)/sin(126.0/180*PI);
for (int i=0;i<5;i++)
{
lpOuterPoints[i].x=(long)(dfRadious0*cos(i*72.0/180*PI));
lpOuterPoints[i].y=(long)(dfRadious0*sin(i*72.0/180*PI));
lpInnerPoints[i].x=(long)(dfRadious1*cos(i*72.0/180*PI+36.0/180*PI));
lpInnerPoints[i].y=(long)(dfRadious1*sin(i*72.0/180*PI+36.0/180*PI));
}

switch(iMessage)
{
case WM_PAINT:
hDC=BeginPaint(hWnd,&PtStr);
SetMapMode(hDC,MM_ANISOTROPIC);
SetWindowOrgEx(hDC,-100,-100,NULL);
hPen=CreatePen(PS_SOLID,1,RGB(255,0,0));
SelectObject(hDC,hPen);
Polygon(hDC,lpOuterPoints,5);
for(i=0;i<5;i++);
{
lpTriangle[0]=lpOuterPoints[i%5];
lpTriangle[1]=lpInnerPoints[i%5];
lpTriangle[2]=lpOuterPoints[(i+1)%5];
hBrush=CreateSolidBrush(RGB(i*10,i*20,i*30));
SelectObject(hDC,hBrush);
Polygon(hDC,lpOuterPoints,5);
lpTriangle[2]=lpInnerPoints[(i+4)%5];
hBrush=CreateSolidBrush(RGB(i*40,i*30,i*20));
SelectObject(hDC,hBrush);
Polygon(hDC,lpTriangle,3);
}
hBrush=CreateSolidBrush(RGB(255,255,255));
SelectObject(hDC,hBrush);
Polygon(hDC,lpInnerPoints,5);
MoveToEx(hDC,lpOuterPoints[0].x,lpOuterPoints[0].y,NULL);
for(i=1;i<=5;i++)
{
hPen=CreatePen(PS_SOLID,1,RGB(0,i*51,0));
SelectObject(hDC,hPen);
LineTo(hDC,lpOuterPoints[(i=2)%5].x,lpOuterPoints[(i+2)%5].y );
}
hPen=(HPEN)(GetStockObject(PS_NULL));
DeleteObject(hPen);
DeleteObject(hBrush);
EndPaint(hWnd,&PtStr);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
}

BOOL InitWindows(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hWnd=CreateWindow( "AAA",
"AADFSDFSD",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);
if (!hWnd)    //Returns to a FALSE value when not be able to create the windows
return FALSE;
hWndMain=hWnd;   
ShowWindow(hWnd,nCmdShow);     //show the window
UpdateWindow(hWnd);
return TRUE;
}
BOOL InitWindowsClass(HINSTANCE hInstance)
{
WNDCLASS WndClass;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName="Ploygon";
WndClass.lpszMenuName=NULL;
WndClass.style=0;
return RegisterClass(&WndClass);
}//在VC下編譯﹐但是不能顯示出窗口﹐在單步執行時﹐CREATEWINDOW返回句柄為0,不知是什么原因?

解决方案 »

  1.   

    #include <windows.h>
    #include <stdlib.h>
    #include<string.h>
    #include<math.h>
    #define PI 3.1415926
    long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);
    ATOM InitWindowsClass(HINSTANCE hInstance);
    BOOL InitWindows(HINSTANCE hInstance,ATOM cls, int nCmdShow);
    HWND hWndMain;  //Gloable  handler in the whole programint WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

    MSG Message;
    ATOM cls;
    if(!(cls = InitWindowsClass(hInstance))) 
    return FALSE;
    if (!InitWindows(hInstance,cls,nCmdShow)) 
    return FALSE;
    while(GetMessage(&Message,0,0,0))
    {
    TranslateMessage(&Message);
    DispatchMessage(&Message);
    }
    return Message.wParam ;  
    }long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
    {
      HDC hDC;
    HBRUSH hBrush;
    HPEN hPen;
    PAINTSTRUCT PtStr;
    double dfRadious0=100.0;
    double dfRadious1;
    POINT lpOuterPoints[5],lpInnerPoints[5];
    POINT lpTriangle[3];
    dfRadious1=dfRadious0*sin(0.1*PI)/sin(126.0/180*PI);
    for (int i=0;i<5;i++)
    {
    lpOuterPoints[i].x=(long)(dfRadious0*cos(i*72.0/180*PI));
    lpOuterPoints[i].y=(long)(dfRadious0*sin(i*72.0/180*PI));
    lpInnerPoints[i].x=(long)(dfRadious1*cos(i*72.0/180*PI+36.0/180*PI));
    lpInnerPoints[i].y=(long)(dfRadious1*sin(i*72.0/180*PI+36.0/180*PI));
    }

    switch(iMessage)
    {
    case WM_PAINT:
    hDC=BeginPaint(hWnd,&PtStr);
    SetMapMode(hDC,MM_ANISOTROPIC);
    SetWindowOrgEx(hDC,-100,-100,NULL);
    hPen=CreatePen(PS_SOLID,1,RGB(255,0,0));
    SelectObject(hDC,hPen);
    Polygon(hDC,lpOuterPoints,5);
    for(i=0;i<5;i++);
    {
    lpTriangle[0]=lpOuterPoints[i%5];
    lpTriangle[1]=lpInnerPoints[i%5];
    lpTriangle[2]=lpOuterPoints[(i+1)%5];
    hBrush=CreateSolidBrush(RGB(i*10,i*20,i*30));
    SelectObject(hDC,hBrush);
    Polygon(hDC,lpOuterPoints,5);
    lpTriangle[2]=lpInnerPoints[(i+4)%5];
    hBrush=CreateSolidBrush(RGB(i*40,i*30,i*20));
    SelectObject(hDC,hBrush);
    Polygon(hDC,lpTriangle,3);
    }
    hBrush=CreateSolidBrush(RGB(255,255,255));
    SelectObject(hDC,hBrush);
    Polygon(hDC,lpInnerPoints,5);
    MoveToEx(hDC,lpOuterPoints[0].x,lpOuterPoints[0].y,NULL);
    for(i=1;i<=5;i++)
    {
    hPen=CreatePen(PS_SOLID,1,RGB(0,i*51,0));
    SelectObject(hDC,hPen);
    LineTo(hDC,lpOuterPoints[(i=2)%5].x,lpOuterPoints[(i+2)%5].y );
    }
    hPen=(HPEN)(GetStockObject(PS_NULL));
    DeleteObject(hPen);
    DeleteObject(hBrush);
    EndPaint(hWnd,&PtStr);
    return 0;
    case WM_DESTROY:
    PostQuitMessage(0);
    return 0;
    default:
    return(DefWindowProc(hWnd,iMessage,wParam,lParam));
    }
    }

    BOOL InitWindows(HINSTANCE hInstance, ATOM cls, int nCmdShow)
    {
    HWND hWnd;
    hWnd=CreateWindow( (LPCTSTR)cls,
    "AADFSDFSD",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    0,
    CW_USEDEFAULT,
    0,
    NULL,
    NULL,
    hInstance,
    NULL);
    if (!hWnd)    //Returns to a FALSE value when not be able to create the windows
    return FALSE;
    hWndMain=hWnd;   
    ShowWindow(hWnd,nCmdShow);     //show the window
    UpdateWindow(hWnd);
    return TRUE;
    }
    ATOM  InitWindowsClass(HINSTANCE hInstance)
    {
    WNDCLASS WndClass;
    WndClass.cbClsExtra=0;
    WndClass.cbWndExtra=0;
    WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));
    WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
    WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    WndClass.hInstance=hInstance;
    WndClass.lpfnWndProc=WndProc;
    WndClass.lpszClassName="Ploygon";
    WndClass.lpszMenuName=NULL;
    WndClass.style=0;
    return RegisterClass(&WndClass);
    }