我按照某书上的例子写了段代码,如下:
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
{
HWND hwnd;
MSG Msg;
WNDCLASS wndclass;
char lpszClassName[] = "窗口";
char lpszTitle[] = "My_Windows";
wndclass.style = 0;
    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 = GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = lpszClassName;
if(!RegisterClass(&wndclass))
{MessageBeep(0);return FALSE;}
hwnd = CreateWindow(lpszClassName,lpszTitle,WS_OVERLAPPEDWINDOW,
                CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,
hInstance,NULL);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&Msg,NULL,0,0))
{TranslateMessage(&Msg);
DispatchMessage(&Msg);}
return Msg.wParam;
}功能是建立一个窗口在vc6.0编译的时候抱错是这行  wndclass.hbrBackground = GetStockObject(WHITE_BRUSH);--------------Configuration: my1 - Win32 Debug---------------
Compiling...
my1.cpp
E:\c++stady\my1.cpp(17) : error C2440: '=' : cannot convert from 'void *' to 'struct HBRUSH__ *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast
执行 cl.exe 时出错.my1.obj - 1 error(s), 0 warning(s)
请问是什么问题?  请帮助!

解决方案 »

  1.   

    wndclass.hbrBackground = GetStockObject(WHITE_BRUSH);改成wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
      

  2.   

    谢谢 楼上  这个正确的  但是编译又报错
    --------------------Configuration: my1 - Win32 Debug--------------------
    Linking...
    my1.obj : error LNK2001: unresolved external symbol "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z)
    LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
    Debug/my1.exe : fatal error LNK1120: 2 unresolved externals
    执行 link.exe 时出错.my1.exe - 1 error(s), 0 warning(s)
      

  3.   

    你的窗口事件处理程序没有函数体.起码得有一句吧.
    这样写:#include <windows.h>
    LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
    {
    return(DefWindowProc(hwnd,msg,wparam,lparam));
    }int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
    {
    HWND hwnd;
    MSG Msg;
    WNDCLASS wndclass;
    char lpszClassName[] = "窗口";
    char lpszTitle[] = "My_Windows";
    wndclass.style = 0;
        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 = lpszClassName;
    if(!RegisterClass(&wndclass))
    {MessageBeep(0);return FALSE;}
    hwnd = CreateWindow(lpszClassName,lpszTitle,WS_OVERLAPPEDWINDOW,
                    CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,
    hInstance,NULL);
    ShowWindow(hwnd,nCmdShow);
    UpdateWindow(hwnd);
    while(GetMessage(&Msg,NULL,0,0))
    {TranslateMessage(&Msg);
    DispatchMessage(&Msg);}
    return Msg.wParam;
    }
      

  4.   

    wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
    GetStockObject函数前需要进行类型转换 它可以为多个类型
      

  5.   

    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
    这个你声名了 却没实现
    在WinMain函数后加上它的实现
      

  6.   

    按照pecker(小钻风) 改的  还有个错#include <windows.h>
    LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
    {
    return(DefWindowProc(hwnd,msg,wparam,lparam));
    }int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
    {
    HWND hwnd;
    MSG Msg;
    WNDCLASS wndclass;
    char lpszClassName[] = "窗口";
    char lpszTitle[] = "My_Windows";
    wndclass.style = 0;
    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 = lpszClassName;
    if(!RegisterClass(&wndclass))
    {MessageBeep(0);return FALSE;}
    hwnd = CreateWindow(lpszClassName,lpszTitle,WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,
    hInstance,NULL);
    ShowWindow(hwnd,nCmdShow);
    UpdateWindow(hwnd);
    while(GetMessage(&Msg,NULL,0,0))
    {TranslateMessage(&Msg);
    DispatchMessage(&Msg);}
    return Msg.wParam;
    }
    --------------------Configuration: my1 - Win32 Debug--------------------
    Linking...
    LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
    Debug/my1.exe : fatal error LNK1120: 1 unresolved externals
    执行 link.exe 时出错.my1.exe - 1 error(s), 0 warning(s)
      

  7.   

    在我的机子上编译连接都通过了.我的是VC++6.0
    先建立一个空的win32 application.然后添加一个C++文件,文件内容就是那些代码.
    你这个程序太简单了.连退出都没做.关闭窗口后程序并不能退出,要在任务管理器里关闭进程.否则下次编译连接会报错.
      

  8.   

    给你加些可以退出程序的代码吧,回调函数这么写:
    LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
    {
    if(msg==WM_DESTROY)
    {
    PostQuitMessage(0);
    return(0);
    }
    return(DefWindowProc(hwnd,msg,wparam,lparam));
    }
      

  9.   

    感谢  pecker(小钻风)   我连建立win32 application也不知道  只知道建立cpp文件。现在完成了 非常感谢!  我实在是太菜了!真的没法和这边的人比~~~  希望以后多关照!