-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwin.html
More file actions
406 lines (265 loc) · 14.8 KB
/
win.html
File metadata and controls
406 lines (265 loc) · 14.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
<!DOCTYPE html>
<html lang="zh-Hans">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 5.4.0">
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
<link rel="mask-icon" href="/images/logo.svg" color="#222">
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/lib/font-awesome/css/all.min.css">
<script id="hexo-configurations">
var NexT = window.NexT || {};
var CONFIG = {"hostname":"example.com","root":"/","scheme":"Pisces","version":"7.8.0","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":false,"show_result":false,"style":null},"back2top":{"enable":true,"sidebar":false,"scrollpercent":false},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":false,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}}};
</script>
<meta name="description" content="应用程序分类控制台程序 Console DOS程序,本身没窗口,通过Windows DOS窗口执行 main为其入口函数 窗口程序 有自己的窗口,可与用户交换 它的入口函数是WinMain 库程序 它是存放代码和数据的程序,执行文件可从中取出代码放到可执行文件 它又分为两类,静态库程序和动态库程序">
<meta property="og:type" content="website">
<meta property="og:title" content="win32编程(一)">
<meta property="og:url" content="http://example.com/win.html">
<meta property="og:site_name" content="Hexo">
<meta property="og:description" content="应用程序分类控制台程序 Console DOS程序,本身没窗口,通过Windows DOS窗口执行 main为其入口函数 窗口程序 有自己的窗口,可与用户交换 它的入口函数是WinMain 库程序 它是存放代码和数据的程序,执行文件可从中取出代码放到可执行文件 它又分为两类,静态库程序和动态库程序">
<meta property="og:locale">
<meta property="og:image" content="http://example.com/images/1.jpg">
<meta property="og:image" content="http://example.com/images/2.jpg">
<meta property="og:image" content="http://example.com/images/3.jpg">
<meta property="og:image" content="http://example.com/images/4.jpg">
<meta property="article:published_time" content="2021-12-13T08:49:59.887Z">
<meta property="article:modified_time" content="2021-12-12T16:53:44.250Z">
<meta property="article:author" content="LSC">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="http://example.com/images/1.jpg">
<link rel="canonical" href="http://example.com/win">
<script id="page-configurations">
// https://hexo.io/docs/variables.html
CONFIG.page = {
sidebar: "",
isHome : false,
isPost : false,
lang : 'zh-Hans'
};
</script>
<title>win32编程(一) | Hexo
</title>
<noscript>
<style>
.use-motion .brand,
.use-motion .menu-item,
.sidebar-inner,
.use-motion .post-block,
.use-motion .pagination,
.use-motion .comments,
.use-motion .post-header,
.use-motion .post-body,
.use-motion .collection-header { opacity: initial; }
.use-motion .site-title,
.use-motion .site-subtitle {
opacity: initial;
top: initial;
}
.use-motion .logo-line-before i { left: initial; }
.use-motion .logo-line-after i { right: initial; }
</style>
</noscript>
</head>
<body itemscope itemtype="http://schema.org/WebPage">
<div class="container use-motion">
<div class="headband"></div>
<header class="header" itemscope itemtype="http://schema.org/WPHeader">
<div class="header-inner"><div class="site-brand-container">
<div class="site-nav-toggle">
<div class="toggle" aria-label="Toggle navigation bar">
<span class="toggle-line toggle-line-first"></span>
<span class="toggle-line toggle-line-middle"></span>
<span class="toggle-line toggle-line-last"></span>
</div>
</div>
<div class="site-meta">
<a href="/" class="brand" rel="start">
<span class="logo-line-before"><i></i></span>
<h1 class="site-title">Hexo</h1>
<span class="logo-line-after"><i></i></span>
</a>
</div>
<div class="site-nav-right">
<div class="toggle popup-trigger">
</div>
</div>
</div>
<nav class="site-nav">
<ul id="menu" class="main-menu menu">
<li class="menu-item menu-item-home">
<a href="/" rel="section"><i class="fa fa-home fa-fw"></i>Home</a>
</li>
<li class="menu-item menu-item-about">
<a href="/about/" rel="section"><i class="fa fa-user fa-fw"></i>About</a>
</li>
<li class="menu-item menu-item-tags">
<a href="/tags/" rel="section"><i class="fa fa-tags fa-fw"></i>Tags</a>
</li>
<li class="menu-item menu-item-categories">
<a href="/categories/" rel="section"><i class="fa fa-th fa-fw"></i>Categories</a>
</li>
<li class="menu-item menu-item-archives">
<a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>Archives</a>
</li>
</ul>
</nav>
</div>
</header>
<div class="back-to-top">
<i class="fa fa-arrow-up"></i>
<span>0%</span>
</div>
<main class="main">
<div class="main-inner">
<div class="content-wrap">
<div class="content page posts-expand">
<div class="post-block" lang="zh-Hans">
<header class="post-header">
<h1 class="post-title" itemprop="name headline">win32编程(一)
</h1>
<div class="post-meta">
</div>
</header>
<div class="post-body">
<h2 id="应用程序分类"><a href="#应用程序分类" class="headerlink" title="应用程序分类"></a>应用程序分类</h2><h3 id="控制台程序-Console"><a href="#控制台程序-Console" class="headerlink" title="控制台程序 Console"></a>控制台程序 Console</h3><p> DOS程序,本身没窗口,通过Windows DOS窗口执行</p>
<p> main为其入口函数</p>
<h3 id="窗口程序"><a href="#窗口程序" class="headerlink" title="窗口程序"></a>窗口程序</h3><p> 有自己的窗口,可与用户交换</p>
<p> 它的入口函数是WinMain</p>
<h3 id="库程序"><a href="#库程序" class="headerlink" title="库程序"></a>库程序</h3><p> 它是存放代码和数据的程序,执行文件可从中取出代码放到可执行文件</p>
<p> 它又分为两类,<u>静态库程序和动态库程序</u></p>
<p> 对于静态库文件,它的文件后缀名是lib(linux为.a),它没有入口函数,无法执行,它的代码在编译连接时会放到可执行文件中</p>
<p> 对于动态库文件,他的后缀名是dll(linux为.so),它的入口函数是dllMain,它不能单独运行,需要依附于其他程序,在连接是只会记录它的地址</p>
<p> <img src="images/1.jpg"> </p>
<p> <img src="images/2.jpg"> </p>
<p>再上图我们可以看见windows.h包含了所有windows头文件,所以我们写程序只需要写这一个头文件就可以了。</p>
<p>接下来我们看看相关函数</p>
<p> <img src="images/3.jpg"> </p>
<p>前面是它的数据类型</p>
<p>这里说一下句柄, 句柄(Handle)是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量。(它是用来找到内存的东西,但不是指针)。所以上面说的可以找到当前程序的实例句柄也就是说它能找到当前进程的内存。</p>
<p>MessageBox我们碰到很多,就是弹提示框的函数。前三个参数都能理解,第四个参数打个比方,你在关闭记事本的时候,他会给你提示,是否保存,取消就是关于它的设置。这个函数的返回要用一个值去保存,然后我们才能去发生这个消息,然后进行对消息处理。</p>
<h2 id="窗口创建过程"><a href="#窗口创建过程" class="headerlink" title="窗口创建过程"></a>窗口创建过程</h2><p>有七个步骤:</p>
<p>1.定义WinMain函数</p>
<p>2.定义窗口处理函数</p>
<p>3.注册窗口类</p>
<p>4.创建窗口</p>
<p>5.显示窗口</p>
<p>6.消息循环</p>
<p>7.消息处理</p>
<p>在讲这些步骤之前我们先看看字符编码:</p>
<p>编码背景:</p>
<p>ASC 7位 128个</p>
<p>ASCII 8位 256个 新增了128个</p>
<p>DBCS 单双字节混合编码</p>
<p>UNICODE 我们常说的就是UTF-16(linux是UTF-8)</p>
<p>DBCS如果出现字母和汉字混合,就很难拿到自己想要的结果,而UTF-16用两个字节编码,字母采用补0法。不存在解析出错问题。</p>
<h2 id="宽字节字符"><a href="#宽字节字符" class="headerlink" title="宽字节字符"></a>宽字节字符</h2><p>wchar_t 实际类型是unsigned short。当用他时,字符串前面加“L”,需要用支持wchar_t函数操作宽字符,就像printf要用wprintf。</p>
<p>wprintf对UNICODE字符打印不完整。windows下一般使用WriteConsole API打印UNICODE。</p>
<p> <img src="images/4.jpg"> </p>
<p>WriteConsole的用法如上,第一个参数句柄我们可以通过GetStdHandle获取</p>
<p>下一节具体讲窗口创建的步骤</p>
</div>
</div>
</div>
<script>
window.addEventListener('tabs:register', () => {
let { activeClass } = CONFIG.comments;
if (CONFIG.comments.storage) {
activeClass = localStorage.getItem('comments_active') || activeClass;
}
if (activeClass) {
let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
if (activeTab) {
activeTab.click();
}
}
});
if (CONFIG.comments.storage) {
window.addEventListener('tabs:click', event => {
if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
let commentClass = event.target.classList[1];
localStorage.setItem('comments_active', commentClass);
});
}
</script>
</div>
<div class="toggle sidebar-toggle">
<span class="toggle-line toggle-line-first"></span>
<span class="toggle-line toggle-line-middle"></span>
<span class="toggle-line toggle-line-last"></span>
</div>
<aside class="sidebar">
<div class="sidebar-inner">
<ul class="sidebar-nav motion-element">
<li class="sidebar-nav-toc">
Table of Contents
</li>
<li class="sidebar-nav-overview">
Overview
</li>
</ul>
<!--noindex-->
<div class="post-toc-wrap sidebar-panel">
<div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%88%86%E7%B1%BB"><span class="nav-number">1.</span> <span class="nav-text">应用程序分类</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#%E6%8E%A7%E5%88%B6%E5%8F%B0%E7%A8%8B%E5%BA%8F-Console"><span class="nav-number">1.1.</span> <span class="nav-text">控制台程序 Console</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E7%AA%97%E5%8F%A3%E7%A8%8B%E5%BA%8F"><span class="nav-number">1.2.</span> <span class="nav-text">窗口程序</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E5%BA%93%E7%A8%8B%E5%BA%8F"><span class="nav-number">1.3.</span> <span class="nav-text">库程序</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E7%AA%97%E5%8F%A3%E5%88%9B%E5%BB%BA%E8%BF%87%E7%A8%8B"><span class="nav-number">2.</span> <span class="nav-text">窗口创建过程</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E5%AE%BD%E5%AD%97%E8%8A%82%E5%AD%97%E7%AC%A6"><span class="nav-number">3.</span> <span class="nav-text">宽字节字符</span></a></li></ol></div>
</div>
<!--/noindex-->
<div class="site-overview-wrap sidebar-panel">
<div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
<img class="site-author-image" itemprop="image" alt="LSC"
src="/images/5.jpg">
<p class="site-author-name" itemprop="name">LSC</p>
<div class="site-description" itemprop="description">个人技术分享</div>
</div>
<div class="site-state-wrap motion-element">
<nav class="site-state">
<div class="site-state-item site-state-posts">
<a href="/archives/">
<span class="site-state-item-count">20</span>
<span class="site-state-item-name">posts</span>
</a>
</div>
<div class="site-state-item site-state-categories">
<a href="/categories/">
<span class="site-state-item-count">5</span>
<span class="site-state-item-name">categories</span></a>
</div>
<div class="site-state-item site-state-tags">
<a href="/tags/">
<span class="site-state-item-count">6</span>
<span class="site-state-item-name">tags</span></a>
</div>
</nav>
</div>
</div>
</div>
</aside>
<div id="sidebar-dimmer"></div>
</div>
</main>
<footer class="footer">
<div class="footer-inner">
<div class="copyright">
©
<span itemprop="copyrightYear">2022</span>
<span class="with-love">
<i class="fa fa-heart"></i>
</span>
<span class="author" itemprop="copyrightHolder">LSC</span>
</div>
<div class="powered-by">Powered by <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> & <a href="https://pisces.theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Pisces</a>
</div>
</div>
</footer>
</div>
<script src="/lib/anime.min.js"></script>
<script src="/lib/velocity/velocity.min.js"></script>
<script src="/lib/velocity/velocity.ui.min.js"></script>
<script src="/js/utils.js"></script>
<script src="/js/motion.js"></script>
<script src="/js/schemes/pisces.js"></script>
<script src="/js/next-boot.js"></script>
</body>
</html>