随笔- 182
文章- 1
评论- 28
阅读-
57万
随笔分类 - MFC
Microsoft Foundation Classes
给win32 application加console窗口
摘要:做win32窗口程序的时候,有时还是希望在控制台下输入输出一些信息。特别是VC的TRACE()宏虽然不错,但是输出在VC的debug窗口下。里面有些杂乱的信息,看起来还是很不爽。1。最原始的分配控制台,获得句柄,再输出 AllocConsole() ; HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE) ; WriteConsole(hd , "hello hplonline" , sizeof("hello hplonline") , NULL , NULL ); CloseHandle(hd) ;这个方法用起来有点
阅读全文
全面解读WM_NOTIFY
摘要:摘要:控件通知消息有很多种,但是有一种是很常用,但是又不是很容易掌握的,那就是WM_NOTIFY,我试着对此做一下比较全面的论述,有不对的地方,还希望各路大虾批评指正。 控件通知消息 在《深度解析VC中的消息(上)》中,我们提到了消息的分类有3种:窗口消息、命令消息和控件通知消息,我们这里要谈的是最后一种:控件通知消息。 控件通知消息,是指这样一种消息,一个窗口内的子控件发生了一些事情,需要通知父窗口。通知消息只适用于标准的窗口控件如按钮、列表框、组合框、编辑框,以及Windows公共控件如树状视图、列表视图等。例如,单击或双击一个控件、在控件中选择部分文本、操作控件的滚动条都会产生通知消息。
阅读全文
一个microsoft的.exe程序的启动过程
摘要:学习windows 编程从mfc角度来说可分为两部分那就是WinMain函数以前的,和WinMain函 数以后的。前者涉及很多windows操作系统内部的知识,后者么看mfc源码就可以了。虽然大 多数程序不需要你了解太多关于os加载应用程序这方面的知识,但我认为能较深入了解wind ows os的运行情况对程序员是很有帮助的。 最近我正在研究一个microsoft的.exe程序的启动过程,这也是以上所说的关于os如何加 载程序的知识,它包括进程创建,主线程 创建,PE文件加载,程序c运行时启动函数以及四种 main函数的调用等许多令我不得不静下心来好好思索的东东。从mfc编程角度来说,这些都是
阅读全文
利用Visual Assist X的模板功能提高编辑效率
摘要:Visual Assist X是VC必备的插件,它将成倍提高编辑效率。下面简单介绍一下它的模板功能。安装好Visual Assist X后,打开Visual Assist X Options对话框,如图:选择Autotext/Templates, 里面显示了当前定义的模板。以struct为例:struct:struct ?{};FF第一行的"struct: "表示为struct定义的模板,当输入struct时会显示下面的struct ?{};这里的"?"表示自动输入这些字符后光标所停的位置。模板以FF字样结束。注意:这里的FF与"?"
阅读全文
Visual C++中的C运行时库浅析
摘要:1.概论运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的。C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于新观念。所以这个时期的C运行时库都是单线程的。随着操作系统多线程技术的发展,最初的C运行时库无法满足程序的需求,出现了严重的问题。C运行时库使用了多个全局变量 (例如errno)和静态变量,这可能在多线程程序中引起冲突。假设两个线程都同时设置errno,其结果是后设置的errno会将先前的覆盖,用户得不 到正确的错误信息。因此,Visual C++提供了两种版本的C运行时库。一个版本供单线程应用程序
阅读全文
在VC中编译、运行程序的小知识点
摘要:1、Run-Time LibraryRun-Time Library是编译器提供的标准库,提供一些基本的库函数和系统调用。 我们一般使用的Run-Time Library是C Run-Time Libraries。当然也有Standard C++ libraries。 C Run-Time Libraries实现ANSI C的标准库。VC安装目录的CRT目录有C Run-Time库的大部分源代码。 C Run-Time Libraries有静态库版本,也有动态链接库版本;有单线程版本,也有多线程版本;还有调试和非调试版本。 可以在"project"-"settin
阅读全文
一些关于UI方面的知识
摘要:参考以下链接http://hi.baidu.com/winnyang/blog/category/vc%20%BD%E7%C3%E6%2Cͼ%D0%CEͼ%CF%F3%2C%CA%FD%BEݿ%E2/index/0
阅读全文
使用Custom Draw实现ListCtrl的重绘
摘要:common control 4.7版本介绍了一个新的特性叫做Custom Draw,这个名字显得模糊不清,让人有点摸不着头脑,而且MSDN里也只给出了一些如风的解释和例子,没有谁告诉你你想知道的,和究竟这个特性有什么好处。Custom draw可以被想象成一个轻量级的,容易使用的重绘方法(重绘方法还有几种,例如Owner Draw等)。这种容易来自于我们只需要处理一个消息(NM_CUSTOMDRAW),就可以让Windows为你干活了,你就不用被逼去处理"重绘过程"中所有的脏活了。这篇文章的焦点是如何在一个LISTCTRL控件上使用Custom Draw消息。究其原因,一部分是因为我已经在我
阅读全文
CUSTOMDRAW和OwnerDraw
摘要:1.Owner Draw当Button控件被设置成OwnerDraw属性时,父窗体就会接受到WM_DRAWITEM、WM_MEASUREITEM、WM_COMPAREITEM、WM_DELETEITEM四个消息。除了Button空间外,还有ListBox控件设置CBS_OWNERDRAWVARIABLE属性。The WM_DRAWITEM message is sent to the owner window of an owner-drawn button, combo box, list box, or menu when a visual aspect of the button, co
阅读全文
OnPaint()函数的作用原理
摘要:WM_PAINT是窗口每次重绘都会产生的一个消息。 OnPaint是对这个消息的反应函数mfc 的 CWnd::OnPaint 没做什么,只是丢给系统处理。一 :先执行OnEraseBkgnd,擦除背景(如果想自绘控件,这个函数直接return TRUE就可以了,这样就不会擦除背景,不会闪)OnEraseBkGnd与OnPaint的区别与联系在OnEraseBkGnd中,如果你不调用原来缺省的OnEraseBkGnd只是重画背景则不会有闪烁.而在OnPaint里面,由于它隐含的调用了OnEraseBkGnd,而你又没有处理OnEraseBkGnd 函数,这时就和窗口缺省的背景刷相关了.缺省的
阅读全文
MFC子窗口和父窗口(SetParent,SetOwner)
摘要:一、概念和区别 在windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表。系统的窗口管理器通过这个list来获取窗口信息和管理每个窗口。这个数据结构中有四个数据用来构建list,即child、sibling、parent、owner四个域。所以我们可以看到,窗口之间的关系有两种:owner-owned 关系和 parent-child关系。前者称之为拥有/被拥有关系,后者称之为父/子关系。在这篇文字中,我把owner窗口称之所有者窗口。换句话说,一个窗口在有一个父窗口(parent)的同时,还可能被不同的窗口拥有(owner),也可以有自己的子窗口(child)。在MFC
阅读全文
窗口最小化消息的解决之道
摘要:最近在弄程序的时候,碰到需要在主窗口最小化的时候,自动将其子窗口最小化的问题。当时没想通。不过现在明白了,其实就是在窗口大小变化的事件里判断主窗口是否最小化的。然后进行相应的操作即可。如果是在SDK程序, 或者VC中可能用不着这样麻烦了,直接在消息循环中进行相应的操作即可。呵呵,其它的语言,就用这方法吧。。。下面是网上的一些资料:我们首先要知道窗口什么时候最小化。但是窗口消息中并没有最小化这个消息,经过一番查找,发现最小化竟而藏在了WM_SIZE这个消息的wParam参数中了。我们在这里就利用窗口的WM_SIZE消息来获取窗口最小化的消息。首先我们要了解一下WM_SIZE消息是什么时候产生的。
阅读全文
WM_SYSCOMMAND 函数
摘要:WM_SYSCOMMAND Notification当用户从窗口菜单选择一个命令或当用户选择最大化按钮,最小化按钮,复原按钮或关闭按钮时,一个窗口将会接收该消息SyntaxWM_SYSCOMMANDWPARAM wParamLPARAM lParam;参数wParam指定系统命令的类型。该参数可以是下列值之一:SC_CLOSE关闭窗口 SC_CONTEXTHELP将光标改为一个问题标识样式。如果用户之后点击了对话框中的一个控件,该控件会收到一个WM_HELP消息。SC_DEFAULT当用户双击窗口菜单时,选择默认的条目。SC_HOTKEY以应用程序指定的热键激活窗口。lParam参数标识了所要
阅读全文
关于MFC中最小化消息被界面控件拦截时的替代办法
摘要:可以用WM_ACTIVATE消息来替代消息: WM_ACTIVATE参数: fActive = LOWORD(wParam); // activation flag fMinimized = (BOOL)HIWORD(wParam); // minimized flag hwndPrevious= (HWND)lParam; // window handlefActive 参数主要定义了该窗口发生了什么事情,即该窗口是被激活还是被取消。该信息保存在 wParam 的低阶字中,可以取以下的值:----------------------------------------------------
阅读全文
COMMAND 与 UPDATE_COMMAND_UI区别
摘要:UPDATE_COMMAND_UI 处理菜单对应的用户界面COMMAND 处理该菜单对应的功能传统SDK程序;要改变选单命令项状态,可以呼叫EnableMenuItem或是CheckMenuItem,但这使得程序杂乱无章,因为你没有;个固定的位置和固定的原则处理命令项状态。MFC提供;种直觉并且仍旧依赖讯息观念的方式,解决这个问题,这就是UPDATE_COMMAND_UI讯息。其设计理念是,每当选单被拉;并尚未显示之前,其命令项(以及对应之工具栏按钮)都会收到UPDATE_COMMAND_UI讯息,这个讯息和WM_COMMAND有㆒样的绕行路线,我们(程序员)只要在适当的
阅读全文
关于ListCtrol的owner-draw和custom-draw
摘要:一、所有者绘制(owner-draw)和自定义绘制(custom-draw)一、给控件添加排序功能report风格的list控件很多情况下都需要支持排序功能,而且最好支持按不同列进行排序。CListCtrl的类方法SortItems支持排序功能,但是在排序过程中,两个数据真正的比较过程是通过SortItems的第一个参数指向的回调比较函数来完成的。这个函数通过比较SetItemData函数设置的每个Item对应数值,返回一个代表比较结果的值,SortItems便可以依据这个返回值进行排序实现。可以看出,这种方法虽然简单,却有一个比较严重的缺陷,即不能支持按照不同列数据进行排序。对于自绘控件来说
阅读全文
关于NC消息
摘要:nc的英文全称是nonclient,和client相对应加nc的是指非客户区消息WM_NCCLIENT 消息在 WM_CREATE 之前,WM_NCDESTROY 在 WM_DESTROY 之后,WM_CREATEWM_CREATE_CHILDWM_DESTROYWM_NCDESTROY包括标题栏、窗口边框、最大、最小按钮、滚动条等都属于 non-client 区域。
阅读全文
检测文件的数字签名
摘要://------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. // Example of verifying the embedded signature of a PE file by using // the WinVerifyTrust function. #define _UNICODE 1 #define UNICODE 1 #include <tchar.h> #inclu
阅读全文
UI线程和工作者线程的消息队列
摘要:UI线程有窗口,窗口自建了消息队列。工作者线程初始状态没有自建消息队列。其实UI线程通常是指有CreateWindow/CreateWindowEx并处理消息循环的线程,其实与是主线程还是工作线程没有关系只不过大部分程序是在主线程中处理UI消息的并且只在该线程中处理UI消息,因为涉及API的同步/异步问题,这种方式会使得界面处理比较简化,但并不是说只能在主线程中做,你也可以在主线程中做与 GUI 无关的事情,而在工作线程中处理 UI 创建和消息分发实际工作线程也是可以有消息循环,且不一定处理的都是UI消息,参考 PostThreadMessage如果你想在两个线程中分别 Create 不同的
阅读全文