本文是,截图:Windows编程基础 第四章 windows消息循环原理
原文的下载地址是:http://yunpan.cn/cd59fbVfQDUtD 访问密码 bbc0
// windows05.cpp : 定义应用程序的入口点。
//
#include "stdafx.h"
#include "windows05.h"
#include "locale.h"
#define WM_MYFIRSTMESSAGE (WM_USER+1)
HINSTANCE g_hInst=NULL;
HWND g_hButton=NULL;
HANDLE g_hConsole=NULL;
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
// OnCreate()
VOID OnCreate(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
LPCREATESTRUCT lp=LPCREATESTRUCT(lParam);
MessageBox(NULL,lp->lpszClass,TEXT("窗口类的名称:"),MB_OK);
g_hButton=CreateWindowEx(0,
TEXT("BUTTON"),
TEXT("窗口上的按钮!"),
WS_CHILD|WS_VISIBLE,
100,
100,
100,
100,
hWnd,
NULL,
g_hInst,
NULL);
}
// OnSize()
VOID OnSize(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
//The low-order word of lParam specifies the new width of the client area.
// The high-order word of lParam specifies the new height of the client area.
int nWidth=LOWORD(lParam);
int nHeight=HIWORD(lParam);
static int nX=0;
static int nY=0;
TCHAR szText[200]={0};
swprintf_s(szText,TEXT("窗口的宽度:%d,窗口的高度:%d"),nWidth,nHeight);
if (g_hButton!=NULL)
{
nX=(nWidth-100)/2;
nY=(nHeight-100)/2;
MoveWindow(g_hButton,nX,nY,100,100,TRUE);
}
MessageBox(NULL,szText,TEXT("窗口客户区大小信息:"),MB_OK);
}
// OnSysCommand()
INT OnSysCommand(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{ int result;
switch(wParam)
{
case SC_CLOSE:
result=MessageBox(hWnd,TEXT("是否关闭窗口?"),TEXT("关闭!"),MB_OKCANCEL);
return result;
break;
}
return IDNO;
}
//WM_PAINT
VOID OnPaint(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps={0};
HDC hDC=BeginPaint(hWnd,&ps);
TCHAR szText5[30]=TEXT("HELLO WM_PAINT!");
//TextOut(hDC,100,100,szText,strlen(szText));
TextOut(hDC,200,200,szText5,_tcslen(szText5));
EndPaint(hWnd,&ps);
}
BOOL RegisterWnd(TCHAR * pszClassName )
{
WNDCLASSEX wce={0};
wce.cbClsExtra=0;
wce.cbSize=sizeof(wce);
wce.cbWndExtra=0;
wce.hbrBackground=(HBRUSH)(COLOR_BTNFACE+1);
wce.hCursor=NULL;
wce.hIcon=NULL;
wce.hIconSm=NULL;
wce.hInstance=g_hInst;
wce.lpfnWndProc=WndProc;
wce.lpszClassName=pszClassName;
wce.lpszMenuName=NULL;
wce.style=CS_HREDRAW|CS_VREDRAW;
ATOM result=RegisterClassEx(&wce);
if (result==0)
{
MessageBox(NULL,L"窗口类注册失败!",L"窗口类注册失败!",MB_OK);
return FALSE;
}
return TRUE;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
_tsetlocale(LC_ALL,TEXT("chs"));
TCHAR szText[100]=TEXT("\nWM_KEYDOWN\n");
TCHAR szText1[100]=TEXT("");
TCHAR szText2[100]=TEXT("\nWM_SYSKEYDOWN\n");
TCHAR szText3[100]=TEXT("\nWM_SYSKEYUP\n");
int result=0;
switch(uMsg)
{
case WM_DESTROY:
//PostMessage(hWnd,WM_QUIT,0,0);
//SendMessage(hWnd,WM_QUIT,0,0);
PostQuitMessage(0);
break;
case WM_CREATE:
OnCreate(hWnd,uMsg,wParam,lParam);
SendMessage(hWnd,WM_MYFIRSTMESSAGE,0,0);
break;
case WM_SIZE:
OnSize(hWnd,uMsg,wParam,lParam);
break;
case WM_SYSCOMMAND:
result=OnSysCommand(hWnd,uMsg,wParam,lParam);
if (result!=IDOK)
{
return FALSE;
}
break;
case WM_MYFIRSTMESSAGE:
MessageBox(NULL,TEXT("WM_MYFIRSTMESSAGE"),TEXT("我的第一个消息!"),MB_OK);
break;
case WM_PAINT:
OnPaint(hWnd,uMsg,wParam,lParam);
break;
case WM_KEYDOWN:
switch(wParam)
{
case VK_LEFT:
WriteConsole(g_hConsole,szText,_tcslen(szText),0,0);
break;
case VK_RIGHT:
WriteConsole(g_hConsole,szText,_tcslen(szText),0,0);
break;
case VK_UP:
WriteConsole(g_hConsole,szText,_tcslen(szText),0,0);
break;
case VK_DOWN:
WriteConsole(g_hConsole,szText,_tcslen(szText),0,0);
break;
}
break;
case WM_SYSKEYDOWN:
WriteConsole(g_hConsole,szText2,_tcslen(szText2),0,0);
break;
case WM_SYSKEYUP:
WriteConsole(g_hConsole,szText3,_tcslen(szText3),0,0);
break;
case WM_CHAR:
{
_stprintf(szText1,TEXT("您按下的按键是:%c\n"),wParam);
WriteConsole(g_hConsole,szText1,_tcslen(szText1),0,0);
}
break;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
VOID DisplayWindow(HWND hWnd)
{
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
}
VOID Message()
{
MSG msg={0};
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
HWND CreateMyWindow(TCHAR * pszClassName)
{
HWND hWndNew=CreateWindowEx(0,pszClassName,L"新建窗口",WS_OVERLAPPEDWINDOW,50,50,400,400,NULL,NULL,g_hInst,NULL);
return hWndNew;
}
VOID NewConsole()
{
AllocConsole();
g_hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
TCHAR szText[50]=TEXT("Debug Messaage:\n");
WriteConsole(g_hConsole,szText,_tcslen(szText),NULL,NULL);
}
INT WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd )
{
NewConsole();
g_hInst=hInstance;
RegisterWnd(TEXT("MyWnd"));
HWND hWnd=CreateMyWindow(TEXT("MyWnd"));
DisplayWindow(hWnd);
Message();
return TRUE;
}