摘要:《Windows核心编程》 可以说是每一位Windows平台程序员成长过程中必备和必读的书籍。其中的Part III主要讲解了Windows平台的内存管理机制。这部分内容可以说是本书比较有难度并且理论性内容比较多的一章。今天,就内存管理这部分说一说自己的一些理解。Reserve region。reserve基本上可以看做是一个打报告的行为,或者说是预约。通过调用VirtualAlloc配合MEM_RESERVE我们可以从虚拟地址空间分配出一块内存。这块内存称之为region。需要注意的是,此时虽然已经预约了一块内存空间,但事实上并没有真正分配。比较拗口。简单说就是,这个过程预订了一块虚拟地址.
阅读全文
摘要:操作符重载可以说是C++或者说其他面向对象语言的一个很重要的特性。它可以让对象的相关操作看起来和基本数据类型的操作一样。但是本文的重点不是介绍C++操作符重载的语法和简单的应用,而是要强调一下在应用操作符重载时,你是否真的想清楚了。什么意思呢,且看下文。 我们假定有下面这些代码:class CObject{public: CObject(int iObject = 0) : m_iObj...
阅读全文
摘要:前两天简单说了下标题栏菜单栏合为一体时有哪些解决方案。同时也尝试着解决了一些方案中存在的问题。其中关于最大化的问题一直存留还未解决。今天就来说说如何解决这些和窗口放缩相关的问题。 放缩首先要解决的一个问题是,如何保证在最大化时不覆盖任务栏,怎样可以动态地获得除去任务栏以外的桌面工作区域?要获得这部分区域,我们需要借助SystemParametersInfo函数并传递SPI_GETWORKAREA。解决了区域问题,那在最大化的什么时候去设置这个区域大小呢,WM_SIZE?如果在WM_SIZE时候去设置最大化的话,你会发现这是没有用的。这里,我们要倚仗Windows的另外一个消息:WM_GETM.
阅读全文
摘要:你会发现,现在越来越多的桌面应用程序将菜单栏和标题栏合为一体。要实现这种效果,一般有两种方案:将菜单绘制到标题栏上移除标题栏,把菜单栏当标题用众所周知,标题栏和菜单栏都是典型的非客户区,而在Windows平台上,非客户区的自绘对很多程序猿来说,真的是痛苦不堪啊。因此方案一自然而然就被淘汰了。既然如此,那么如何用方案二实现我们要的效果呢?这里,先把“效果”简单说下:应用程序的界面上,标题栏和菜单栏在同一个区域显示,用户点击“菜单区域”,弹出对应的菜单;用户点击其他空白区域,如同点击了标题栏 (表述不清,不过我想大家都理解了吧……)。方案二里,实际上包含了两个要点:移除标题栏用菜单栏模拟标题栏如何
阅读全文
摘要:在Windows平台开发桌面应用程序的时候,经常会遇到这样一种情况:我需要定时做一些事情,但是这些事情是后台的,顶多是做完了通知一下相关的GUI控件进行刷新。使用定时器是一个很直觉型的解决方案。但是不巧的是,在Windows平台,定时器是和窗口消息绑定在一起的。为了解决这个问题,很多人不得不去创建一个隐藏的窗口,通过这个窗口把相关的事情串联起来。我个人认为,这不失为一个好的解决方案。但是对隐藏窗口需要多费一点口舌。为什么这么说呢?很多人(特别是初学者),在创建这种窗口时套用常规的创建窗口的方式,唯一不同的地方是不指定WS_VISIBLE。那这样做到底有什么不好的地方?这可能需要具体问题具体分析
阅读全文
摘要:说一说C++的成员函数指针。 在刚学C++的时候,一个基本的概念是指针的大小等于机器的字长。因此在32位的机器上,一个指向整型的指针sizeof会返回4。那么,是不是意味所有类型的指针sizeof后,都是4呢? 一般来说,绝对的事情是比较少的,特殊情况总是存在的,那就是成员函数指针。我们从简单的例子一点一点来看这个问题。 案例一: class CBase1 {};typedef void (...
阅读全文