win32应用程序窗口创造

win32应用程序窗口创建
我在win32 应用程序中创建了一个窗口,再往上面添加button和EditControl的时候,发现按钮一点击程序就退出了,EditControl也是同样的现象,求教如何解,代码如下:
LRESULT CALLBACK WndProc(HWND hwnd, UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
HINSTANCE hInstance;
switch(message)
{
case WM_CREATE:
//创建按钮和编辑框
{
CreateWindow("Button","打开串口",WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON,35,45,160,65,hwnd,NULL/*(HMENU)IDB_ONE*/,hInstance,NULL);
CreateWindow("Button","关闭串口",WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON,35,110,160,65,hwnd,NULL/*(HMENU)IDB_TWO*/,hInstance,NULL);
CreateWindow("Button","发送",WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON,35,175,160,65,hwnd,NULL/*(HMENU)IDB_THREE*/,hInstance,NULL);
//CreateWindowEx(0L,"Edit", NULL,WS_CHILD|WS_BORDER|WS_VISIBLE|ES_LEFT|ES_AUTOVSCROLL| ES_MULTILINE,195,45,160,45,hwnd,NULL,hInstance,NULL);
//CreateWindowEx(0L,"Edit", NULL,WS_CHILD|WS_BORDER|WS_VISIBLE|ES_LEFT|ES_AUTOVSCROLL| ES_MULTILINE,195,45,160,45,hwnd,NULL,hInstance,NULL);
CreateWindow("Edit",NULL,WS_CHILD|WS_VISIBLE|ES_AUTOVSCROLL|WS_BORDER|ES_LEFT|ES_MULTILINE,195,45,160,45,hwnd,(HMENU)IDC_FOUR,hInstance,NULL);
}
return(0);
case WM_PAINT:
hdc = BeginPaint(hwnd,&ps);
TextOut(hdc,0,0,"A Window",27);
EndPaint(hwnd,&ps);
return(0);
case WM_COMMAND:
{
switch(LOWORD(wParam))
{//按钮事件
case IDB_ONE:
{
char sztext[4];
HWND hwndEdit1 = ::GetDlgItem(hwnd,IDC_FOUR);
GetWindowText(hwndEdit1,sztext,4);
MessageBox(NULL,sztext,"caution",MB_OK|MB_ICONINFORMATION);
//SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)"open");
}
break;
case IDB_TWO:
SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)"close");
break;
case IDB_THREE:
SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)"send");
break;
default:
break;
}
}
case WM_DESTROY:
PostQuitMessage(0);
return(0);
}
return DefWindowProc(hwnd,message,wParam,lParam);
}

------解决思路----------------------
create返回缺省窗口过程,不要返回0
------解决思路----------------------

case WM_COMMAND:
{
switch(LOWORD(wParam))
{//按钮事件
case IDB_ONE:
{
char sztext[4];
HWND hwndEdit1 = ::GetDlgItem(hwnd,IDC_FOUR);
GetWindowText(hwndEdit1,sztext,4);
MessageBox(NULL,sztext,"caution",MB_OK
------解决思路----------------------
MB_ICONINFORMATION);
//SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)"open");
}
break;
case IDB_TWO:
SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)"close");
break;
case IDB_THREE:
SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)"send");
break;
default:
break;
}
}
case WM_DESTROY:
PostQuitMessage(0);
return(0);

这里有问题吧,switch(LOWORD(wParam))处理完按钮事件后,你用了一个break;
break;跳出的是这个switch(LOWORD(wParam)),并没有跳出switch(message)
于是执行了
case WM_DESTROY:
        PostQuitMessage(0);
        return(0);

多打断点,多调试,这类问题很容易发现