一个简单的问题,只费一下时间
rbird 2002-06-08 04:06:12 /*我第一次练习用C++写了一个窗口程序(见下面),完全在VC++6.0调试通过。现在的问题是如果焦点不在button按钮上,按ESC键,能退出。但是只要点击了Button,就不能退出了,怎么写Button的消息传递呢?*/
#include<windows.h>
BOOL InitWindow(HINSTANCE hInstance,int nCmdShow);
LRESULT CALLBACK WinProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
HWND hwnd;
HINSTANCE hInst;
int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
hInst = hInstance;
MSG msg;
if(!InitWindow(hInstance,nCmdShow))return FALSE;
while(1)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if(msg.message ==WM_QUIT)break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam ;
}
static BOOL InitWindow(HINSTANCE hInstance,int nCmdShow)
{
HWND hBtn = NULL;
WNDCLASS wc;
wc.style = NULL;
wc.lpfnWndProc =(WNDPROC)WinProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = NULL;
wc.hbrBackground =(HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName ="MyTest";
RegisterClass(&wc);
hwnd = CreateWindow("MyTest","MY first program",WS_POPUP|WS_MAXIMIZE,0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),NULL,NULL,hInstance,NULL);
if(!hwnd)return FALSE;
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
hBtn = CreateWindow( "BUTTON", "Push Button",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 50, 50, 100, 32,hwnd,NULL,hInst, NULL );
return TRUE;
}
LRESULT CALLBACK WinProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_KEYDOWN:
switch(wParam)
{
case VK_ESCAPE:
MessageBox(hWnd,"退出!","退出",MB_OK);
PostQuitMessage(0);
break;
}
break;
case WM_RBUTTONDOWN:
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd,message,wParam,lParam);
}