我现在也刚好在看黄维通的《visual c++面向对象与可视化程序设计》,看到第74—76页3.1这个程序时发现在vc上编译不能通过,请高手帮我看看!!   
#include<windows.h>   
  LRESULT   CALLBACK   WndProc(HWND,UINT,WPARAM,LPARAM);   
  int   WINAPI   WinMain(HINSTANCE   hInstance,   
                                        HINSTANCE   hPrevInst,   
                                        LPSTR     lpszmdLine,   
                                        int         nCmdShow)   
          {   
                HWND   hwnd;   
                MSG     Msg;   
                WNDCLASS   wndclass;   
                char   lpszClassName[]="窗口";   
                char   lpszClassTitle[]="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,   
                                                      lpszClassTitle,   
                                                      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;   
                  }   
                  LRESULT   CALLBACK   WndProc(   
                                                                        HWND   hwnd,   
                                                                        UINT   message,   
                                                                        WPARAM   wParam,   
                                                                        LPARAM   lParam)   
                  {   
                      switch(message)     
                          {     case   WM_DESTROY:   
                                      PostQuitMessage(0);   
                                default:   
                                      return   DefWindowProc(hwnd,message,wParam,lParam);   
                            }   
                          return   0;   
                          }   反复调试,存成.C文件(我编辑运行的这个软件好像只能编辑C++文件),试验了都是报错,错误之处显示在上述这一行:
   ->          wndclass.hbrBackground=GetStockObject(WHITE_BRUSH);  
错误信息是: error C2440: '=' : cannot convert from 'void *' to 'struct HBRUSH__ *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast
 我的理解是:好像是说转换类型转换有问题,或许是我理解错了。总之,我用了强制转换,重新输入等重试都不行。
我这个编译平台是:创天Microsoft VC++ 6.0, 我先建了一个win32 application 工程名,又建立包含上面的C++源文件代码的同名文件。 目前我的电脑操作系统是Windows XP.请问高手能否帮忙,感激涕零!
  若有知道清华大学 黄维通 教授(书作者)邮箱的,也请告知,好像这个例子出错的不是我一个人了,我按书上的邮件地址无法发送出去邮件。

解决方案 »

  1.   

    wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); 这样也不行吗?
      

  2.   

    wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  这样就没问题了。
                    
      

  3.   

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

  4.   

    大哥们,我不是开玩笑的,我试过N遍用强制类型手法,都不行,可是昨天,我重新建了一个,再试验了N+1次,竟然可以了。大家的答案都是对的,就是要加强制类型转换才行。 唉,真是见鬼了...
    我最初想起来这个网站问问题,也是搜那个例题的主编黄维通的邮箱,惊奇地发现5年前就有人问和我类似的这个例子的问题,我今天大声说,清华大学 黄维通 教授所著《VC++ 6.0 visual c++面向对象与可视化程序设计》P74页的例3-1是错误的,残害了一代人的思想。真不知道他是怎么编译通过这个例子的,还在视频里大谈特谈,唉,如今的清华,...最要命的书上的邮箱无法投递反馈!!!我是个菜鸟,没有办法给大家加分,我先欠着各位的。 不知道,谁能告诉我,怎么让自己快速可以有高分? 网银充值吗?
    还有一2个小问题:1是MSDN能否下载到?
     2.我以前C学得还可以,这样去学VC++会不会退化自己的能力? 好像C语言更底层一点,不过,以前有个计算机教授在我问他怎么解决在TurboC 2.0环境中编写调用图像的问题时,建议我去学C++的 。唉,我不知道如此走下去是不是有出路?