SDK3(note下)

此代码增加了关于字符消息
键盘消息
键盘码一些理解

#include <windows.h>
#include<tchar.h>
#include <stdio.h>
#include <strsafe.h>

/*鼠标消息
* 键盘消息
* Onkeydown
* Onkeyup
* //键盘扫描码
* /lParam>>16&0ff
快捷键消息
菜单消息
控件消息
自定义消息
窗口消息
客户区域的概念(Client Aera)
非客户区


*/
VOID showerrormassage()
{
	LPVOID lpMsgBuf;
FormatMessage(
	  FORMAT_MESSAGE_ALLOCATE_BUFFER |/*  分别为FORMAT_MESSAGE_ALLOCATE_BUFFER由函数分配输出缓冲区,
FORMAT_MESSAGE_FROM_SYSTEM表示程序将会在系统消息表资源中搜索所需消息,FORMAT_MESSAGE_IGNORE_INSERTS程序将会忽略搜索到消息中的插入序列。  */
      FORMAT_MESSAGE_FROM_SYSTEM |
      FORMAT_MESSAGE_IGNORE_INSERTS,
      NULL,
     GetLastError(),
     MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
     (LPTSTR)&lpMsgBuf,
     0, NULL);
	 MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK | MB_ICONINFORMATION);
	 LocalFree(lpMsgBuf);
}

//热键消息
//热键消息需要注册
//RegisterHotKey()
//软件卸载的时候还要卸载这个注册
//所以ip号就是这么回事
//
//UnregisterHotKey注销的函数

LRESULT OnHotkey(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
	return TRUE;
}

LRESULT OnCreate(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
	//初始化
   /* MessageBox(NULL,_T("onCrate"), _T("asm"), MB_OK);*/
	OutputDebugString(_T("[11syy]WM_CREATE\n"));
	return TRUE;
}//消息处理

LRESULT OnClese(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
	/*MessageBox(NULL, _T("onClose"), _T("asm"), MB_OK);*/
	OutputDebugString(_T("[11syy]WM_ClOSE\n"));
	DestroyWindow(hwnd);
	return TRUE;
}
LRESULT OnKeydown(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	//获取键盘状态
	BYTE KeyState[256];
	if (!GetKeyboardState(KeyState))
	{
		return TRUE;
	}

	//键盘扫描码
	BYTE SanCode = (UINT)lParam>>16&0xff;
	WORD ch;
	ToAscii(wParam, SanCode, KeyState, &ch, 0);
	TCHAR szBuf[MAXBYTE];
	wsprintf(szBuf, _T("[asm] OnKeydown) % c\n"), ch);
	OutputDebugString(szBuf);
	return TRUE;
}


//消息处理

LRESULT OnDestroy(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  /*  MessageBox(NULL, _T("onDestory"), _T("asm"), MB_OK);
	*/PostMessage(hwnd, WM_QUIT, 0, NULL);
	OutputDebugString(_T("[11syy]WM_DESTROY\n"));
	return TRUE;
}

LRESULT OnMove(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	TCHAR szBuf[MAXBYTE];
	int xpos = (int)(short)LOWORD(lParam);
	int ypos = (int)(short)HIWORD(lParam);
	wsprintf(szBuf, _T("[11syy]xpos:%d ypos:%d"), xpos, ypos);
	PostMessage(hwnd, WM_QUIT, 0, NULL);
	return TRUE;
}
LRESULT OnLButtonnDown(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	int xpos = LOWORD(lParam);
	int ypos = HIWORD(lParam);
	TCHAR szBuf[MAXBYTE];
	wsprintf(szBuf, _T("[11syy]xpos:%d ypos:%d\n"), xpos, ypos);
	OutputDebugString(szBuf);
	/*MessageBox(NULL, szBuf, _T("asm"), MB_OK);*/
	return FALSE;
}
LRESULT OnLButtonnup(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	int xpos = LOWORD(lParam);
	int ypos = HIWORD(lParam);
	TCHAR szBuf[MAXBYTE];
	wsprintf(szBuf, _T("[11syy]xpos:%d ypos:%d\n"), xpos, ypos);
	OutputDebugString(szBuf);
	//MessageBox(NULL, szBuf, _T("asm"), MB_OK);
	return FALSE;
}

//LRESULT onMouse(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
//{
//	LRESULT lResult = FALSE;
//	switch (uMsg)
//	{
//	case WM_LBUTTONDOWN:
//	 lResult= OnLButtonnDown(hwnd, uMsg, wParam, lParam);
//		break;
//	}
//	return FALSE;
//}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
	LRESULT lResult = FALSE;
	switch (uMsg)
	{
	case WM_CREATE:
		lResult= OnCreate(hwnd, uMsg, wParam, lParam);
		break;
	case WM_CLOSE:
		lResult = OnClese(hwnd, uMsg, wParam, lParam);
		break;
	case WM_DESTROY:
		lResult = OnDestroy(hwnd, uMsg, wParam, lParam);
		break;

	case WM_LBUTTONDOWN:
		lResult = OnLButtonnDown(hwnd, uMsg, wParam, lParam);
		break;
	case WM_LBUTTONUP:
		lResult = OnLButtonnup(hwnd, uMsg, wParam, lParam);
		break;
	}

	if (!lResult) {
		return DefWindowProc(hwnd, uMsg, wParam, lParam);//默认窗口过程处理
	}
	return lResult;
}

//图形界面,窗口


int WINAPI _tWinMain(HINSTANCE hInstance,//应用程序示例句柄
	HINSTANCE hPrevInstance,//保留
	TCHAR* lpCmdline, //命令行参数,LPSTR可能会变成Unicode
	int nCmdShow) {//窗口显示方式
	//比如我们启动这个窗口,最大化,最小化
	/*MessageBoxA(NULL, "hell word ", "asm", MB_YESNO);*/\
		//int res = MessageBoxW(NULL, L"hell unicode", L"asm", MB_YESNO);
		//
		//if (res == 0) {
		///*	MessageBoxW(NULL, L"错误", L"asm", MB_OK);*/
		//	showerrormassage();
		//	return 0;
		//}
		程序》实例化》进程》多个窗口
	//1.注册窗口
	TCHAR  szWndclassName[] = { _T("chongmousyy") };
	
	WNDCLASSEX wc = { 0 };
	wc.cbSize = sizeof(WNDCLASSEX);
	wc.style = CS_VREDRAW|CS_HREDRAW|CS_DBLCLKS;//窗口类型
	wc.lpfnWndProc = WindowProc;
	wc.hInstance = hInstance;
	wc.hIcon = LoadIcon(NULL,IDC_HAND);//图标
	wc.hCursor = LoadCursor(NULL,IDC_ARROW );//光标FDXX
	wc.hbrBackground = CreateSolidBrush(RGB(255,255,255));//窗口背景颜色刷子
	wc.lpszClassName = szWndclassName;//窗口类名,窗口名字不可以为空
	wc.lpszMenuName = NULL;//窗口菜单
	if (RegisterClassEx(&wc) == 0)
	{
		showerrormassage();
		return 0;
	};
	//2.创建窗口
	TCHAR szWndName[] = { _T("翀某人") };
	HWND hwnd = CreateWindowEx(0, 
		szWndclassName, 
		szWndName,
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		NULL,
		NULL,
		hInstance,
		NULL
	);
	if (hwnd == 0)
	{
		showerrormassage();
		return 0;
	}

	//3.显示跟新窗口
	ShowWindow(hwnd, SW_SHOWNORMAL);

	//4.消息循环(消息队列)
	BOOL bRET;
	MSG msg;
	while ((bRET=GetMessage(&msg, NULL, 0, 0))!=0) {
		if (bRET==-1) {
			break;
		}
		else
		{ 
			//转发消息
			TranslateMessage(&msg);//转换键盘消息为字符消息
			DispatchMessage(&msg);//派发消息
		}
	}
	//5.消息处理
	

	//资源
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Back~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值