随笔- 182
文章- 1
评论- 28
阅读-
57万
03 2011 档案
ASCII编码表
摘要:十六进制十进制字符十六进制十进制字符十六进制十进制字符十六进制十进制字符00NUL2032空格 4064@6096`11SOH2133!4165A6197a22STX2234"4266B6298b33ETX2335#4367C6399c44EOF2436$4468D64100d55ENQ2537%4569E65101e66ACK2638&4670F66102f77BEL2739'4771G67103g88BS2840(4872H68104h99HT2941)4973I69105iA10LF2A42*4A74J6A106jB11VT2B43+4B75K6B107kC12
阅读全文
URL编码表
摘要:æ 退格 TAB 换行 回车 空格 ! " # $ % & ' ( ) * + , - . /%00 %01 %02 %03 %04 %05 %06 %07 %08 %09 %0a %0b %0c %0d %0e %0f %10 %11 %12 %13 %14 %15 %16 %17 %18 %19 %1a %1b %1c %1d %1e %1f %20 %21 %22 %23 %24 %25 %26 %27 %28 %29 %2a %2b %2c %2d %2e %2f0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B
阅读全文
A note from UrlEscape Function
摘要:UrlEscape is used to converts characters in a URL that might be altered during transport across the Internet ("unsafe" characters) into their corresponding escape sequences.For the purposes of this document, a typical URL is divided into three sections: the server, the segment, and the que
阅读全文
URL的#号
摘要:去年9月,twitter改版。一个显著变化,就是URL加入了"#!"符号。比如,改版前的用户主页网址为 http://twitter.com/username改版后,就变成了 http://twitter.com/#!/username在我印象中,这是主流网站第一次将"#"大规模用于直接与用户交互的关键URL中。这表明井号(Hash)的作用正在被重新认识。本文根据HttpWatch的文章,整理与井号有关的所有重要知识点。一、#的涵义#代表网页中的一个位置。其右面的字符,就是该位置的标识符。比如, http://www.example.com/index.
阅读全文
Base64编码
摘要:1.MIME主要使用两种编码转换方式——Quoted-printable和Base64——将8位的非英语字符转化为7位的ASCII字符。虽然这样的初衷,是为了满足电子邮件中不能直接使用非ASCII码字符的规定,但是也有其他重要的意义:a)所有的二进制文件,都可以因此转化为可打印的文本编码,使用文本软件进行编辑;b)能够对文本进行简单的加密。2.首先,简单介绍一下Quoted-printable编码转换方式。它主要用于ACSII文本中夹杂少量非ASCII码字符的情况,不适合于转换纯二进制文件。它规定将每一个8位的字节,转换为3个字符。第一个字符是“=”号,这是固定不变的。后面二个字符是二个十六进
阅读全文
关于URL编码
摘要:一、问题的由来一般来说,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。比如,世界上有英文字母的网址“http://www.abc.com”,但是没有希腊字母的网址“http://www.aβγ.com”(读作阿尔法-贝塔-伽玛.com)。这是因为网络标准RFC 1738做了硬性规定:"...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], and reserved charac
阅读全文
Unicode详解
摘要:字节和字符的区别字节和字符能有什么区别?不都是一样的吗?完全正确,但只是在古老的DOS时代。当Unicode出现后,字节和字符就不一样了。字节(octet)是一个八位的存储单元,取值范围0~255。而字符(character,或者word)为语言意义上的符号,范围就不一定了。例如在UCS-2中定义的字符范围为0~65535,它的一个字符占用两个字节。Big Endian和Little Endian上面提到了一个字符可能占用多个字节,那么这多个字节在计算机中如何存储呢?比如字符0xabcd,它的存储格式到底是 AB CD,还是 CD AB 呢?实际上两者都有可能,并分别有不同的名字。如果存储为
阅读全文
ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码详解
摘要:ASCII字符集编码ASCII码是7位编码,编码范围是0x00-0x7F。ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。其中0x00-0x20和0x7F共33个控制字符。只支持ASCII码的系统会忽略每个字节的最高位,只认为低7位是有效位。HZ字符编码就是早期为了在只支持7位ASCII系统中传输中文而设计的编码。早期很多邮件系统也只支持ASCII编码,为了传输中文邮件必须使用BASE64或者其他编码方式。GB2312字符集编码GB2312 是汉字字符集和编码的代号,中文全称为“信息交换用汉字编码字符集”,由中华人民共和国国家标准总局发布,一九八一年五月一日实施。GB 是“国标” 二
阅读全文
Unicode和UTF-8之间的转换详解
摘要:Unicode是一个字符集,而UTF-8是 Unicode的其中一种,Unicode是定长的都为双字节,而UTF-8是可变的,对于汉字来说Unicode占有的字节比UTF-8占用的字节少1 个字节。Unicode为双字节,而UTF-8中汉字占三个字节。 UTF-8编码字符理论上可以最多到6个字节长,然而16位BMP(Basic Multilingual Plane)字符最多只用到3字节长。下面看一下UTF-8编码表: U-00000000 - U-0000007F: 0xxxxxxx U-00000080 - U-000007FF: 110xxxxx 10xxxxxx U-00000800 -
阅读全文
关于MFC下检查和消除内存泄露的技巧
摘要:摘要本文分析了Windows环境使用MFC调试内存泄露的技术,介绍了在Windows环境下用VC++查找,定位和消除内存泄露的方法技巧。关键词:VC++;CRT 调试堆函数;试探法。编译环境VC++6.0技术原理检测内存泄漏的主要工具是调试器和 CRT 调试堆函数。若要启用调试堆函数,请在程序中包括以下语句: #define CRTDBG_MAP_ALLOC#include <stdlib.h>#include <crtdbg.h>注意 #include 语句必须采用上文所示顺序。如果更改了顺序,所使用的函数可能无法正确工作。 通过包括 crtdbg.h,将 mallo
阅读全文
VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏
摘要:检测内存泄漏的基本工具是调试器和 CRT 调试堆函数。为了使用调试堆函数,必须在要检测内存泄漏和调试的程序中添加下面的语句:#define _CRTDBG_MAP_ALLOC #include<stdlib.h> #include<crtdbg.h> #include "debug_new.h" MSDN 如是说:“必须保证上面声明的顺序,如果改变了顺序,可能不能正常工作。”至于这是为什么,我们不得而知。MS 的老大们经常这样故弄玄虚。 针对非 MFC 程序,再加上周星星的头文件:(1)debug_new.h,当然如果不加这一句,也能检测出内存泄漏,
阅读全文
全面解读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与"?"
阅读全文
debug与release的区别
摘要:Debug版本包括调试信息,所以要比Release版本大很多(可能大数百K至数M)。至于是否需要DLL支持,主要看你采用的编译选项。如果是 基于ATL的,则Debug和Release版本对DLL的要求差不多。如果采用的编译选项为使用MFC动态库,则需要MFC42D.DLL等库支持,而 Release版本需要MFC42.DLL支持。Release Build不对源代码进行调试,不考虑MFC的诊断宏,使用的是MFC Release库,编译十对应用程序的速度进行优化,而Debug Build则正好相反,它允许对源代码进行调试,可以定义和使用MFC的诊断宏,采用MFC Debug库,对速度没有优化。
阅读全文
VC调试篇
摘要:设置为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创建的工程中包含的Debug Configuration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration中增加调试信息,包括Release版本。为了增加调试信息,可以按照下述步骤进行: 打开Project settings对话框(可以通过快捷键ALT+F7打开,也可以通过IDE菜单Project/Settings打开) 选择C/C++页,Category中选择general ,则出现一个Debug Info下拉列表框,可供选择的调试
阅读全文
谈VC6中Debug版本与Release版本生成的Exe的差异
摘要:用Vc6编写的程序有时候Debug版本好好的,Release版本运行就出错,很多人都遇到过这种问题。前几天又有人问起,于是找了点时间写下这篇东西。总结了一部分Debug版本和Release版本的区别,都是些个人理解,欢迎交流。 Debug版本和Release版本之所以有区别,就是在于各自的编译项不同。不同的编译项组合产生不同的代码,Debug版本的编译项屏蔽了编译器的优 化,增加了调试信息的输出。也就是说,可以通过修改编译项的组合,使得优化过的版本也包含调试信息。于是调试Release版本成为了可能。那就先说说调 试方面Debug做的工作。 提起Vc6的调试,不能不提的就是它的PDB(Prog
阅读全文
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
阅读全文
使用CRT调试功能来检测内存泄漏
摘要:C/C++ 编程语言的最强大功能之一便是其动态分配和释放内存,但是中国有句古话:“最大的长处也可能成为最大的弱点”,那么 C/C++ 应用程序正好印证了这句话。在 C/C++ 应用程序开发过程中,动态分配的内存处理不当是最常见的问题。其中,最难捉摸也最难检测的错误之一就是内存泄漏,即未能正确释放以前分配的内存的错误。偶尔发生的少量内存泄漏可能不会引起我们的注意,但泄漏大量内存的程序或泄漏日益增多的程序可能会表现出各种 各样的征兆:从性能不良(并且逐渐降低)到内存完全耗尽。更糟的是,泄漏的程序可能会用掉太多内存,导致另外一个程序垮掉,而使用户无从查找问题的真正根源。此外,即使无害的内存泄漏也可能
阅读全文
一些关于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
阅读全文
输入输出重定向
摘要:常用的重定向:输出重定向:for exampleCMD下,当前目录为D盘, 把dir的输出结果重定向到data.txt中d: \>dir > data.txt把ConsoleDemo.exe输出到屏幕的内容重定向到output.txt文件中d:\>ConsoleDemo.exe > output.txt输入重定向:把input.txt文件的内容作为参数传递给ConsoleDemo.exeCMD下,当前目录为D盘,d:\>ConsoleDemo.exe < input.txt
阅读全文
使用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便可以依据这个返回值进行排序实现。可以看出,这种方法虽然简单,却有一个比较严重的缺陷,即不能支持按照不同列数据进行排序。对于自绘控件来说
阅读全文
Verify whether key exist or not
摘要:HKEY hkResult; LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\pbrush.exe", 0, KEY_READ, &hkResult); if (ERROR_SUCCESS == lRet) { lRet = RegQueryValueEx( hkResult, L"Path", NULL, NULL, NULL, NULL ); if (ERROR_SUCCESS ==
阅读全文
Get system version via WMI
摘要:On Error Resume Next ' Connect to WMI and obtain instances of Win32_OperatingSystemFor Each objOS in GetObject("winmgmts:").InstancesOf ("Win32_OperatingSystem") WScript.Echo "Version = " & objOS.Version Nextif Err <> 0 Then WScript.Echo Err.Description Er
阅读全文
Get system version via registry
摘要:Option ExplicitDim objSet obj = CreateObject("WScript.Shell")On Error Resume NextDim valuevalue = obj.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion")If Err <> 0 Then Msgbox Err.Description Err.ClearElse MsgBox valueEnd If
阅读全文
关于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 不同的
阅读全文
Chapter 1: Error Handling
摘要:DWORD GetLastError();该函数只返回线程的32位错误代码。WinError.h头文件包含了Microsoft公司定义的错误代码的列表每个错误都有3种表示法:一个消息ID(这是你可以在源代码中使用的一个宏,以便与GetLastError的返回值进行比较),消息文本(对错误的英文描述)和一个号码(应该避免使用这个号码,可使用消息ID)。当Windows函数运行失败时,应该立即调用GetLastError函数。如果调用另一个Windows函数,它的值很可能被改写。成功调用的Windows函数可能用ERROR_SUCCESS改写此值。Watch(监视)窗口,显示线程的上一个错误代码和
阅读全文
A simple Demo
摘要:#include <ObjBase.h>#include <iostream>using namespace std;void trace(const char * msg){ cout<<msg<<endl;}//Forward references for GUIDsextern const IID IID_IX;extern const IID IID_IY;extern const IID IID_IZ;//Interfacesinterface IX :IUnknown{ virtual void _stdcall Fx() = 0;}
阅读全文