您的位置:首页 > 编程语言

Windows编程基础 第四章 windows消息循环原理

2014-09-02 12:44 519 查看
本文是,截图: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;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: