当前位置: 首页 > article >正文

SDK3(note上)

搞了举个窗口设置还有鼠标处理的信息
注释写在代码中了

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

/*鼠标消息
* 键盘消息
快捷键消息
菜单消息
控件消息
自定义消息
窗口消息
客户区域的概念(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);
}
LRESULT OnCreate(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
	//初始化
    ::MessageBox(NULL,_T("onCrate"), _T("asm"), MB_OK);
	return TRUE;
}//消息处理

LRESULT OnClese(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
	::MessageBox(NULL, _T("onClose"), _T("asm"), MB_OK);
	DestroyWindow(hwnd);
	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);
	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("xpos:%d ypos:%d"), xpos, ypos);
	MessageBox(NULL, _T("onDestory"), _T("asm"), MB_OK);
	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("xpos:%d ypos:%d"), xpos, ypos);
	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:

	}

	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;//窗口类型
	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
		{
			DispatchMessage(&msg);//派发消息
		}
	}
	//5.消息处理
	

	//资源
	return 0;
}

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

/*鼠标消息
* 键盘消息
快捷键消息
菜单消息
控件消息
自定义消息
窗口消息
客户区域的概念(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);
}
LRESULT OnCreate(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
	//初始化
    ::MessageBox(NULL,_T("onCrate"), _T("asm"), MB_OK);
	return TRUE;
}//消息处理

LRESULT OnClese(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
	::MessageBox(NULL, _T("onClose"), _T("asm"), MB_OK);
	DestroyWindow(hwnd);
	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);
	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("xpos:%d ypos:%d"), xpos, ypos);
	MessageBox(NULL, _T("onDestory"), _T("asm"), MB_OK);
	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("xpos:%d ypos:%d"), xpos, ypos);
	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:

	}

	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;//窗口类型
	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
		{
			DispatchMessage(&msg);//派发消息
		}
	}
	//5.消息处理
	

	//资源
	return 0;
}


在这里插入图片描述


http://www.kler.cn/a/319580.html

相关文章:

  • MFC工控项目实例二十九主对话框调用子对话框设定参数值
  • 【stable diffusion部署】超强AI绘画Stable Diffusion,本地部署使用教程,完全免费使用
  • 94个属于一区且接受医工交叉领域投稿的期刊汇总|个人观点·24-11-13
  • vue中如何关闭eslint检测?
  • 万字长文解读深度学习——ViT、ViLT、DiT
  • 天才的懈怠 : 平衡二叉树
  • NLP 文本分类任务核心梳理
  • Selenium点击元素的方法
  • 【深入学习Redis丨第六篇】Redis哨兵模式与操作详解
  • 电脑自带dll修复在哪里,dll丢失的6种解决方法总结
  • 免费与付费代理IP工具的优缺点分析
  • 遗忘的数学(拉格朗日乘子法、牛顿法)
  • (16)docker自动镜像打包脚本
  • 【Power Query】追加查询(动态列,动态路径)
  • 微软宣布弃用WSUS,企业用户尽早准备替换方案
  • [RabbitMQ] RabbitMQ介绍,安装与快速上手
  • 虚拟机开启网络代理设置,利用主机代理访问国外资源
  • Vue3:toRaw与markRaw
  • LeetCode 210. 课程表 II
  • yum 集中式安装 LNMP
  • 当电子设计竞赛照进生活!
  • 深入探秘 WorkManager:Android 异步任务管理的强大工具
  • 探索《藏汉翻译通》小程序:跨平台的藏文翻译利器
  • PostgreSQL - pgvector 插件构建向量数据库并进行相似度查询
  • django应用JWT(JSON Web Token)实战
  • C语言习题~day35