我现在也刚好在看黄维通的《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.请问高手能否帮忙,感激涕零!
若有知道清华大学 黄维通 教授(书作者)邮箱的,也请告知,好像这个例子出错的不是我一个人了,我按书上的邮件地址无法发送出去邮件。
#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.请问高手能否帮忙,感激涕零!
若有知道清华大学 黄维通 教授(书作者)邮箱的,也请告知,好像这个例子出错的不是我一个人了,我按书上的邮件地址无法发送出去邮件。
我最初想起来这个网站问问题,也是搜那个例题的主编黄维通的邮箱,惊奇地发现5年前就有人问和我类似的这个例子的问题,我今天大声说,清华大学 黄维通 教授所著《VC++ 6.0 visual c++面向对象与可视化程序设计》P74页的例3-1是错误的,残害了一代人的思想。真不知道他是怎么编译通过这个例子的,还在视频里大谈特谈,唉,如今的清华,...最要命的书上的邮箱无法投递反馈!!!我是个菜鸟,没有办法给大家加分,我先欠着各位的。 不知道,谁能告诉我,怎么让自己快速可以有高分? 网银充值吗?
还有一2个小问题:1是MSDN能否下载到?
2.我以前C学得还可以,这样去学VC++会不会退化自己的能力? 好像C语言更底层一点,不过,以前有个计算机教授在我问他怎么解决在TurboC 2.0环境中编写调用图像的问题时,建议我去学C++的 。唉,我不知道如此走下去是不是有出路?