10 2014 档案
深度解析VC中的消息传递机制
摘要:摘要:Windows编程和Dos编程,一个很大的区别就是,Windows编程是事件驱动,消息传递的。所以,要学好Windows编程,必须对消息机制有一个清楚的认识,本文希望能够对消息的传递做一个全面的分析。一、什么是消息?消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉。一个消...
阅读全文
VC OnCtlColor函数来修改控件背景颜色
摘要:CWnd::OnCtlColor afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor ); 返回值:OnCtlColor必须返回一个刷子句柄,该刷子将被用于画出控件的背景。 参数:pDC 包含了子窗口的显示设备环...
阅读全文
C++ 无边框的拖动窗口代码
摘要:按下鼠标时,记录下鼠标在窗体上的坐标, 同时用一个BOOL变量记录下鼠标左键按下的状态弹起左键,则记录状态的布尔变量为FALSE.处理鼠标移动事件,如果左键同时按下,则为鼠标拖动窗体运动,设置窗体新的左上角坐标。view plaincopy to clipboardprint?·········10...
阅读全文
vc++图像显示
摘要:显示资源中的图片 (1)从资源中装入位图 ● 定义位图对象数据成员CBitmap m_Bitmap; ● 调用CBitmap成员函数LoadBitmap(),如m_Bitmap.LoadBitmap(IDB_BITMAP1); ● 传入LoadBitmap的参数是位图在图形编辑器中生成或从位图文件中...
阅读全文
win32 API中GetSystemMetrics函数
摘要:1、SM_ARRANGE:用于说明系统如何安排最小化窗口,根据显示器的不同系统数据可能有所不同。其包含一个起始位置和方向。关于在程序中怎么使用我还没有见个这样的代码。起始位置可为下列值之一:ARW_BOTTOMLEFT:开始在左下角的屏幕(默认值)。ARW_BOTTOMRIGHT:开始在右下角的屏幕...
阅读全文
命令消息传递
摘要:OnCmdMsg是虚拟函数,CFrameWnd覆盖了该函数,当前对象(this所指)是MFC单文档的边框窗口对象。故CFrameWnd的 OnCmdMsg被调用。CFrameWnd::OnCmdMsg在MFC消息发送中占有非常重要的地位,MFC对该函数的缺省实现确定了MFC的标准命 令发送路径: 送...
阅读全文
深入解析MFC -- 句柄与对象的关系
摘要:深入解析MFC--句柄与对象的关系在Windows体系中,很多对 象都是以句柄的形式展示给开发人员的。比如窗口句柄(HWND),绘图设备(HDC)等等。然后大部分的API函数则围绕这些句柄做文章。比如 ShowWindow,SetWindowText,TextOut等等。这些API函数的第一个参数通...
阅读全文
Windows对象、句柄与MFC对象
摘要:windowsmfc编程c目录(?)[-]Windows对象句柄与MFC对象windows对象句柄mfc对象杂谈Windows对象、句柄与MFC对象(2009-04-28 22:11:34)转载标签:windows对象句柄mfc对象杂谈分类:MFC以及Windows编程 Windows对象是以句柄...
阅读全文
兼容位图
摘要:我对兼容位图的理解是:它是为解决绘图统一性而建立的一种机制,和位深无关,你在32位的程序里BITBLT()8位的图不也能行吗?所谓的绘图统一性是这样的。假设在一个界面有多个贴图,如果你不用兼容位图的话,那么你就要贴多次,比如有3幅图,你要贴3次,有5幅图你就要贴5次。如果你仅仅只想画一幅话的话,这也...
阅读全文
DeleteDC ReleaseDC DeleteObject之间的区别
摘要:DeleteDC该函数删除指定的设备上下文环境(DC)。原型:BOOL DeleteDC(HDChdc);参数:hdc:设备上下文环境的句柄。返回值: 成功,返回非零值;失败,返回零。调用GetLastError获取扩展错误信息。说明: 如果一个设备上下文环境的句柄是通过调用GetDC函数得到的,那...
阅读全文
屏幕保存为位图
摘要:可分为两个步骤:一将屏幕保存为位图句柄HBITMAPCopyScreenToBitmap(LPRECTlpRect){HDChScrDC,hMemDC;HBITMAPhBitmap,hOldBitmap;intnX1,nX2,nY1,nY2;intnWidth,nHeight;if(IsRectEm...
阅读全文
SelectObject()函数详解
摘要:SelectObject 把一个对象(位图、画笔、画刷等)选入指定的设备描述表。新的对象代替同一类型的老对象。 HGDIOBJ SelectObject(HDC hdc, // handle to DCHGDIOBJ hgdiobj // handle to object);参数 hdc设备描述表句...
阅读全文
BitBlt介绍
摘要:设备上下文绘图有很多种方法。例如通过创建位图画刷,利用其填充一个区域来实现图像的绘制。此外,还可以使用CDC类的位图函数来输出位图到设备上下文中。BitBlt 用于从原设备中复制位图到目标设备,语法格式如下:BOOLBitBlt(int x,int y,int nWidth,int nHeight,...
阅读全文
SetCapture到底是什么?
摘要:函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。 函数原型:HWND SetCapture(H...
阅读全文
SetROP2
摘要:一个Windows API SetROP2(int nDrawMode)的使用该函数的主要的作用是根据nDrawMode设置的方式重新设定绘图的方式,下面就不同的nDrawMode值具体解释绘图模式是如何改变的。首先就nDrawMode的取值有以下的情况:R2_BLACK Pixel is alwa...
阅读全文
深刻理解C#中资源释放
摘要:今天我的一个朋友看到我写的那篇《C#中用AJAX验证用户登录》时,给我指出了点小毛 病。就是在用户登录时,如果用户登录失败,在下面这段代码中,都会new出来一个User对象,如果连续登录失败多次,就会生成多个User对象,而它们 在登录失败后已经无用了,依然占据着内存,就算是C#有垃圾回收机制,但不...
阅读全文
你是高级程序员?那就来挑战一下!
摘要:基础题:传入某个属性的set方法的隐含参数的名称是什么?value,它的类型和属性所声名的类型相同。 如何在C#中实现继承?在类名后加上一个冒号,再加上基类的名称。 C#支持多重继承么?不支持。可以用接口来实现。 被protected修饰的属性/方法在何处可以访问?在继承或间...
阅读全文
The Truth About GCHandles
摘要:I've heard several people asking why GCHandle doesn't implement IDisposable, considering it wraps an unmanaged resource (a handle) and needs to be exp...
阅读全文
VC/MFC的HDC,CDC,CWindowDC,CClientDC,CPaintDC详解:
摘要:VC/MFC的HDC,CDC,CWindowDC,CClientDC,CPaintDC详解:首先说一下什么是DC(设备描述表)解:Windows应用程序通过为指定设备(屏幕,打印机等)创建一个设备描述表(Device Context, DC)在DC表示的逻辑意义的“画布”上进行图形的绘制。DC是一种...
阅读全文
MFC——4个基本类中的成员函数介绍
摘要:09121852杜军机械设计及理论1.CMainFrameActivateFrame使框架对用户可视并可用CalcWindowRect每当主框架窗口的客户区尺寸发生变化或控制条的位置发生变化,需要重新排列客户区时,调用该函数Create调用以构造和初始化一个与CFrameWnd对象有关的Window...
阅读全文
Invalidate()这个函数有什么用?
摘要:c++中的这个函数,一会是刷新窗口的作用,一会是使区域无效。我搞不懂这个函数究竟是有什么作用?谢谢赐教。void Invalidate( BOOL bErase = TRUE ); 该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口...
阅读全文
c# sleep 例子-线程挂起
摘要:using System; using System.Threading; public class arr { public static void Main() { ...
阅读全文
C/C++ Sleep(0)
摘要:Sleep(0) 的意义是放弃当前线程执行的时间片,把自身放到等待队列之中。这时其它的线程就会得到时间片进行程序的程序。Sleep(0)能够降低当前线程的执行速 度,比如:现在系统中有100个线程(先假设是线程吧)在执行不同的任务,并且它们执行的优先级都是一样的,并且它们每一次分配的时间片的长度都是...
阅读全文
如何让IntPtr指向一块内存,以及托管内存与非托管内存的相互转化
摘要:IntPtridp=IntPtr.Zero;StringBuilderidata=newStringBuilder("000000");stringidata="000000";我这样建立的2个idata字符串,如何让idp指向他我指向他的目的是为了传递给dll的某个函数,他需要传指针还有我定义了一...
阅读全文
C#内存管理之托管堆与非托管堆( reprint )
摘要:在 .NET Framework 中,内存中的资源(即所有二进制信息的集合)分为“托管资源”和“非托管资源”。托管资源必须接受 .NET Framework 的 CLR (通用语言运行时)的管理(诸如内存类型安全性检查),而非托管资源则不必接受 .NET Framework 的 CLR 管理。(了解...
阅读全文
winform中的ComboBox同时设置text和value的方法
摘要:winform中的ComboBox不能像webform中的dropdownlist控件一样,在属性中可以同时设置text和value值,可以通过编写一个新类来实现这个功能。1、首先在form1中添加一个新类ComboBoxItem:public class ComboBoxItem{private ...
阅读全文
C#String.Split (string[], StringSplitOptions)中的StringSplitOptions是什么意思,看了msdn还是不懂?
摘要:MSDN上面这样子写的:[ComVisibleAttribute(false)]public string[] Split(string[] separator,StringSplitOptions options)参数separator 类型:System.String[] ...
阅读全文
c# 指针unsafe/fixed -- 【一】
摘要:指针C#unsafefixed目录(?)[-]概述unsafefixed 1.1概述unsafe关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的。可以在属性、方法、类的声明中使用unsafe修饰符,此时类型或成员的整个正文范围均被视为不安全上下文。fixed语句用于禁止垃圾回收器重定位可...
阅读全文
C#结构体指针的定义及使用详解(intptr的用法)
摘要:在解析C#结构体指针前,必须知道C#结构体是如何定义的。在c#中同样定义该结构体。C#结构体指针之C#结构体的定义:[StructLayout(LayoutKind.Sequential)] publicstructVGAStat { publicintChannelNum;//通道数量 [Mars...
阅读全文
c#中Marshal.Copy()方法的使用
摘要:c#中Marshal.Copy方法的使用Marshal.copy()方法用来在托管对象(数组)和非托管对象(IntPtr)之间进行内容的复制函数有很多重载,如下所示:Copy(array[]()[], Int32, IntPtr, Int32) 将一维的托管 8 位无符号整数数组中的数据复制到非托管...
阅读全文
MFC下的各种字符串类型和相互转换
摘要:MFC下的常用字符串数据类型表示的含义:L:Long 长 P:Point 指针 C:Const 常量 W:Wchar_t 宽字符 T:TCHAR STR:String 字符串在看看MFC下各种数据类型的定义: 1 typedef char *LPSTR; 2 typedef...
阅读全文
LRESULT与wParam和lParam的问题
摘要:在微软vc提供的头文件中有定义在winnt.h中typedef long LONG;在windef.h中typedef LONG LRESULT;所以LRESULT就是long,也就是长整形之所以取名类LRESULT,L=>longresult表示结果,说明这个函数的返回值是某个结果仅此而已WPAR...
阅读全文
C#.NET 消息机制
摘要:一、消息概述 众人周知,window系统是一个消息驱动的系统, windows操作系统本身有自己的消息队列,消息循环,它捕捉键盘,鼠标的动作生成消息,并将这个消息传给应用程序的消息队列。 余下的工作有应用程序处理消息, windows 消息机制在这儿就不再讲述,我们重点讲述应用程序的消息机制。 大家...
阅读全文
Windows消息机制要点
摘要:1. 窗口过程 每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle),消息ID(Message ID),和两个消息参数(wParam, lParam), 当窗口收到消息时系统就会调用此窗口过程来处理消息。(所以叫回调函数) 2 消...
阅读全文
Windows 消息机制详解
摘要:总的来说:MSG包括:窗口句柄,指示MSG发送的目的窗口消息标识lPARAM、wParam发送时间发送时的鼠标位置关于消息队列:Windows系统有一个系统消息队列每个线程都有一个自己的消 息队列(由于发送消息MSG需 要提供一个窗口HWnd,而基 本有窗口的线程,都是UI线 程),因此基本上如果...
阅读全文
gb2312和UTF-8的区别
摘要:GB2312编码大约包含6000多汉字(不包括特殊字符),编码范围为第一位b0-f7,第二位编码范围为a1-fe(第一位为cf时,第二位为a1-d3),计算一下汉字个数为6762个汉字。当然还有其他的字符。包括控制键和其他字符大约7573个字符编码gbk编码是对gb2312编码的扩充,容纳的汉字更多...
阅读全文
DefWndProc/WndProc/IMessageFilter的区别
摘要:谈到Winform的消息处理,多数时候是通过事件处理程序进行的,但当没有对应的事件时通常的做法是声明DefWndProc或者WndProc或者IMessageFilter,经常在网上看见有文章将三者并列,那么它们有什么区别呢?DefWndProc和WndProc都是继承自Control类中的虚方法,...
阅读全文
结合windows消息系统理解C#中WndProc函数和DefWndProc函数
摘要:Windows消息系统由3部分组成: 1.消息队列。Windows应用程序的消息是由Windows统一在一个消息队列中管理的。 2.消息循环。应用程序从Windows消息队列中获得自己的消息,并将其分配给窗体函数进行处理。 3.窗口过程。负责处理接收到的消息,每个窗口都有对应的窗口过程,负责截...
阅读全文
关于dll的路径问题
摘要:最近在做一个sdk二次开发的项目,具体是将一个C++开发的SDk用C#将它的API接口全部封装一遍,然后再做一个demo就好了好不容易封装完了,在使用的时候出了问题。原来SDK中的dll老是加载不到。不是路径的问题,因为所有可能的路径我都试过了。问题是,C#引用的C++的那个dll又引用了一个dll...
阅读全文
C#dll中无法找到c++dll中函数的入口
摘要:刚试验了一下,老是c#中的dll无法找到c++dll中的函数的入口;暂时发现有俩个原因1,没有用extern “C” _declspec(dllexport),导致c#无法找到入口。2,在c++中的函数在一个namespace下,所以c#没有找到他另外,据说当C#的函数和C++的函数的参数内存没有对...
阅读全文
C#委托及事件处理机制浅析
摘要:事件可以理解为某个对象所发出的消息,以通知特定动作(行为)的发生或状态的改变。行为的发生可能是来自用户交互,如鼠标点击;也可能源自其它的程序逻辑。在这里,触发事件的对象被称为事件(消息)发出者(sender),捕获和响应事件的对象被称作事件接收者。在事件(消息)通讯中,负责事件发起的类对象并不知道哪...
阅读全文
lib和dll的例子
摘要:.dll和.lib的区别 lib是静态库,dll一般是动态链接库(也有可能是别的)比如要编译个exe,lib在编译的时候就会被编译到exe里,作为程序的一部分而dll是不被编译进去,是运行的时候才调入的(可能是exe刚运行就调入,也可能运行了一半才调入)用法,lib需要个.lib文件和一个.h文件,...
阅读全文
C#中自定义消息,与MFc对比
摘要:在C#中采用的是事件驱动方式,但在我们使用的过程中,有时候通过调用系统原有的消息,处理起来会比较简单一些,特别是在处理与DLL文件的交互时,的确是非常的方便。 在C#中使用自定义消息 在C#中使用自定义消息非常简单,只需要下面几个简单的步骤就可以了: 1、 定义消息 定义...
阅读全文
MFC消息响应机制 q
摘要:MFC消息响应机制分析 1 引言微软公司提供的MFC基本类库(Microsoft Foundation Classes),是进行可视化编程时使用最为流行的一个类库。MFC封装了大部分Windows API函数和Windows控件,使得程序的开发变得简单,极大的缩短了程序的开发周期。MFC独创的Doc...
阅读全文
MFC中消息响应机制
摘要:由于视类窗口始终覆盖在框架类窗口之上,因此所有操作,包括鼠标单击、鼠标移动等操作都只能由视类窗口捕获。一个MFC消息响应函数在程序中有三处相关信息:函数原型、函数实现和以及用来关联消息和消息响应函数的宏。(1)在消息响应函数的原型代码中,函数声明的前部有一个afx_msg限定符,也是一个宏,该宏表明...
阅读全文
C# 消息处理机制及自定义过滤方式
摘要:一、消息概述 Windows 下应用程序的执行是通过消息驱动的。消息是整个应用程序的工作引擎,我们需要理解掌握我们使用的编程语言是如何封装消息的原理。 1. 什么是消息(Message) 消息就是通知和命令。在.NET框架类库中的System.Windows.Forms命名空间中微软采...
阅读全文
c++中__declspec用法总结
摘要:“__declspec”是Microsoft c++中专用的关键字,它配合着一些属性可以对标准C++进行扩充。这些属性有:align、allocate、deprecated、 dllexport、dllimport、 naked、noinline、noreturn、nothrow、novtable、...
阅读全文
C++中使用接口
摘要:面向对象的语言诸如JAVA提供了Interface来实现接口,但C++却没有这样一个东西,尽管C++ 通过纯虚基类实现接口,譬如COM的C++实现就是通过纯虚基类实现的(当然MFC的COM实现用了嵌套类),但我们更愿意看到一个诸如 Interface的东西。下面就介绍一种解决办法。首先我们需要一些宏...
阅读全文
C#中的DllImport
摘要:大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比如 Windows中的一些功能,C++中已经编写好的一些方法)要重新编写代码,C#有没有方法可以直接都用这些原本已经存在的功能呢?答案是肯定的,大家 可以通过C#中的DllImport直接调用这些功能。 DllImport所...
阅读全文
StructLayout特性
摘要:StructLayout特性公共语言运行库利用StructLayoutAttribute控制类或结构的数据字段在托管内存中的物理布局,即类或结构需要按某种方式排列。如果要将类传递给需要指定布局的非托管代码,则显式控制类布局是重要的。它的构造函数中用 LayoutKind值初始化StructLayou...
阅读全文
c++中指针类型在c#中怎么对应?
摘要:int[]a=newint[5];//取a[3]的地址IntPtraddr=System.Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement(a,3)
阅读全文
c++/java/c# 几种编程语言的指针、引用比较
摘要:前一段时间,我在 cnblogs 别人的博客中,谈到:java 中的引用/指针,与 c++/C# 中的引用/指针不是一个概念.Java 引用,相当于 c++ 指针(fun3)。Java 引用可以赋值 null, 而 c++ 引用 (见 fun2) 不能赋值 null,c++ 指针可以赋值 null(...
阅读全文
如何在C#中模拟C++的联合(Union)?[C#, C++] How To Simulate C++ Union In C#?
摘要:1 什么是联合?联合(Union)是一种特殊的类,一个联合中的数据成员在内存中的存储是互相重叠的。每个数据成员都在相同的内存地址开始。分配给联合的存储区数量是“要包含它最大的数据成员”所需的内存数。同一时刻只有一个成员可以被赋给一个值。下面我们来看看C++中如何表达联合://Code#01union...
阅读全文
C# 定义常量 两种实现方法
摘要:在C#中定义常量的方式有两种,一种叫做静态常量(Compile-time constant),另一种叫做动态常量(Runtime constant)在C#中定义常量的方式有两种,一种叫做静态常量(Compile-time constant),另一种叫做动态常量(Runtime constant)。前...
阅读全文
C#中DllImport用法和路径问题
摘要:DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息。 DllImport属性应用于方法,要求最少要提供包含入口点的dll的名称。 DllImport的定义如下:[AttributeUsage(At...
阅读全文
C#: 方法的默认参数
摘要:大家都知道在C++中,我们可以为方法的参数指定一个默认值,像这样:void foo(int i = 100);当我们以这种形式调用方法的时候: foo(); 实际上参数i被赋于了默认值,所以相当于调用了foo(100);然而在C#中是不支持参数的默认值的,那么如果我们要用到类似的功能应该怎么实现呢?...
阅读全文
枚举
摘要:枚举类型声明为一组相关的符号常数定义了一个类型名称。枚举用于“多项选择”场合,就是程序运行时从编译时已经设定的固定数目的“选择”中做出决定。 枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。例如,假设您必须定义一个变量,该变量的值表示一周中的一天。该变量只能存储七个...
阅读全文
静态类的特点及用途
摘要:1:静态类只用于包含静态成员的类型,不能被实例化,我们可以直接使用它的属性与方法,静态类最大的特点就是共享。静态类的特性是防止继承,防止外部来NEW。它相当于一个sealed abstract类。2:静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象标识...
阅读全文
C#中的IntPtr类型
摘要:本文转自:http://zhidao.baidu.com/question/22825956.html问:c#中无法将类型“int”隐式转换为“System.IntPtr”这个是我引用了一个api函数时出现的问题,我在声明中把intptr换成了int还是不可以,这是为什么呢?要如何处理呢?答:您好,...
阅读全文
C#与C++对应的类型
摘要://c++:HANDLE(void*)----c#:System.IntPtr//c++:Byte(unsignedchar)----c#:System.Byte//c++:SHORT(short)----c#:System.Int16//c++:WORD(unsignedshort)---c#:S...
阅读全文