我的程序如下:
# include<windows.h>
# include<stdio.h>LRESULT CALLBACK WindowLiProc(WNDPROC lpPrevWndFunc,
    HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
)
{
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_WINLOGO);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WindowLiProc;
wndcls.lpszClassName="CheersLi01";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls);HWND hwnd;
hwnd=CreateWindow("CheersLi01","Cheers Li Api 学习",WS_OVERLAPPEDWINDOW,0,0,800,600,NULL,NULL,hInstance,NULL);ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);MSG msg;while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;} WindowLiProc(WNDPROC lpPrevWndFunc,
    HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
LPARAM lParam)
 {
 switch(uMsg)
 {
 case WM_CHAR :
 char szChar[20];
 sprintf(szChar,"Char is %d",wParam);
 MessageBox(hwnd,szChar,"CheersLi01",0);
 break;
 case WM_LBUTTONDOWN :
 MessageBox(hwnd,"mouse click","CheersLi01",0);
 HDC hdc;
 hdc=GetDC(hwnd);
 TextOut(hdc,0,50,"我的C++学习",ARRAYSIZE("我的C++学习"));
 ReleaseDC(hwnd,hdc);
 case WM_PAINT :
 HDC hDc;
 PAINTSTRUCT ps;
 hDc=BeginPaint(hwnd,&ps);
 TextOut(hDc,0,50,"C++ Programming",ARRAYSIZE("C++ Programming"));
 EndPaint(hwnd,&ps);
 break;
 case WM_CLOSE :
 if(IDYES==MessageBox(hwnd,"是否真的结束?","Hints for you",0))
 {
 DestroyWindow(hwnd);
 }
 break;
 case WM_DESTROY :
 PostQuitMessage(0);
 break;
 default:
 return DefWindowProc(hwnd,uMsg,wParam,lParam);
 }   return 0;
 }
我在vs2008 下运行,找了半天还是调试有错误,希望大家帮我,我已经折腾的筋疲力尽了,提前谢过^_^
我编译一直报错如下:
1>------ 已启动生成: 项目: WinMain, 配置: Debug Win32 ------
1>正在编译...
1>WinMain.cpp
1>d:\c++\sunxin_practice\chapter01\winmain\winmain\winmain.cpp(26) : error C2440: “=”: 无法从“LRESULT (__stdcall *)(WNDPROC,HWND,UINT,WPARAM,LPARAM)”转换为“WNDPROC”
1>        该转换要求 reinterpret_cast、C 样式转换或函数类型转换
1>d:\c++\sunxin_practice\chapter01\winmain\winmain\winmain.cpp(56) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\c++\sunxin_practice\chapter01\winmain\winmain\winmain.cpp(56) : error C2556: “int WindowLiProc(WNDPROC,HWND,UINT,WPARAM,LPARAM)”: 重载函数与“LRESULT WindowLiProc(WNDPROC,HWND,UINT,WPARAM,LPARAM)”只是在返回类型上不同
1>        d:\c++\sunxin_practice\chapter01\winmain\winmain\winmain.cpp(6) : 参见“WindowLiProc”的声明
1>d:\c++\sunxin_practice\chapter01\winmain\winmain\winmain.cpp(56) : error C2373: “WindowLiProc”: 重定义;不同的类型修饰符
1>        d:\c++\sunxin_practice\chapter01\winmain\winmain\winmain.cpp(6) : 参见“WindowLiProc”的声明
1>生成日志保存在“file://d:\C++\sunxin_practice\chapter01\WinMain\WinMain\Debug\BuildLog.htm”
1>WinMain - 4 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

解决方案 »

  1.   

    LRESULT CALLBACK WindowLiProc(WNDPROC lpPrevWndFunc,
        HWND hwnd,
        UINT uMsg,
        WPARAM wParam,
        LPARAM lParam);
    ================
    这是窗口处理函数,它怎么有五个参数啊?窗口处理函数的原型是固定的,只能是这样的:
    LRESULT CALLBACK WindowProc( HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
    你上面那个怎么多了个WNDPROC lpPreWndFunc啊?去掉吧。WindowLiProc(WNDPROC lpPrevWndFunc,
        HWND hwnd,
        UINT uMsg,
        WPARAM wParam,
        LPARAM lParam)
     {
      ....
    ===========
    这是窗口处理函数的实现部分,同样有上面的问题,除些之外,实现部分的函数头应该和声明是一样的,所以应该写成这样:
    LRESULT CALLBACK WindowLiProc(
        HWND hwnd,
        UINT uMsg,
        WPARAM wParam,
        LPARAM lParam)
     {
         switch(uMsg)
      

  2.   


    wltg2001 太感谢你了! 按照你说指出的,改了后程序可以运行了!真是帮了我大忙了,感激之情无以言表!以后继续想你学习,呵呵! 
      

  3.   

    窗口处理过程函数 是如下定义:LRESULT CALLBACK WindowProc( HWND hwnd,
        UINT uMsg,
        WPARAM wParam,
        LPARAM lParam
    );
      

  4.   


    非常感谢你!按照 wltg2001 方法问题解决了!