代码如下:
#include <windows.h>// 函数原型int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int);LRESULT WINAPI WndProc(HWND,UINT,WPARAM,LPARAM);// WinMain 函数int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){HWND hWnd; // 主窗口句柄MSG msg; // 窗口消息WNDCLASS wc; // 窗口类if (!hPrevInstance){// 填充窗口类信息wc.style=CS_HREDRAW|CS_VREDRAW;wc.lpfnWndProc=WndProc;wc.cbClsExtra=0;wc.cbWndExtra=0;wc.hInstance=hInstance;wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);wc.hCursor=LoadCursor(NULL,IDC_ARROW);wc.hbrBackground=GetStockObject(WHITE_BRUSH);wc.lpszMenuName=NULL;wc.lpszClassName="SdkDemo1";// 注册窗口类RegisterClass(&wc);}// 创建应用程序主窗口hWnd=CreateWindow ("SdkDemo1", // 窗口类名"第一个Win32 SDK应用程序", // 窗口标题WS_OVERLAPPEDWINDOW, // 窗口样式CW_USEDEFAULT, // 初始化 x 坐标CW_USEDEFAULT, // 初始化 y 坐标CW_USEDEFAULT, // 初始化窗口宽度CW_USEDEFAULT, // 初始化窗口高度NULL, // 父窗口句柄NULL, // 窗口菜单句柄hInstance, // 程序实例句柄NULL); // 创建参数// 显示窗口ShowWindow(hWnd,SW_SHOW);// 更新主窗口客户区UpdateWindow(hWnd);// 开始消息循环while (GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}// WndProc 主窗口过程LRESULT WINAPI WndProc (HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam){HDC hdc;RECT rc;HPEN hPen,hPenOld;HBRUSH hBrush,hBrushOld;switch (msg){case WM_PAINT:hdc=GetDC(hWnd);GetClientRect(hWnd,&rc);hPen=CreatePen(PS_SOLID,0,RGB(0,0,0));hBrush=CreateHatchBrush(HS_DIAGCROSS,RGB(0,0,0));hPenOld=SelectObject(hdc,hPen);hBrushOld=SelectObject(hdc,hBrush);Ellipse(hdc,rc.left,rc.top,rc.right,rc.bottom);SelectObject(hdc,hPenOld);SelectObject(hdc,hBrushOld);ReleaseDC(hWnd,hdc);break;case WM_DESTROY:PostQuitMessage(0);break;default:break;}return DefWindowProc(hWnd,msg,wParam,lParam);}错误如下:
Compiling...
MainFile.cpp
e:\vc++\sdkdomain1\mainfile.cpp(47) : error C2440: '=' : cannot convert from 'void *' to 'struct HBRUSH__ *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast
e:\vc++\sdkdomain1\mainfile.cpp(141) : error C2440: '=' : cannot convert from 'void *' to 'struct HPEN__ *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast
e:\vc++\sdkdomain1\mainfile.cpp(143) : error C2440: '=' : cannot convert from 'void *' to 'struct HBRUSH__ *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast
请教了!!!!

解决方案 »

  1.   

    不是的,这是《SDK路报》是的一个例子。
      

  2.   

    hPenOld=(HPEN)SelectObject(hdc,hPen);
    hBrushOld=(HBRUSH)SelectObject(hdc,hBrush);
      

  3.   

    wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); // 47 行hPenOld=(HPEN)SelectObject(hdc,hPen);    // 141 行hBrushOld=(HBRUSH)SelectObject(hdc,hBrush);  // 143 行
      

  4.   

    thank you , FFXI(黑) .I have finished the compile.
      

  5.   

    来几个类型强制转换就行了,现在程序如下:
    #include <windows.h>// 函数原型int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int);LRESULT WINAPI WndProc(HWND,UINT,WPARAM,LPARAM);// WinMain 函数int WINAPI WinMain (HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow){
    HWND hWnd; // 主窗口句柄
    MSG msg; // 窗口消息
    WNDCLASS wc; // 窗口类
    if (!hPrevInstance)
    {
    // 填充窗口类信息
    wc.style=CS_HREDRAW|CS_VREDRAW;
    wc.lpfnWndProc=WndProc;
    wc.cbClsExtra=0;
    wc.cbWndExtra=0;
    wc.hInstance=hInstance;
    wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.lpszMenuName=NULL;
    wc.lpszClassName="SdkDemo1";
    // 注册窗口类
    RegisterClass(&wc);
    }
    // 创建应用程序主窗口
    hWnd=CreateWindow ("SdkDemo1", // 窗口类名
       "第一个Win32 SDK应用程序", // 窗口标题
       WS_OVERLAPPEDWINDOW, // 窗口样式
       CW_USEDEFAULT, // 初始化 x 坐标
       CW_USEDEFAULT, // 初始化 y 坐标
       CW_USEDEFAULT, // 初始化窗口宽度
       CW_USEDEFAULT, // 初始化窗口高度
       NULL, // 父窗口句柄
       NULL, // 窗口菜单句柄
       hInstance, // 程序实例句柄
       NULL); // 创建参数
    // 显示窗口
    ShowWindow(hWnd,SW_SHOW);
    // 更新主窗口客户区
    UpdateWindow(hWnd);
    // 开始消息循环
    while (GetMessage(&msg,NULL,0,0))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    return msg.wParam;
    }
    // WndProc 主窗口过程LRESULT WINAPI WndProc (HWND hWnd,
    UINT msg,
    WPARAM wParam,
    LPARAM lParam){
    HDC hdc;
    RECT rc;
    HPEN hPen,hPenOld;
    HBRUSH hBrush,hBrushOld;
    switch (msg)
    {
    case WM_PAINT:
    hdc=GetDC(hWnd);
    GetClientRect(hWnd,&rc);
    hPen=CreatePen(PS_SOLID,0,RGB(0,0,0));
    hBrush=CreateHatchBrush(HS_DIAGCROSS,RGB(0,0,0));
    hPenOld=(HPEN)SelectObject(hdc,hPen);
    hBrushOld=(HBRUSH)SelectObject(hdc,hBrush);
    Ellipse(hdc,rc.left,rc.top,rc.right,rc.bottom);
    SelectObject(hdc,hPenOld);
    SelectObject(hdc,hBrushOld);
    ReleaseDC(hWnd,hdc);
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    break;
    }
    return DefWindowProc(hWnd,msg,wParam,lParam);
    }
      

  6.   

    就是强制类型的问题,你上书店看看Richard J.Simon的<WINDOWS 2000 API 超级宝典》中关于窗口创建的一部分,挺全的!
      

  7.   

    同意FFXI(黑) 和wolfpzp() 说的,另外if 判断后最好加上return FALSE
      

  8.   

        你的wc.hbrBackground=GetStockObject(WHITE_BRUSH);错了   应该写成 wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);