wndclass.lpszClassName=NULL;//串是菜单资源 ,这个有问题,不能为NULL
改为如下:
#include
//LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
/*wndproc函数为消息返回函数,hwnd为窗口句柄,uint原型是unsigned int表示32位值,
wparm表示无符号短整型,lparam表示有符号长整形*/
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevunstance,PSTR szcmdline,int iCmdShow)
{
//窗口注册
static TCHAR szap[]=TEXT("HELLOWIN");
HWND hwnd; //三大句柄的窗口句柄
MSG msg; //四大结构的消息结构
WNDCLASS wndclass; //四大结构窗口类结构wndclass
// wndclass. = sizeof(WNDCLASSEX);
wndclass.style=CS_HREDRAW|CS_VREDRAW; /*窗口结构类风格 CS_类风格选项,hredraw水平长度改变
重画窗口,vredraw垂直长度重画窗口*/
wndclass.lpfnWndProc=WndProc;//窗口句柄
wndclass.cbClsExtra=0;//指令必须在窗口结构结尾分配字节
wndclass.cbWndExtra=0;//指令必须在实例后面分配字节
wndclass.hInstance=hinstance;//注册窗口类实例列表
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);/*加载图标,可以为空,第一个参数为空不是自定义,
IDI图标ID号applacatton*/
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//加载鼠标光标,可以为空,IDC为鼠标图标
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//提供背景刷,获取白色图形对象
wndclass.lpszClassName=NULL;//串是菜单资源
wndclass.lpszMenuName=szap;;
if(!RegisterClass(&wndclass)) //为应用程序注册窗口类
{
MessageBox(NULL,TEXT("NO,sorry"),szap,MB_ICONERROR);
return 0;
}
//创建窗口
hwnd=CreateWindow(szap, //窗口类
TEXT("The Hello Program"), //窗口标题
WS_OVERLAPPEDWINDOW, //WS窗口风格,overlappedwindow是标准窗口风格
CW_USEDEFAULT, //CW创建窗口选项,usedefault初始位置x
CW_USEDEFAULT, //初始位置y
CW_USEDEFAULT, //初始x方向尺寸
CW_USEDEFAULT, //初始y方向尺寸
NULL, //父窗口句柄 是否在最上面
NULL, //窗口菜单句柄 是否有菜单
hinstance, //程序实例句柄
NULL); //创建参数
//显示窗口
ShowWindow(hwnd,iCmdShow); //将窗口类句柄显示,和主函数显示相同
UpdateWindow(hwnd); //指定窗口对其重绘
//消息循环
while(GetMessage(&msg,NULL,0,0)) //如果从消息队列返回是0结束
{
TranslateMessage(&msg); //翻译键盘信息
DispatchMessage(&msg); //将信息传给窗口过程
}
return msg.wParam;
}