编译不能通过,先看我的程序/* 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)中的内容呀?谢谢了!!!
#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)中的内容呀?谢谢了!!!
所以
你应该是(HWND) lParam来比较,而不是LOWORD(lParam)试试呢
把{ //建立编辑控制窗口(面积)
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!