编译不能通过,先看我的程序/* Note:Your choice is Windows C IDE */
#include <windows.h>
#include <stdlib.h>HINSTANCE hCurInst;long FAR PASCAL _WndFun(HWND,UINT,WPARAM,LPARAM);  //窗口处理函数int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPreInst,LPSTR lpCmd, int nStyle)

static char Name[]="STATIEX"; //窗口类名
HWND  hWnd; //窗口句柄
MSG  msg; //Winddows消息
WNDCLASS   wc; //窗口类


    hCurInst=hInst;
if(!hPreInst)
{
wc.lpszClassName =Name; //窗口类名为“示例”
wc.hInstance =hInst; //当前实例句柄
wc.lpfnWndProc =_WndFun; //窗口处理函数为WndProc
wc.hIcon =LoadIcon(NULL,IDI_APPLICATION);//窗口的最小化图标为默认图标
wc.hCursor=LoadCursor(NULL,IDC_ARROW); //窗口采用箭头光标
wc.lpszMenuName =NULL; //窗口无菜单
wc.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);//窗口背景为白色
wc.style  =CS_HREDRAW|CS_VREDRAW;//窗口类型
wc.cbClsExtra =0; //窗口类无扩展
wc.cbWndExtra =0; //窗口实例无扩展


if(!RegisterClass(&wc))
return(FALSE);//注册
}
hWnd=CreateWindow( Name,//窗口类名
                   Name,//窗口标题名
                   WS_OVERLAPPEDWINDOW,//窗口的风格
                   300,
                   150, //窗口左上角坐标为默认值
                   450,
                   300, //窗口的高和宽为默认值
                   NULL, //此窗口无父窗口
                   NULL, //此窗口无主菜单
                   hInst,
                   NULL);

ShowWindow(hWnd,nStyle);
UpdateWindow(hWnd);


while(GetMessage(&msg,NULL,0,0))    //消息循环
{   
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}
long FAR PASCAL _WndFun(HWND hWnd,UINT mes,WPARAM wParam,LPARAM lParam)
{
static HWND hCal,hExt;
static HWND hRS,hArS,hRE,hArE;
RECT w;
static int x,y,bw=60,bh=25;
char buf[100];
double r,ar;
    
switch(mes)
{
    case WM_CREATE:
           GetClientRect(hWnd,&w);    //窗口的宽与高 
   x=(w.right-bw)*1/2;          //命令按钮的X位置
   y=(w.bottom-bh)*5/6;       //命令按钮的Y位置
   //建立命令按钮
   hCal=CreateWindow("BUTTON","计算",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,x,y,
                  bw,bh,hWnd,0,hCurInst,0);
   x=(w.right-bw)*2/3;        
   y=(w.bottom-bh)*5/6;   
   //建立命令按钮
   hExt=CreateWindow("BUTTON","退出",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,x,y,
                  bw,bh,hWnd,0,hCurInst,0);
   //建立标签
   hRS=CreateWindow("STATIC","半径",WS_CHILD|WS_VISIBLE|SS_LEFT,10,10,
                  50,25,hWnd,(HMENU)1,hCurInst,0);
   //建立编辑控制窗口(半径)
   hRE=CreateWindow("EDIT",0,WS_CHILD|WS_VISIBLE|WS_BORDER,60,10,
                  w.right-100,25,hWnd,(HMENU)2,hCurInst,0);
   //建立标签
   hArS=CreateWindow("STATIC","面积",WS_CHILD|WS_VISIBLE|SS_LEFT,10,80,
                  50,25,hWnd,(HMENU)3,hCurInst,0);
    //建立编辑控制窗口(面积)
   hRE=CreateWindow("EDIT",0,WS_CHILD|WS_VISIBLE|WS_BORDER,60,80,
                  w.right-100,25,hWnd,(HMENU)4,hCurInst,0);    return 0;

case WM_COMMAND:
if(LOWORD(lParam)==hCal)
{
GetWindowText(hRE,(LPSTR)buf,100);   //读取源编辑控制窗口
r=atof(buf);
ar=r*r*3.14159;
_gcvt(ar,7,buf);
SetWindowText(hArE,(LPSTR)buf);     //写入目的控制窗口
}
if(LOWORD(lParam)==hExt)
DestroyWindow(hWnd);
return 0; case WM_DESTROY:
PostQuitMessage(0); //释放所建窗口
    return 0;
        
        
default:          //执行其他情况
      return DefWindowProc(hWnd,mes,wParam,lParam);
}

}
老是出现no conversion from 'struct HWND__ *' to 'int'
虽然是四个错误,但总结是一个错误,有人能告诉我怎么修改一下if(LOWORD(lParam)==hExt)中的内容呀?谢谢了!!!

解决方案 »

  1.   

    WM_COMMAND 对于这个消息来说hwndCtl = (HWND) lParam;
    所以
    你应该是(HWND) lParam来比较,而不是LOWORD(lParam)试试呢
      

  2.   

    呵呵,我发现了! 还是你不够细心噢! 楼主
    把{ //建立编辑控制窗口(面积)
       hRE=CreateWindow("EDIT",0,WS_CHILD|WS_VISIBLE|WS_BORDER,60,80,
                      w.right-100,25,hWnd,(HMENU)4,hCurInst,0);}里面的hRE改成hArE
    还有就是你的第一个问题LOWORD(lParam)==hCal
    因为你定义hCal为HWND类型,而句柄其实也是个整数值
    所以你必须强制转换lParam为HWND型!
    我运行了改后的程序  一切OK!