12 ljfth

尚未进行身份认证

暂无相关描述

等级
TA的排名 7w+

WM_GETMINMAXINFO 设置窗口最大最小尺寸(无边框窗口不遮挡任务栏)

以wtl为例,响应WM_GETMINMAXINFO消息:    LRESULTOnGetMinMaxInfo(UINT/*uMsg*/,WPARAM/*wParam*/,LPARAMlParam,BOOL&/*bHandled*/){MINMAXINFO* p=(MINMAXINFO*)lParam;p->ptMinTrackSize.x

2011-11-10 13:41:43

加了 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

线程安全”是一个什么概念?

以前常听高手告诫MFC对象不要跨线程使用,因为MFC不是线程安全的。比如CWnd对象不要跨线程使用,可以用窗口句柄(HWND)代替。CSocket/CAsyncSocket对象不要跨线程使用,用SOCKET句柄代替.那么到底什么是线程安全呢?什么时候需要考虑?如果程序涉及到多线程

2011-07-18 16:10:49

WM_NCHITTEST (处理无边框窗口的缩放)

MSDN对它的解释是:The WM_NCHITTEST messageissenttoawindowwhenthecursormoves,orwhenamousebuttonispressedorreleased.Ifthemouseisnotcaptured,themessageissenttothewindowbene

2011-07-13 15:27:30

活动窗口(Active),焦点窗口(Focus),IsDialogMessage,

任何一个时候,我们的Windows桌面上总有一个最前台的窗口,其实说简单的,就是标题栏变成深蓝色的那个窗口,仅此一个,这个窗口就是前景窗口(ForegroundWindow),其他窗口就是后台窗口(BackgroundWindow)。那创建前景窗口的线程就是前景线程(Fore

2011-07-12 22:29:25

OpCode教程

<br/>什么是OpCode?<br/>不管计算机技术的发展如何日新月异,其最基本的东西是不会突然改变的。OpCode就是这其中的一样东西——因此,BillGates的这句话用在这里并不太合适。<br/>在开始回答什么是OpCode之前,请让我先来提几个小问题。计算机只认识0和1吗?如果上面的回答是“是”,那么我们平时写的程序源代码是0和1吗?如果上面的回答是“不是”,那么计算机是怎么“知道”我们的程序的意思的?<br/>按顺序作答,依次是:是不是???<br/>最后一个问题的答案是……?我们来

2011-05-19 18:07:00

控制寄存器(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

Windows内存管理

本文主要内容:1.基本概念:物理内存、虚拟内存;物理地址、虚拟地址、逻辑地址;页目录,页表2.Windows内存管理3.CPU段式内存管理4.CPU页式内存管理一、基本概念1.两个内存概念物理内存:人尽皆知,就是插在主板上的内存条。他是固定的,内存条的容量多大,物理内存就有多大(集成显卡系统除外)。但是如果程序运行很多或者程序本身很大的话,就会导致大量的物理内存占用,甚至导致物理内存消耗殆尽。虚拟内存:简明的说,虚拟内存就是在硬盘上划分一块页面文件,充当内存。当程序在运行时,有一部分资源还没有用上或者同时

2011-05-19 17:07:00

Windows 消息优先级

<br/>也许题目有些夸张,但是Windows消息方面确实存在一些不去探究就摸不着头脑的事情,这种问题不是明显错误,不会抛出异常,但却是最棘手的问题,给调试带来很大麻烦,所以我将实际遇到的问题整理如下,以供参考。<br/> <br/>一、Windows消息以及消息处理算法<br/>Windows以消息驱动的方式,使得线程能够通过处理消息来响应外界。Windows为每个需要接受消息和处理消息的线程建立消息队列(包括发送消息队列,登记消息队列,输入消息队列,响应消息队列),其中发送消息队列保存其他线

2011-05-06 10:43:00

字符编码格式小结(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

更改MFC对话框dialog默认的窗口类名classname

<br/>Windows操作系统中有一个概念——窗口类。窗口类是抽象的,它可以有很多窗口实例,即HWND/CWnd。在一个程序中,你可以定制并注册一个窗口类,然后用它创建窗口,也可以直接用已经注册的窗口类创建我们的窗口。<br/>为了减轻我们的编程负担,也为了隐藏具体的实现,MFC已经为我们定制并注册了很多窗口类,我们可以直接使用它们。比如,对话框的窗口类为“#32770”,按钮的窗口类为“Button”,列表框的窗口类为“ListBox”……等等。<br/>很多时候,我们需要用到FindWindow

2011-05-01 18:27:00

ring0下cr0的作用

<br/>对于不可写的内存,如果在没打开内存保护模式下会BSOD,肯定会死的很惨,哈哈。下面就讲解下如何解决改问题:<br/>为了安全起见,WindowsXP及其以后的系统将一些重要的内存页设置为只读属性,这样就算有权力访问该表也不能随意对其修改,例如SSDT、IDT等。但这种方法很容易被绕过,我们只要将这些部分修改为可写属性就可以了,不过当我们的事情做完后记得把它们恢复为只读属性,不然会造成一些很难预料到的后果。<br/>cr0是系统内的控制寄存器之一。控制寄存器是一些特殊的寄存器,它们可以控制C

2011-04-29 11:18:00

__stdcall,__cdecl,_cdecl,_stdcall,。__fastcall,_fastcall 区别简

1.今天写线程函数时,发现msdn中对ThreadProc的定义有要求:DWORDWINAPIThreadProc(LPVOIDlpParameter);不解为什么要用WINAPI宏定义,查了后发现下面的定义。于是乎需要区别__stdcall和__cdecl两者的区别;#defineCALLBACK__stdcall#defineWINAPI__stdcall#defineWINAPIV__cdecl#defineAPIENTRYWINAPI#defineAPIPRIVATE__

2011-03-22 16:06:00

多线程与多进程

<br/>    关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。<br/>    经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有最好,只有更好。根据实际情况来判断,哪个更加合适就是哪个好。<br/>    我们按照多个不同的维度,来看看多线程和多进程的

2011-03-19 22:01:00

内存分区

内存分区(stack/heap/global&static/free/const)五大内存分区<br/>在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。<br/>栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。<br/>堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自

2010-12-08 17:43:00

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

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

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

【开源工程】MediaInfo

<br/>MediaInfo <br/> <br/>一、简介<br/>MediaInfo用来分析视频和音频文件的编码和内容信息。<br/>MediaInfo可以获得多媒体文件的哪些信息?<br/>内容信息:标题,作者,专辑名,音轨号,日期,总时间……<br/>视频:编码器,长宽比,帧频率,比特率…… <br/>音频:编码器,采样率,声道数,语言,比特率…… <br/>文本:语言和字幕 <br/>段落:段落数,列表 <br/> <br/>MediaInfo支持哪些文件格式?<

2010-10-28 21:13:00

有关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直接ownerT的办法只有两个:<br/>l 使用Attach,

2010-10-28 15:03:00

查看更多

勋章 我的勋章
    暂无奖章