- 博客(31)
- 资源 (5)
- 收藏
- 关注
原创 WM_GETMINMAXINFO 设置窗口最大最小尺寸(无边框窗口不遮挡任务栏)
以wtl为例,响应WM_GETMINMAXINFO消息: LRESULT OnGetMinMaxInfo( UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/ ){MINMAXINFO * p = (MINMAXINFO * )lParam;p->ptMinTrackSize.x
2011-11-10 13:41:43
5367
原创 加了 WS_THICKFRAME 风格,如何能无边框?
如果想无边框,直接去掉WS_THICKFRAME不就行了嘛。那为什么还要有WS_THICKFRAME风格,再费劲去掉边框了?没有WS_THICKFRAME会带来很多问题:1.没有WS_THICKFRAME,有WS_SYSMENU,就没办法通过相应WM_NCHITTEST,去处理窗口的缩放。2.没有WS_THICKFRAME,也没有WS_SYSMEN,在xp系统下任务栏就没有
2011-11-10 13:23:27
14283
3
原创 线程安全”是一个什么概念?
以前常听高手告诫MFC对象不要跨线程使用,因为MFC不是线程安全的。比如CWnd对象不要跨线程使用,可以用窗口句柄(HWND)代替。CSocket/CAsyncSocket对象不要跨线程使用,用SOCKET句柄代替.那么到底什么是线程安全呢?什么时候需要考虑?如果程序涉及到多线程
2011-07-18 16:10:49
872
原创 WM_NCHITTEST (处理无边框窗口的缩放)
MSDN对它的解释是:The WM_NCHITTEST message is sent to a window when the cursor moves, or when a mouse button is pressed or released. If the mouse is not captured, the message is sent to the window bene
2011-07-13 15:27:30
2383
原创 活动窗口(Active),焦点窗口(Focus),IsDialogMessage,
任何一个时候,我们的Windows桌面上总有一个最前台的窗口,其实说简单的,就是标题栏变成深蓝色的那个窗口,仅此一个,这个窗口就是前景窗口(Foreground Window),其他窗口就是后台窗口(Background Window)。那创建前景窗口的线程就是前景线程(Fore
2011-07-12 22:29:25
5375
转载 OpCode教程
<br />什么是OpCode?<br />不管计算机技术的发展如何日新月异,其最基本的东西是不会突然改变的。OpCode就是这其中的一样东西——因此,Bill Gates的这句话用在这里并不太合适。<br />在开始回答什么是OpCode之前,请让我先来提几个小问题。计算机只认识0和1吗?如果上面的回答是“是”,那么我们平时写的程序源代码是0和1吗?如果上面的回答是“不是”,那么计算机是怎么“知道”我们的程序的意思的?<br />按顺序作答,依次是:是不是???<br />最后一个问题的答案是……?我们来
2011-05-19 18:07:00
2897
转载 控制寄存器(CR0,CR1,CR2,CR3)
控制寄存器(控制寄存器(CR0,CR1,CR2,CR3)用于控制和确定处理器的操作模式以及当前执行任务的特性。) 从上表可见,80386有四个32位的控制寄存器,分别命名位CR0、CR1、CR2和CR3。但CR1被保留,供今后开发的处理器使用,在 80386中不能使用CR1,否则会引起无效指令操作异常。CR0包括指示处理器工作方式的控制位,包含启用和禁止分页管理机制的控制位,包含控制浮点协处理器操作的控制位。CR2及CR3由分页管理机制使用。CR0中的位5—位30及CR3中的位0至位11是保留位,这些
2011-05-19 17:18:00
1109
转载 Windows内存管理
本文主要内容:1.基本概念:物理内存、虚拟内存;物理地址、虚拟地址、逻辑地址;页目录,页表2.Windows内存管理3.CPU段式内存管理4.CPU页式内存管理一、基本概念1. 两个内存概念物理内存:人尽皆知,就是插在主板上的内存条。他是固定的,内存条的容量多大,物理内存就有多大(集成显卡系统除外)。但是如果程序运行很多或者程序本身很大的话,就会导致大量的物理内存占用,甚至导致物理内存消耗殆尽。虚拟内存:简明的说,虚拟内存就是在硬盘上划分一块页面文件,充当内存。当程序在运行时,有一部分资源还没有用上或者同时
2011-05-19 17:07:00
1369
转载 Windows 消息优先级
<br />也许题目有些夸张,但是Windows消息方面确实存在一些不去探究就摸不着头脑的事情,这种问题不是明显错误,不会抛出异常,但却是最棘手的问题,给调试带来很大麻烦,所以我将实际遇到的问题整理如下,以供参考。<br /> <br />一、Windows 消息以及消息处理算法<br />Windows以消息驱动的方式,使得线程能够通过处理消息来响应外界。Windows 为每个需要接受消息和处理消息的线程建立消息队列(包括发送消息队列,登记消息队列,输入消息队列,响应消息队列),其中发送消息队列保存其他线
2011-05-06 10:43:00
8379
转载 字符编码格式小结(ASCII/Unicode/UTF-8)
1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。ASCII码一共规定了128个字符的编码,比如空格“SPA
2011-05-03 21:26:00
981
转载 更改MFC对话框dialog默认的窗口类名classname
<br />Windows操作系统中有一个概念——窗口类。窗口类是抽象的,它可以有很多窗口实例,即HWND/CWnd。在一个程序中,你可以定制并注册一个窗口类,然后用它创建窗口,也可以直接用已经注册的窗口类创建我们的窗口。<br />为了减轻我们的编程负担,也为了隐藏具体的实现,MFC已经为我们定制并注册了很多窗口类,我们可以直接使用它们。比如,对话框的窗口类为“#32770”,按钮的窗口类为“Button”,列表框的窗口类为“ListBox”……等等。<br />很多时候,我们需要用到FindWindow
2011-05-01 18:27:00
9333
转载 ring0下cr0的作用
<br />对于不可写的内存,如果在没打开内存保护模式下会BSOD,肯定会死的很惨,哈哈。下面就讲解下如何解决改问题:<br />为了安全起见,Windows XP及其以后的系统将一些重要的内存页设置为只读属性,这样就算有权力访问该表也不能随意对其修改,例如SSDT、IDT等。但这种方法很容易被绕过,我们只要将这些部分修改为可写属性就可以了,不过当我们的事情做完后记得把它们恢复为只读属性,不然会造成一些很难预料到的后果。<br />cr0是系统内的控制寄存器之一。控制寄存器是一些特殊的寄存器,它们可以控制C
2011-04-29 11:18:00
2649
转载 __stdcall,__cdecl,_cdecl,_stdcall,。__fastcall,_fastcall 区别简
1.今天写线程函数时,发现msdn中对ThreadProc的定义有要求:DWORD WINAPI ThreadProc(LPVOID lpParameter);不解为什么要用WINAPI宏定义,查了后发现下面的定义。于是乎需要区别__stdcall和__cdecl两者的区别; #define CALLBACK __stdcall#define WINAPI __stdcall#define WINAPIV __cdecl#define APIENTRY WINAPI#define APIPRIVATE __
2011-03-22 16:06:00
524
原创 多线程与多进程
<br /> 关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。<br /> 经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有最好,只有更好。根据实际情况来判断,哪个更加合适就是哪个好。<br /> 我们按照多个不同的维度,来看看多线程和多进程的
2011-03-19 22:01:00
430
原创 内存分区
内存分区(stack/heap/global&static/free/const)五大内存分区 <br />在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 <br />栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 <br />堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自
2010-12-08 17:43:00
417
原创 callback回调函数的理解
<br />回调函数概念:<br /><br /> 简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。<br /> <br /> 模块A有一个函数foo,它向模块B传递foo的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的foo的地址调用foo,通知A发生了什么事情,让A作出相应反应。 那么我们就把foo称为回调函数。<br /> <br />
2010-11-10 17:13:00
678
原创 static_cast、dynamic_cast、reinterpret_cast、和const_cast
<br />关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。<br /><br />static_cast<br /><br />用法:static_cast < type
2010-11-09 22:04:00
518
原创 C运行时库(C Run-Time Libraries /MD/ML/MT)
运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的。C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于新观念。所以这个时期的C运行时库都是单线程的。 随着操作系统多线程技术的发展,最初的C运行时库无法满足程序的需求,出现了严重的问题。C运行时库使用了多个全局变量(例如errno)和静态变量,这可能在多线程程序中引起冲突。假设两个线程都同时设置errno,其结果是后设置的errno会将先前的覆盖,用户得不
2010-11-09 14:57:00
902
转载 【开源工程】MediaInfo
<br />MediaInfo <br /> <br />一、简介<br />MediaInfo 用来分析视频和音频文件的编码和内容信息。<br />MediaInfo可以获得多媒体文件的哪些信息?<br />内容信息:标题,作者,专辑名,音轨号,日期,总时间……<br />视频:编码器,长宽比,帧频率,比特率…… <br />音频:编码器,采样率,声道数,语言,比特率…… <br />文本:语言和字幕 <br />段落:段落数,列表 <br /> <br />MediaInfo支持哪些文件格式?<
2010-10-28 21:13:00
853
原创 有关CComPtr&CComQIPtr,CComBSTR,CComVariant,CAutoPtr的设计思想的分析
<br />这三种类型的封装类都对其封装类型进行包裹,尤其是提供分配内存以及释放内存。在设计思想上不同的是:<br />CComPtr<T>&CComQIPtr<T>:用于维护COM的接口,<br />l 对于构造函数和赋值等于,<br />n 无论传入T还是CComPtr<T>,都直接或间接AddRef(相当郁复制)并不是owner相应的T。也就是说通过构造函数或赋值等于传入的T还是由外部来owner释放。<br />不addRef直接owner T的办法只有两个:<br />l 使用Attach,
2010-10-28 15:03:00
914
原创 extern用法详解(转)
1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 另外,extern也可用来进行链接指定。2 问题:extern 变量 在一个源文件里定义了一个数组:char a[6]; 在另外一个文件里用下列语句进行了声明:extern char *a; 请问,这样可以吗? 答案与分析: 1)、不可以
2009-11-09 01:19:00
353
转载 65个源代码网站
1.51源码:http://www.51aspx.com/2.源码之家:http://www.codejia.com/3.源码网:http://www.codepub.com/4.虾客源码:http://www.xkxz.com/5.源码开发网:http://www.codedn.com/6.洪越源代码:http://www.softhy.net/7.锋网源码:http://www.fwvv.n
2009-11-08 22:03:00
1384
转载 软件开发经验总结——读源代码的艺术
读取源代码是每一个开发人员成长的必经之路,一份优秀的源代码,是作者多年开发技术的心血结晶,研究一份优秀的源代码,总是能够让你的技术得到一定程度的提升。然后,读别人的源代码并不是拿着代码在那里瞎看,而是要充分了解作者的编程思路,了解代码的优点和缺点,在了解作者思路的基础上,自己尝试写出比该代码更优秀的代码,才能达到“通透”的境界。如果在读取源代码时能够遵守以下准则,那么效果就会更好。准则1
2009-09-13 19:02:00
556
转载 软件开发经验总结——解读高速读书之秘
计算机知识更新得飞快,作为一个软件开发人员,必须即时更新自己的知识结构,否则,将会被社会所淘汰,记得以前读书的时候,只会写HTML网页的开发人员都可以很轻松得拿10K以上的工资,时过境迁,如今,如果一个开发人员只会编写HTML,那么他可能连工作都找不到。在知识更新换代如此之快的今天,如何高速学习成为了我们软件开发人员一项艰巨的任务,然而苦中也有甜,当你看过几百本技术类书籍后,你会深刻感受到自己的进
2009-09-13 19:01:00
590
转载 软件开发经验总结——客观地认识程序员心中的恐惧
经常听到身边有很多搞开发的朋友说,“哎,程序员不好混,等到30岁后就要没有什么公司要了”、“计算机技术更新得太快了,过了30岁如果我的学习能力下降了,就跟不上了,到时候该怎么办”、“我的那些同学刚出来做其他行业每个月拿1000元,现在都每个月上万了,房子和车子都有了”、“如果有机会,我一定要转行”,”做技术在外国可以,但在中国行不通,国情不允许“,整天发这些牢骚的情况在我身边大有人在,尤其是一些入
2009-09-13 18:58:00
766
原创 超强TS流TSPlayer网络播放器,能解复用mpeg2、h.264码流、可播放256套节目
TSPlayer是一款DVB-TS流多画面播放器。1. 默认全屏,默认连接UDP多播网络。2. F5整个画面全屏,鼠标右键整个画面全屏,双击单个画面全屏。3. 可动态改变画面个数。4. 两种全屏都可ESC键退出。5. 可接收UDP多播(MultiCast)和单播(UniCast)网络,也可打开本地文件。6. 支持 "mpeg2和H.264" DVB-TS流。7. 当接收UDP多播(MultiCas
2009-08-12 20:43:00
17639
5
原创 CFile转FILE*
我们每个人编写程序时,都会或多或少的被一些小问题所困扰。这些问题有时就像是谜语,答案也许很简单,但解决的过程却像猜谜一样花时间。我的笨办法是日积月累,下面我介绍CFile如何转FILE*,从问题场景,方法和具体代码等方面写起,希望对大家能有所帮助。 比如原先有一个程序,其中的文件操作都是用CFile完成的,假定就操作一个文件a.dat,初始化时就用CFile::Open打开了文件,
2009-03-09 22:49:00
2975
原创 头文件和源文件的关系
一、源文件如何根据#include来关联头文件1,系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找。 #include 2,用户自定义的文件用双引号括起来,编译器首先会在用户目录下查找,然后在到C++安装目录(比如VC中可以指定和修改库文件查找路径,Unix和Linux中可以通过环境变量来设定)中查找,最后在系统文件中查找。 #include “xxx.h” 二、头文件如何来
2009-03-07 15:17:00
1337
原创 C++编译器及IDE(Dev_C++、WxDev_C++、VC等)
Dev-C++本软件就不用说了,这是pfan论坛上的首选IDE环境;他默认安装minGW作为编译器——就是windows化了的GCC编译器。版本应该是3.4;由于其编辑器使用简单,而内核gcc3.4对c99和c++2003的支持度都比较高,所以,这个软件比较适合标准C/C++初学者!除了支持外部库,Dev-C++还支持自己的开发包,你可以从升级“包”这个功能上获得许多有用的东西;你可以在http:
2009-03-07 15:16:00
3829
原创 VC++6.0编译器详解
大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。我们习惯于这样一种“模式”:建立一个项目,然后写代码,然后编译,反反复复调试。但是,所谓:“公欲善其事,必先利其器”。如果我们精于VC开发环境,我们是不是能够做得更加游刃有余呢? 闲话少
2009-03-07 15:15:00
1181
转载 C和C++混合编程(__cplusplus 与 external "c" 的使用)
第一种理解比如说你用C++开发了一个DLL库,为了能够让C语言也能够调用你的DLL输出(Export)的函数,你需要用extern "C"来强制编译器不要修改你的函数名。通常,在C语言的头文件中经常可以看到类似下面这种形式的代码: #ifdef __cplusplus extern "C" { #endif /**** some declaration or so ****
2009-03-07 14:45:00
8925
2
editplus 3.5 破解版
2013-01-13
走出软件作坊 doc 下载
2009-08-27
基于mean-shift 算法的人脸实时跟踪方法
2009-08-27
PSI Parser filter
2009-08-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人