C++ Win32编程:消息机制与应用程序类型详解
本文主要介绍了Windows编程中的核心概念——消息(Message)在Win32环境中的作用以及如何在C/C++编程中处理和响应消息。在Windows应用程序中,消息是操作系统与窗口之间通信的关键机制,用于传递事件、状态更新或用户交互的信息。 消息通常由系统通过窗口句柄发送给特定的窗口,包含消息ID(标识特定类型的事件)、两个参数(可能提供额外信息)以及消息产生的时间和鼠标位置等元数据。对于窗口程序来说,消息处理是其用户界面交互的核心部分,如窗口消息循环(message loop),它不断地接收并处理消息,直到窗口关闭。 Windows应用程序主要有三种类型:控制台程序(Console)、窗口程序(拥有独立窗口)和库程序(分为静态库和动态库)。控制台程序通过`main`作为入口函数,运行在DOS窗口中;窗口程序则使用`WinMain`,并且以EXE文件形式存在,有自己的独立窗口;动态库(DLL)程序不直接执行,通常被其他程序调用,入口函数是`DllMain`,以DLL文件形式存储。 在Windows开发环境中,Microsoft Visual Studio C++(简称VC)系列工具如编译器CL.EXE、链接器LINK.EXE和资源编译器RC.EXE扮演了关键角色。开发人员需要熟悉这些工具,以及Windows提供的库文件(如kernel32.dll、user32.dll、gdi32.dll)和头文件(如windows.h、windef.h、winbase.h、wingdi.h、winuser.h和winnt.h)来实现功能和处理各种系统调用。 举例来说,`WinMain`函数是窗口程序的典型入口点,接收三个参数:当前程序的实例句柄(hInstance)、前一个实例句柄(hPrevInstance)以及命令行参数(LPSTR)。这个函数的主要任务就是初始化窗口、设置消息循环,并在此过程中处理接收到的各种系统消息。 了解和掌握消息机制对编写高效、稳定的Windows应用程序至关重要,无论是控制台程序还是图形用户界面程序,都需要利用消息机制来响应用户的操作和处理系统事件。因此,深入学习和实践Windows消息机制是C/C++ Win32编程的基础之一。
帮我增加进度条import io import re import tkinter import requests import threading from pydub import AudioSegment root = tkinter.Tk() root.title('在线视频解析') root.geometry('500x590+550+350') headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0'} ac = tkinter.Listbox(root, width=50, height=20, font=('黑体', 12)) ac.grid(row=2, columnspan=10, sticky="n" + "s" + "w" + "e") def sousuo(): i = b1.get() ac.delete(0, 'end') def extract_music_info(content): p = '|' content = re.sub(p, '', content, flags=re.S) pattern = re.compile('subject.*?href="(.*?)">(.*?)
', flags=re.S) return pattern.findall(content) def search_music(): url = 'https://www.hifini.com/search-' + i + '-1.htm' response = requests.get(url=url, headers=headers) return response.text def update_listbox(music_list): for music in music_list: pppp = music[1] + ":" + music[0] ac.insert('end', pppp) content = search_music() music_list = extract_music_info(content) update_listbox(music_list) def xiazzi(): def download_music(): ppp = ac.get(ac.curselection()) pp = re.search('thread.*?htm', ppp) v = pp.group() url1 = 'https://www.hifini.com/' + v response = requests.get(url=url1, headers=headers) ppp = response.text l2 = re.search('<script>.*?title:..(.*?).,.*?author:.(.*?).,.*?url:..(.*?).,', ppp, flags=re.S) p = 'https://www.hifini.com/' + l2.group(3) response = requests.get(url=p, headers=headers) l3 = response.content music_name = '{}-{}.mp3'.format(l2.group(2), l2.group(1)) if l3.startswith(b'\x00\x00\x00\x20\x66\x74\x79\x70'): audio = AudioSegment.from_file(io.BytesIO(l3), format='m4a') audio.export(music_name, format='mp3') else: with open(music_name, 'wb') as f: f.write(l3) print(music_name) threading.Thread(target=download_music).start() a1 = tkinter.Label(root, text='音乐下载器', anchor="center", font=('黑体', 24)) a1.grid(row=0, columnspan=10, sticky="n" + "s" + "w" + "e") b1 = tkinter.Entry(root, width=35, font=('黑体', 16), ) b1.grid(row=1, column=3, padx=15) search_button = tkinter.Button(root, text='搜索', command=sousuo) search_button.grid(row=1, column=4) download_button = tkinter.Button(root, text='下载', command=xiazzi) download_button.grid(row=3, column=4) root.mainloop()- 粉丝: 18
- 资源: 2万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 解决Eclipse配置与导入Java工程常见问题
- 真空发生器:工作原理与抽吸性能分析
- 爱立信RBS6201开站流程详解
- 电脑开机声音解析:故障诊断指南
- JAVA实现贪吃蛇游戏
- 模糊神经网络实现与自学习能力探索
- PID型模糊神经网络控制器设计与学习算法
- 模糊神经网络在自适应PID控制器中的应用
- C++实现的学生成绩管理系统设计
- 802.1D STP 实现与优化:二层交换机中的生成树协议
- 解决Windows无法完成SD卡格式化的九种方法
- 软件测试方法:Beta与Alpha测试详解
- 软件测试周期详解:从需求分析到维护测试
- CMMI模型详解:软件企业能力提升的关键
- 移动Web开发框架选择:jQueryMobile、jQTouch、SenchaTouch对比
- Java程序设计试题与复习指南