Win笔记
文章平均质量分 86
pokeyode
这个作者很懒,什么都没留下…
展开
-
MFC消息机制
消息产生:消息由系统或程序产生,并不断加入到消息队列中。消息获取:程序启动后执行到theApp的Run函数,死循环不断的取消息,再推送消息CWinThread::PumpMessage()(调用) ->::DispatchMessage(&m_msgCur)(图示)->AfxWndProc(调用)->CWnd::WindowProc(调用)->OnWndMsg()->根据消息类型执行OnCom原创 2013-02-18 19:09:39 · 676 阅读 · 0 评论 -
windows程序设计——子视窗控制项
我们以一个窗口作为消息处理的主体,除了鼠标、键盘、定时器外,窗口中的子窗口发送的消息也可作为一种输入。当子窗口的自身处理消息,在必要时给父窗口发送消息,相当于父窗口的的高阶输入设备,这个称为"子视窗控制项"。常见的有:按钮、核取方块、编辑方块、清单方块、下拉式清单方块、字串标签和卷动列等,windows为这些基本项目都编写了默认的处理代码,我们只需要在主窗口中获取并处理(WM_COMMAND)消息原创 2017-06-23 16:53:08 · 349 阅读 · 0 评论 -
WINDOWS核心编程——设备IO
IO是程序与外部通信的主要方式,程序通过API可以与以下设备通信,windows将这些抽象为设备通过CreateFile函数打开设备,通过CloseHandle关闭设备。HANDLE CreateFile( PCTSTR pszName, //普通文件名或者设备文件名 DWORD dwDesiredAccess, //访问模式(写/读) DWORD dwShare原创 2017-07-12 19:26:54 · 580 阅读 · 0 评论 -
WINDOWS核心编程——线程池和纤程
微软这是对开发者友好的的软件厂商,在直接提供线程池使得开发者在需要使用线程池时无需自己编写(特别是调度的部分),用户无需自己创建和管理线程。微软默认用户使用线程池与不同的对象关联来满足四种需求:1.以异步的方式调用一个函数。用户需要异步调用一个函数,主要将这个函数地址传给线程池,系统就会在合适的时间调用它。函数地址当然必须是接口定义好的函数指针。//回调函数指针类型VOID NTAPI原创 2017-07-13 21:35:26 · 699 阅读 · 0 评论 -
windows程序设计——功能表及其他资源
打开workspace的ResourceView可以看到系统的常用资源:图示、游标、字串、自订资源、功能表、键盘加速键、对话方块、点阵图。windows提供了一种直观的方式使得我们在开发过程中可以在资源编辑器中以所见既所得的方式来编辑这些资源,在生成可执行文件的时候资源编译器编译这些资源编译为二进制内容,并在程序连接的时候作为程序的一部分连接到可执行文件中。但资源被添加到工程中时,系统会为资源原创 2017-06-26 21:28:14 · 758 阅读 · 0 评论 -
windows程序设计——对话方块
之前所有介绍的资源中,最复杂的也不过菜单,这些资源只能承载简单的信息和交互(wm_command)。如果需要更加复杂和信息展示和交互,可以使用另外一种资源——对话框。与其他所有的资源一样对话框同样可以通过资源编辑器以所见即所得的方式进行编辑并在生成时链接到exe文件中或者直接用代码进行动态创建。建议使用编辑资源的方式来使用对话框。对话框在rc文件中的结构描述如下:///////////////原创 2017-06-27 17:07:51 · 480 阅读 · 0 评论 -
windows程序设计——计时器
可能不是很直观,但计时器确实算的上一个输入设备。当设置了一个定时器是,系统设置一个计时数,由windows系统接收到硬件的tick信号将计时数减去一定值,当减少到0时,系统在程序的消息队列中加入一条WM_TIMER消息。因此timer消息是个同步消息,与鼠标与键盘的输入一样通过getmesssage获取到消息之后在dispatch到对应的窗口中。定时器还是一种系统资源,若不再需要需要释放。故一下两原创 2017-06-14 17:32:03 · 2073 阅读 · 0 评论 -
WINDOWS核心编程——进程和作业
要理解进程首先要厘清下概念。进程是程序可执行文件在系统中运行的实例。进程是被系统所管理的资源的集合,cpu计算资源也是一种资源被用于执行代码所生成的指令,cpu执行指令流的最小单位就是线程,一个进程中必然含有一个线程。main函数被称为入口函数,指定了进程进入我们所设计的流程位置,即当指令流执行到main函数代码所生成的指令时就进入到我们(用代码)设计的流程中。故main函数被称为入口函数而非原创 2017-07-06 14:45:47 · 942 阅读 · 0 评论 -
WINDOWS核心编程——必备知识
第一部分内容不多:1.调用API失败之后如何查看发生了什么错误。2.安全的使用字符串函数,避免发生读写越界的情况。3.内核对象和内核句柄的基本概念,内核对象在进程中表现为句柄只能通过API操作句柄对象,无法直接访问。1.对于系统API而言通常不会抛出异常,而采用放回值来报告函数调用失败,通常有如下几种返回值类型:API函数发生时调用SetLastError把错误类型放到线程局部存储原创 2017-07-04 18:31:20 · 1106 阅读 · 0 评论 -
WINDOWS核心编程——线程基础
线程是进程中可以被系统(作业系统)调度的最小单位。线程可以使用进程中的任何资源,他自身只包含有必要的独立的线程栈和寄存器。线程的设计是为了提高CPU的使用率:当系统同时拥有多个CPU时让每个CPU都执行一个指令流在同一时间进行两个工作。当进程只拥有一个CPU的执行时间时,若执行流中发生阻塞(等待)而阻塞时不需要CPU执行任何指令,这时候可以让CPU去执行其他指令称之为线程切换,在阻塞解除又具备原创 2017-07-07 14:10:42 · 395 阅读 · 0 评论 -
WINDOWS核心编程——DLL基础和实操
与将所有的指令通过链接器在生成exe的时候都链接在一起并安排好各个指令的位置不同,windows还提供了动态链接(DLL)技术。一般情况下我们会处于以下原因采用DLL技术:1.扩展了应用程序的特性。DLL可以被动态地载入到进程的地址空间中。2.简化了项目管理,可以让不同的开发团队管理不同的模块。3.有助于节省内存。一个dll可被多个程序共享。多个程序调用同一个dll内的同一个函数时,系统却只需将该...原创 2018-03-14 15:22:26 · 9107 阅读 · 0 评论 -
WINDOWS核心编程——Windows内存管理
想要了解Windows内存体系结构首先要对系统的内存的分段分页和进程隔离机制要有所了解。系统为了对进程进行隔离,使得每个进程只能访问自己申请的内存而不能访问其他进程的内存资源,对每个进程的内存使用线性地址编制,在通过内存的分页机制在进程需要访问物理内存时通过进程的页表找到世界的物理内存的地址通过系统读写内存中的数据。在早期总线(20位寻址1M)大于寄存器(16位寻址64k)的情况下为了表示更多的物原创 2017-07-18 20:53:07 · 8902 阅读 · 1 评论 -
WINDOWS核心编程——线程同步
线程同步主要涉及两个问题:1.不同的线程使用同一个资源但要保证资源完整有效。2.不同的线程之间的互相协作完成一个工作。所有的线程同步无外乎就是高效的(不浪费CPU)的实现这两个目的。同样我们需要了解在多线程环境下为什么会出现这两个问题和这两个问题如何表现:1.刨除软件设计本身的原因,在多线程环境下CPU的高速缓存行在多线程环境下引入了之前未考虑到的复杂性,对于在不同CPU中执行的线程使用同原创 2017-07-11 17:16:01 · 576 阅读 · 0 评论 -
windows程序设计——多重文件介面
简单地说,就像Windows 在一个萤幕上维护多个应用程式视窗一样,MDI 应用程式在一个显示区域内维护多个文件视窗。框架窗口与客户窗口显示如下:每个窗口激活时会对应各自的菜单:frame,clientwind,childwind关系如下:以上窗口的实现如下:/*------------------------------------------原创 2017-06-29 17:37:12 · 348 阅读 · 0 评论 -
Document-View与MVC
MVC理解(借用XX百科上的定义):视图(view):数据的展现。 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户的输入数据,但是它并不进行任何实际的业务处理。视图可以向模型查询业务状态,但不能改变模型。视图还能接受模型发出的数据更新事件,从而对用户界面进行同步更新。模型(model):应用对象。 模型是应用程序的主体部分。 模型代表了业务数据和业务逻辑原创 2013-02-19 15:15:29 · 1074 阅读 · 0 评论 -
MFC程序启动过程
1.通知系统要执行某一程序(鼠标,键盘,命令行...)。2.系统将程序家载入内存(shell),为程序分配资源(进程,主线程,内存)。在此过程中全局变量theApp内存被分配,在构造函数中调用基类CWinApp的构造函数,在此函数中将自身与系统分配的资源联系起来。AFX_MODULE_STATE* pModuleState = AfxGetModuleState();pModuleSta原创 2013-02-18 15:17:23 · 636 阅读 · 0 评论 -
从MFC的Persistence机制展开
Persistence的实现其实就是Serialize,书中总结要实现Serialize的5个必要条件:1. 从CObject 衍生下来。如此一来可保有RTTI、Dynamic Creation 等机能。2. 类别的声明部份必须有DECLARE_SERIAL 宏。此宏需要一个参数:类别名称。3. 类别的实作部份必须有IMPLEMENT_SERIAL 宏。此宏需要三个参数:一是类别名称,原创 2013-02-18 16:57:11 · 516 阅读 · 0 评论 -
CAsyncSocketEx浅析
CAsyncSocketEx是Tim Kosse发布到codeproject.com一个开源库。利用消息驱动,通过CAsyncSocketEx类封装win32的网络接口。以下通过一个简化的CAsyncSocketEx对其实现进行初步解析。 通过CAsyncSocketEx的create和消息处理函数WindowProc可以很清晰的整理出整个库的脉络。 BOOL CAsyncSock原创 2013-03-04 14:27:08 · 1190 阅读 · 0 评论 -
MFC类别阶层
MFC大量使用C++的面向对象特性故有必要了解其类别阶层(取自深入浅出MFC)。转载 2013-02-18 15:36:07 · 443 阅读 · 0 评论 -
windows程序设计——开始、Unicode 简介
大师的书真是太啰嗦了,我认为直接给代码和注释,是更高效率的方法(依然用的vc6)。#include int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){ MessageBox (NULL, TEXT原创 2017-05-24 11:55:21 · 376 阅读 · 0 评论 -
windows程序设计——视窗和讯息
windows最大的进步就是可视化的窗口显示信息,我们可以自定义一个窗口,并处理窗口的消息。windows程序的驱动机制称为消息驱动,既程序通过被动的响应消息来与用户交互。用户通过输入设备向系统输入事件,系统检测到事件或者系统本身定义的事件条件被触发,通过发送消息的方式通知程序,而程序对不同的消息采用不同的处理之后再反馈给用户,这个流程被称为消息处理框架。/*-----------------原创 2017-05-25 15:21:04 · 354 阅读 · 0 评论 -
windows程序设计——输出文字
通常windows程序以响应WM_PAINT消息的方式而不是主动绘制,在客户区中输出文字和图形来向用户展示信息。在发生下面几种事件之一时,视窗讯息处理程式会接收到一个WM_PAINT 消息:1.在使用者移动视窗或显示视窗时,视窗中先前被隐藏的区域重新可见。2.使用者改变视窗的大小(如果视窗类别样式有著CS_HREDRAW 和CS_VREDRAW位元旗标的设定)。3.程式使用Scroll原创 2017-05-26 15:37:39 · 2598 阅读 · 0 评论 -
windows程序设计——图形基础
如前所诉,windows输出图形到显示器上采用绘制的形式,除了文字之外,windows还有能绘制其余几个基本图形,通过绘制这些基本图形最后组合出复杂界面。基本图形包括:直线和曲线、填入区域、点阵图、文字。与文字输出一样,windows程序并不直接操作输出对象,而是通过操作句柄来操作绘图设备。除了更安全的原因之外,操作HDC还有抽象的意味,如以绘图设备指代显示器或者打印机使得不需要对两个输出设备原创 2017-05-31 17:45:59 · 1866 阅读 · 0 评论 -
windows程序设计——键盘
键盘是windows的基础输入设备,用户通过键盘可以通过键盘上的按键来控制系统与输入内容。为满足键盘的这两个功能要求系统将键盘产生的消息区分为按键消息和字符消息(当然具体处理的时候并没有严格限定按键消息只能用于控制系统,字符消息只能用于输入文字,用户自定义处理可以识别按键信息用于输入,使用字符信息用于控制)。按键消息有系统按键消息和普通按键消息,系统按键消息经常由与Alt 相组合的按键产生,按原创 2017-06-01 17:32:32 · 1976 阅读 · 0 评论 -
windows程序设计——鼠标
现代计算机中除了键盘作为输入设备,更常用的还有鼠标。可以通过API来确定系统中是否存在鼠标并可以自定义界面上显示鼠标指针形状。鼠标的按键比键盘少,而且能进行的操作就是按下、抬起、移动,与键盘一样用户不需要直接处理指标的硬件信号,系统将这些动作都转化为虚拟按键消息发给程序。fMouse = GetSystemMetrics (SM_MOUSEPRESENT) ; //判断鼠标是否存在wndcl原创 2017-06-06 13:41:53 · 788 阅读 · 0 评论 -
WINDOWS核心编程——异常处理
我觉得这篇文章讲的比书上更清楚:http://blog.csdn.net/pokeyode/article/details/53426340原创 2018-03-14 15:22:01 · 707 阅读 · 0 评论