SDK3(note上)

news2024/9/27 12:17:24

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

#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.coloradmin.cn/o/2165477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是 SIP 及 IMS 中的 Forking

目录 1. SIP 网络中 Forking 的定义 2. SIP Forking 的分类 2.1 Oaraller Forking 的分类 2.2 Sequential Forking 的分类 博主wx:yuanlai45_csdn 博主qq:2777137742 后期会创建粉丝群,为同学们提供分享交流平台以及提供官方发送的福利奖品~ 1. SIP 网络中 Forking 的定…

828华为云征文|华为云Flexus云服务器X实例部署immich相片管理系统

828华为云征文&#xff5c;华为云Flexus云服务器X实例部署immich相片管理系统 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、immich介绍2.1 immich简介2.2 immich注意事项2.3 主要特点2.4 使用…

AI预测体彩排3采取888=3策略+和值012路或胆码测试9月25日升级新模型预测第91弹

经过90多期的测试&#xff0c;当然有很多彩友也一直在观察我每天发的预测结果&#xff0c;得到了一个非常有价值的信息&#xff0c;那就是9码定位的命中率非常高&#xff0c;已到达90%的命中率&#xff0c;这给喜欢打私菜的朋友提供了极高价值的预测结果~当然了&#xff0c;大部…

【Python】利用Python+thinker实现旋转转盘

需求/目的&#xff1a;用Pythonthinker实现转盘&#xff0c;并且能够随机旋转任意角度。 转盘形式&#xff1a; 主界面&#xff1a; from tkinter import *winTk() win.title("大转盘") win.geometry("300x400")win.mainloop() 转盘绘制&#xff1a; 这…

YOLO系列训练生成的exp进行处理找出mAP值

YOLOv8或者YOLOv10训练生成的exp文件进行遍历,找出results.csv文件中metrics/mAP50(B)、metrics/mAP50-95(B)值和args.yaml中的mode文件,将他们保存到一个excel文件中。 YOLO训练train.py代码如下: 模型训练好后生成exp文件如下: 生成excel文件完整代码如下: import o…

ad14转cadence17.4

一、原理图转换 将原理图文件拖入到新建工程中

专业之选!行业专家力荐的十大文件摆渡系统,你选对了吗?

在信息化时代&#xff0c;数据的流通与共享已经成为企业运营中不可或缺的一部分。为了应对日益增长的数据传输需求&#xff0c;各大厂商纷纷推出了各类文件摆渡系统&#xff0c;以确保数据传输的安全性、高效性和便捷性。以下是行业专家力荐的十大文件摆渡系统&#xff0c;供您…

朗国电子(嵌入式)

1.[问答题]已知单片机内置10位精度的ADC&#xff0c;单片机工作电压1.8V&#xff0c;ADC基准电压1.8V&#xff0c;请计算ADC采样的电压最小分辨率是多少?请写出计算过程和结果;如果单片机ADC输入口电压为0.9V&#xff0c;则采样得到的值是多少?请写出计算过程和结果。 2.[问答…

2024 年最新 Protobuf 结构化数据序列化和反序列化详细教程

Protobuf 序列化概述 Protobuf&#xff08;Protocol Buffers&#xff09;是由Google开发的一种语言中立、平台中立、可扩展的序列化结构数据的方法。它用于在不同系统之间高效地交换数据。Protobuf使用定义文件&#xff08;.proto&#xff09;来描述数据结构&#xff0c;并通过…

excel导出图片---HSSFWorkbook--SXSSFWorkbook

1 概述 平时在工作中&#xff0c;excel导出图片经常会用到&#xff0c;但奈何HSSFWorkbook导出数据数量有限制问题&#xff0c;所以企业里大多都用SXSSFWorkbook格式&#xff0c;很少用HSSFWorkbook。所以今天以这两种格式分别记录下&#xff0c;图片的导出过程。 2 HSSFWork…

【刷题3】找到字符串中所有字母异位词、串联所有单词的子串

目录 一、找到字符串中所有字母异位词二、串联所有单词的子串 一、找到字符串中所有字母异位词 题目&#xff1a; 思路&#xff1a; 用一个变量count来统计有效字符的个数。哈希表2统计字符串p的每个字符出现的个数&#xff0c;然后遍历字符串s&#xff0c;先进窗口&#xf…

怎么测试射频芯片质量的好坏?

无论是手机通信&#xff0c;还是卫星导航&#xff0c;射频芯片都是其核心组件之一。本文将探讨如何准确判断射频芯片的质量&#xff0c;以确保技术设备的稳定运行。 1. 外观检查 检查射频芯片是否有破损、引脚断裂、缺陷等。 2. 电气参数测试 对射频芯片的输入输出阻抗、功耗、…

DBAPI如何实现插入数据前先判断数据是否存在,存在就更新,不存在就插入

DBAPI实现数据不存在即插入、存在即更新 场景 往数据库插入数据的时候&#xff0c;需要先判断一下记录是否在数据库已经存在&#xff0c;如果已经存在就更新记录&#xff0c;如果不存在&#xff0c;才插入数据。 实现方案 采用存储过程实现&#xff0c;以mysql为例子 创建存储过…

【运维系列资料】运维系统建设方案(PPT源文件)

1.智慧运维系统建设背景 2.智慧运维系统建设目标 3.智慧运维系统建设内容 4.智慧运维系统建设技术 5.智慧运维系统建设流程 6.智慧运维系统建设收益 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品…

小阿轩yx-Ansible部署与应用基础

小阿轩yx-Ansible部署与应用基础 前言 由于互联网的快速发展导致产品更新换代速度逐步增长&#xff0c;运维人员每天都要进行大量的维护操作&#xff0c;按照传统方式进行维护使得工作效率低下。这时部署自动化运维就可以尽可能安全、高效的完成这些工作。 Ansible 概述 什…

编程遇到问题了?一个命令让 AI 解决你的困惑!

作为一名程序员&#xff0c;我们在开发过程中常常会遇到各种各样的问题&#xff0c;尤其是在开发新功能或使用新技术时。在这些时候&#xff0c;我们往往会寻求帮助并寻找最佳的解决方案。 去年的时候大家还是在使用百度或者谷歌来搜寻问题的答案&#xff0c;但是今年大家肯定…

MICS:PythonJail沙箱逃逸(持续更新中)

沙箱是一种防护机制&#xff0c;是用来运行不受信任的代码&#xff0c;通常是用户上传的代码&#xff0c;但这些代码可能是恶意代码&#xff0c;而沙箱就是防止恶意代码运行的机制。所谓沙箱逃逸&#xff0c;就是利用相关操作绕过沙箱防护&#xff0c;从而获得目标主机的文件信…

JVM(HotSpot):堆空间(Heap)以及常用相关工具介绍

文章目录 内存结构图二、堆的定义三、堆内存溢出四、堆内存排查工具 内存结构图 二、堆的定义 1、通过new关键字创建的对象&#xff0c;都会放到堆空间中。 2、它是线程共享的&#xff0c;堆中的对象都要考虑线程安全问题。 那有同学肯定会问&#xff0c;方法内通过new创建的…

JavaScript --数字Number的常用方法

toFixed(保留几位小数) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthde…

python编程开发“人机猜拳”游戏

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…