SKD4(note上)
微软提供了图形的界面API,叫GDI
如果你想画某个窗口,你必须拿到此窗口的HDC
#include <windows.h>
#include<tchar.h>
#include <stdio.h>
#include <strsafe.h>
#include <string>/*鼠标消息
* 键盘消息
* Onkeydown
* Onkeyup
* //键盘扫描码
* /lParam>>16&0ff
快捷键消息
菜单消息
控件消息
自定义消息
窗口消息
客户区域的概念(Client Aera)
非客户区*/
using namespace std;
string g_Text;
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 Onchar(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{g_Text+=(char)wParam;TCHAR szBuf[MAXBYTE];if ((char)wParam == '\r'){g_Text += '\n';}wsprintf(szBuf, _T("Onchar %s\n"), g_Text.data());OutputDebugString(szBuf);//获取窗口HDC,非客户区GetWindowDCHDC hdc = GetDC(hwnd);//TextOut(hdc, 0, 0, g_Text.data(), g_Text.length());//这个API不支持回车//释放DCRECT rc;GetClientRect(hwnd, &rc);DrawText(hdc, g_Text.data(), g_Text.length(), &rc, DT_LEFT);//这个API支持换行不过有rectReleaseDC(hwnd, hdc);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_CHAR:lResult= Onchar(hwnd, uMsg, wParam, lParam);}if (!lResult) {return DefWindowProc(hwnd, uMsg, wParam, lParam);//默认窗口过程处理}return lResult;
}//图形界面,窗口int WINAPI _tWinMain(HINSTANCE hInstance,//应用程序示例句柄HINSTANCE hPrevInstance,//保留TCHAR* lpCmdline, //命令行参数,LPSTR可能会变成Unicodeint 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);//光标FDXXwc.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;
}


相关文章:
SKD4(note上)
微软提供了图形的界面API,叫GDI 如果你想画某个窗口,你必须拿到此窗口的HDC #include <windows.h> #include<tchar.h> #include <stdio.h> #include <strsafe.h> #include <string>/*鼠标消息 * 键盘消息 * Onkeydown * …...
rabbitmq----数据管理模块
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 交换机数据管理管理的字段持久化管理类内存管理类申明交换机删除交换机获取指定交换机 队列数据管理管理的字段持久化管理类内存管理类申明/删除/获取指定队列获取所…...
【人工智能深度学习应用】妙笔API最佳实践
AI妙笔是一款以文本创作为主、多模态为辅的生成式创作大模型产品,专门为传媒、政务等特定的行业和组织提供行业化的内容创作辅助。它具备深度的行业知识,能够生成高质量的专业内容,能覆盖各行业常见的文体类型,写作文体丰富多样&a…...
SOMEIP_ETS_150: SD_Send_triggerEventUINT8Multicast_Eventgroup_6
测试目的: 验证DUT在Tester订阅事件组后,能够响应Tester触发的triggerEventUINT8Multicast方法,并将TestEventUINT8Multicast事件发送到订阅请求中端点选项指定的IP地址和端口。 描述 本测试用例旨在确保DUT能够正确处理事件组的订阅请求&…...
【EXCEL数据处理】000009 案列 EXCEL单元格数字格式。文本型数字格式和常规型数字格式的区别
前言:哈喽,大家好,今天给大家分享一篇文章!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【EXCEL数据处理】000009 案列 EXCEL单元格数字格式。文本型数字格式和…...
Vxe UI vue vxe-table vxe-text-ellipsis 如何实现单元格多行文本超出、多行文本溢出省略
Vxe UI vue vxe-table 如何实现单元格多行文本超出、多行文本溢出省略 代码 配合 vxe-text-ellipsis 组件实现多行文本溢出省略 <template><div><vxe-grid v-bind"gridOptions"><template #defaultAddress"{ row }"><vxe-te…...
FFmpeg源码:avio_feof函数分析
AVIOContext结构体和其相关的函数分析: FFmpeg源码:avio_r8、avio_rl16、avio_rl24、avio_rl32、avio_rl64函数分析 FFmpeg源码:read_packet_wrapper、fill_buffer函数分析 FFmpeg源码:avio_read函数分析 FFmpeg源码ÿ…...
各省-城镇化率(2001-2022年)
数据收集各省-城镇化率(2001-2022年).zip资源-CSDN文库https://download.csdn.net/download/2401_84585615/89465885 相关指标: 包括省份、年份、年末总人口数(万人)、年末城镇人口数(万人)、城镇化率等。 数据集构建: 数据集通…...
飞创龙门双驱XYZ直线模组高精度应用实例
飞创龙门双驱XYZ直线模组集超精密定位、高动态响应和灵活配置于一体,适用于电子制造行业(点胶、组装、检测)、半导体圆晶加工、芯片封装、激光切割、激光焊接、数控机床、精密检测及科研实验等,满足高精度、高动态的三维定位需求&…...
Prompt 初级版:构建高效对话的基础指南
Prompt 初级版:构建高效对话的基础指南 文章目录 Prompt 初级版:构建高效对话的基础指南一 “标准”提示二 角色提示三 多范例提示四 组合提示五 规范化提示 本文介绍了提示词的基础概念与不同类型,帮助用户更好地理解如何在对话中构建有效的…...
餐饮重点企业在AI领域的布局,看方大的AI实践
大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 AI已经被应用在餐饮餐厨行业的哪些方面&am…...
Axure PR 9 开关切换 设计交互
大家好,我是大明同学。 这期内容,我们来探讨Axure开关按钮设计与交互技巧。 创建切换开关所需的元件 1.打开一个新的 RP 文件并在画布上打开 Page 1。 2.将“圆形”元件拖到画布上,在样式窗格中将高度和宽度设置为35,线段宽度…...
ruoyi-python 若依python版本部署及新增模块
ruoyi spring版本支持一键导出前后端代码,且b站上有很多教程,但是发现python版本的教程并不多,于是自己尝试创建一个简易的CRUD模块 1.各版本bug 主要尝试了1.1.2版本和vue2的版本,链接如下: v1.1.2 vue2 两个版本…...
【理论】负载均衡
目录 1. 定义2. 主要作用3. 实现方法4. 实现原理 1. 定义 负载均衡(Load Balancing)将网络流量、请求等输入分发到后端服务器,为后端服务器提供负载均衡,实现高可用和容错。 2. 主要作用 1. 高并发 通过将请求均匀分配到多个服务…...
流行前端框架Vue.js详细学习要点
Vue.js是一款流行的JavaScript前端框架,用于构建用户界面,特别是在构建交互式Web应用程序时表现出色。以下是Vue.js详细学习的一些要点: 1. Vue.js基础 定义与特点:Vue.js是一款渐进式JavaScript框架,提供响应式数据…...
Java.数据结构.TreeMap
一、什么是TreeMap TreeMap是Java集合框架中的一部分,并且基于红黑树数据结构。这说明TreeMap能够高效地执行键值对的存储、检索、排序等操作。 二、TreeMap的特点 有序性:TreeMap会根据键的自然顺序进行排序,当然,你也可以通过…...
什么是托管安全信息和事件管理 SIEM?
什么是 SIEM? 安全信息和事件管理 ( SIEM ) 解决方案最初是一种集中式日志聚合解决方案。SIEM 解决方案会从整个组织网络中的系统收集日志数据,使组织能够从单一集中位置监控其网络。 随着时间的推移,SIEM解决方案已发展成为一个完整的威胁…...
vscode安装及c++配置编译
1、VScode下载 VS Code官网下载地址:Visual Studio Code - Code Editing. Redefined。 2、安装中文插件 搜索chinese,点击install下载安装中文插件。 3、VS Code配置C/C开发环境 3.1、MinGW-w64下载 VS Code是一个高级的编辑器,只能用来写代…...
JavaScript使用渐变来美化对象!
我们的目标是渐变!渐变! 首先了解,渐变分为线性渐变和径向渐变,线性渐变可以是从左上角到右下角的渐变,径向渐变是从中心向外的渐变。 JavaScript中实现渐变可以使用addColorStop的方法,例如创建一个线性渐…...
Linux之实战命令24:od应用实例(五十八)
简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
