#include<windows.h>
#include<stdio.h>
LRESULT CALLBACK WinSunProc(
 HWND hwnd,
 UINT uMsg,
 WPARAM wParam,
 WPARAM 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_ERROR);
 wndcls.hInstance=hInstance;//应用程序实例句柄由winmain函数传递过来
 wndcls.lpfnWndProc=WinSunProc;//有错?????????????????????????????????????
 wndcls.lpszClassName="sunxin2006";
 wndcls.lpszMenuName=NULL;
 wndcls.style=CS_HREDRAW|CS_VREDRAW; RegisterClass(&wndcls);//注册窗口类//创建一个窗口,定义一个变量用来保存成功创建窗口后返回的句柄
  HWND hwnd;
  hwnd=CreateWindow("sunxin2006","http://www.sunxin.org",WS_OVERLAPPEDWINDOW
  ,0,0,600,400,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);MSG msg;
  while(GetMessage(&msg,NULL,0,0)){
  TranslateMessage(&msg);
  DispatchMessage(&msg);
  }
return msg.wParam;
}//winmain overLRESULT CALLBACK WinSunProc(
 HWND hwnd,
 UINT uMsg,
 WPARAM wParam,
 WPARAM lParam
)//编写窗口过程函数
{
switch(uMsg){
case WM_CHAR:
char szChar[20];
        sprintf(szChar,"char code is %d",wParam);
MessageBox(hwnd,szChar,"char",0);
break;
case WM_LBUTTONDOWN:
        MessageBox(hwnd,"mouse clicked","message",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"程序员之家",strlen("程序员之家"));
        break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"http://www.sunxin.org",strlen("http://www.sunxin.org"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否真的结束?","message",MB_YESNO)){
 DestroyWindow(hwnd);
}
        break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}编译提示出错:
D:\cfiles\Winmain\Winmain.cpp(23) : error C2440: '=' : cannot convert from 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,unsigned int)' to 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)'
        This conversion requires a reinterpret_cast, a C-style cast or function-style cast
Error executing cl.exe.

解决方案 »

  1.   

    #include <windows.h> 
    #include <stdio.h> 
    LRESULT CALLBACK WinSunProc( 
     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_ERROR); 
     wndcls.hInstance=hInstance;//应用程序实例句柄由winmain函数传递过来 
     wndcls.lpfnWndProc=WinSunProc;//有错????????????????????????????????????? 
     wndcls.lpszClassName="sunxin2006"; 
     wndcls.lpszMenuName=NULL; 
     wndcls.style=CS_HREDRAW |CS_VREDRAW;  RegisterClass(&wndcls);//注册窗口类 //创建一个窗口,定义一个变量用来保存成功创建窗口后返回的句柄 
      HWND hwnd; 
      hwnd=CreateWindow("sunxin2006","http://www.sunxin.org",WS_OVERLAPPEDWINDOW 
      ,0,0,600,400,NULL,NULL,hInstance,NULL); 
    ShowWindow(hwnd,SW_SHOWNORMAL); 
    UpdateWindow(hwnd); MSG msg; 
      while(GetMessage(&msg,NULL,0,0)){ 
      TranslateMessage(&msg); 
      DispatchMessage(&msg); 
      } 
    return msg.wParam; 
    }//winmain over LRESULT CALLBACK WinSunProc( 
     HWND hwnd, 
     UINT uMsg, 
     WPARAM wParam, 
     LPARAM lParam 
    )//编写窗口过程函数 

    switch(uMsg){ 
    case WM_CHAR: 
    char szChar[20]; 
            sprintf(szChar,"char code is %d",wParam); 
    MessageBox(hwnd,szChar,"char",0); 
    break; 
    case WM_LBUTTONDOWN: 
            MessageBox(hwnd,"mouse clicked","message",0); 
    HDC hdc; 
    hdc=GetDC(hwnd); 
    TextOut(hdc,0,50,"程序员之家",strlen("程序员之家")); 
            break; 
    case WM_PAINT: 
    HDC hDC; 
    PAINTSTRUCT ps; 
    hDC=BeginPaint(hwnd,&ps); 
    TextOut(hDC,0,0,"http://www.sunxin.org",strlen("http://www.sunxin.org")); 
    EndPaint(hwnd,&ps); 
    break; 
    case WM_CLOSE: 
    if(IDYES==MessageBox(hwnd,"是否真的结束?","message",MB_YESNO)){ 
     DestroyWindow(hwnd); 

            break; 
    case WM_DESTROY: 
    PostQuitMessage(0); 
    break; 
    default: 
    return DefWindowProc(hwnd,uMsg,wParam,lParam); 

    return 0; 
      

  2.   

    LRESULT CALLBACK WinSunProc( 
     HWND hwnd, 
     UINT uMsg, 
     WPARAM wParam, 
     WPARAM lParam    错在这里
    )//编写窗口过程函数 
      

  3.   

     wndcls.lpfnWndProc=WinSunProc;//它们的类型不同;