摘要: 通过安装Hook过程,可以用来屏蔽消息队列中某些消息,可以与某一线程相关或者与当前桌面的所有线程相关;HHOOK SetWindowsHookEx(int idHook, //Hook的类型WH_*,如WH_MOUSE监视鼠标过程HOOKPROC lpfn, //Hook过程(固定格式):DLL中的过程或者与当前线程处于同一进程的过程HINSTANCE hMod, //DLL的句柄DWORD dwThreadId //1、为零:表示和所有安装的线程相关,hMod需要指定DLL句柄和lpfn指定DLL中的钩子过程; //2、为线程id:hMod为NULL,lpfn为同一进程内的过程;);一、下面 阅读全文
posted @ 2011-07-28 17:35 飞翔荷兰人 阅读(2812) 评论(0) 推荐(0) 编辑
摘要: 一、Windows API中的所有函数都包含在DLL中。其中有三个最重要的DLL: Kernel32.dll,它包含用于管理内存、进程和线程的各个函数; User32.dll,它包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数; GDI32.dll,它包含用于画图和显示文本的各个函数。二、静态库和动态库 静态库:函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其他模块组合起来创建最终的可执行文件(.EXE文件); 动态库: 在使用动态库的时候,往往提供两个文件:一个引入库和一 阅读全文
posted @ 2011-07-28 17:34 飞翔荷兰人 阅读(1261) 评论(0) 推荐(0) 编辑
摘要: 容器和服务器程序容器应用程序时可以嵌入或链接对象的应用程序。Word就是容器应用程序。服务器应用程序是创建对象并且当对象被双击时,可以被启动的应用程序。Excel就是服务器应用程序。ActiveX控件不能独立运行,它必须被嵌入容器应用程序中,和容器应用程序一起运行。Dispatch maps调度映射,主要是MFC提供让外部应用程序可以访问控件的属性和方法Event maps事件映射,控件向包含它的容器发送事件通知接口是外部程序和控件进行通信的协议,可以把接口看作是函数的集合,外部程序通过借口提供的方法,去访问控件的属性和方法。接口中所定义的所有函数都是纯虚函数regsvr32 ...注册控件r 阅读全文
posted @ 2011-07-28 17:33 飞翔荷兰人 阅读(2065) 评论(0) 推荐(0) 编辑
摘要: 有四种方法1.剪贴板a.创建个ClipBoard的对话框应用程序,加两EditBox和两个Button发送接收。b.具体代码:发送端代码:if(OpenClipboard()){CString str;HANDLE hClip;char *pBuf;EmptyClipboard();GetDlgItemText(IDC_EDIT_SEND,str);hClip=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);pBuf=(char*)GlobalLock(hClip);将句柄转换为指针!strcpy(pBuf,str);GlobalUnlock(hCli 阅读全文
posted @ 2011-07-28 17:32 飞翔荷兰人 阅读(574) 评论(0) 推荐(0) 编辑
摘要: 1. 事件对象事件对象同上一课中的互斥对象一样属于内核对象,它包含三个成员:使用读数,用于指明该事件是一个自动重置的还是人工重置的事件的布尔值,用于指明该事件处于已通知状态还是未通知状态的布尔值.当人工重置的事件对象得到通知时,等待该事件对象的所有纯种无变为可高度线程,而一个自动重置的事件对象得到通知时,等待该事件对象的线程中人有一个变为可高度线程.所以一般使用线程同步时使用自动重置.创建事件对象:HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes, // 安全选项,默认为NULLBOOL bManualReset, // re 阅读全文
posted @ 2011-07-28 17:31 飞翔荷兰人 阅读(2164) 评论(0) 推荐(0) 编辑
摘要: 1. 程序,进程,线程A: 程序是计算机指令的集合,它以文件的形式存储在磁盘上,而进程通常被定义为一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动.一个程序可以对应多个进程.进程是资源申请,高度和独立运行的单位,因此,它使用系统中的运行资源,而程序不能申请系统资源,不能被系统高度也不能作为独立运行的单位,因此它不占系统运行资源.进程组成:<1> 操作系统用来管理进行的内核对象 内核对象也是系统用来存放关于进程的统计信息的地方.内核对象是操作系统内部分配的一个内在块,该内存块是一种数据结构,其成员负责维护该对象的各种信息.<2> 地址空间 它包含所有 阅读全文
posted @ 2011-07-28 17:24 飞翔荷兰人 阅读(1479) 评论(0) 推荐(0) 编辑
摘要: sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字(SOCK_STREAM)。基于UDP采用的数据报套接字(SOCK_DGRAM).1.TCP流式套接字的编程步骤在使用之前须链接库函数:工程->设置->Link->输入ws2_32.lib,OK!服务器端程序:1、加载套接字库2、创建套接字(socket)。3、将套接字绑定到一个本地地址和端口上(bind)。4、将套接字设为监听模式,准备接收客户请求(listen)。5、等待客户请求到来; 阅读全文
posted @ 2011-07-28 17:23 飞翔荷兰人 阅读(490) 评论(0) 推荐(0) 编辑
摘要: 1. 常量指针与指针常量的区分char ch[5]="lisi";const char *pStr=ch;//const在*之前,表明指针指向的内容为常量,即为常量指针,但指针可指向其它变量。char * const pStr=ch;//const在*之后,表明指针的地址不能改变,即为指针常量,但指针所指向的内容是可以改变的;const char * const pStr = ch;指向常量的常量指针,指针的地址与指向的内容都不可以改变。2. 对文件读写的三种方法<1>.C语言FILE *pFile=fopen("1.txt","w 阅读全文
posted @ 2011-07-28 17:21 飞翔荷兰人 阅读(2732) 评论(0) 推荐(0) 编辑
摘要: 1. CArchive在菜单打开保存时的代码CFile file("1.txt",CFile::modeCreate | CFile::modeWrite);CArchive ar(&file,CArchive::store);int i=4;char ch='a';float f=1.3f;CString str("http://www.sunxin.org");ar<<i<<ch<<f<<str;以上是保存,打开略2. 文档-视类结构简介OnNewDocument在程序启动时被调 阅读全文
posted @ 2011-07-28 17:21 飞翔荷兰人 阅读(619) 评论(0) 推荐(0) 编辑
摘要: 1. 画图: a.创建四个菜单,为其添加消息响应; b.在View中添加m_DrawType,保存绘画类型; c.增加成员变量,m_PtOrigin,当按下鼠标左键时,保存此点; d.在OnLButtonUp中画点,线,矩形,椭圆,别忘记设置成透明画刷2. 为其添加一个设置对话框(线型和线宽) a.创建对话框,为其创建一个新类关联它; b.为其中的线宽关联成员变量; c.在View中增加一个菜单,响应新的对话框;d.添加线型选项设置,将其Group属性选中,并为单选按纽关联成员变量。在view中增加一个线型变量m_nLineStyle3 .添加一个颜色对话框 a.实例化一个CColorDial 阅读全文
posted @ 2011-07-28 17:19 飞翔荷兰人 阅读(427) 评论(0) 推荐(0) 编辑
摘要: 1. 创建4个菜单,为其添加消息响应,用成员变量保存绘画类型。添加LButtonDown和Up消息。2. 当窗口重绘时,如果想再显示原先画的数据,则需要保存数据。为此创建一个新类来记录绘画类型和两个点。class CGraph{public:CPoint m_ptOrigin;//起点CPoint m_ptEnd;//终点UINT m_nDrawType;//绘画类型CGraph();CGraph(UINT m_nDrawType,CPoint m_ptOrigin,CPoint m_ptEnd);//此为构造函数。virtual ~CGraph();};然后在void CGraphicVie 阅读全文
posted @ 2011-07-28 17:19 飞翔荷兰人 阅读(732) 评论(0) 推荐(0) 编辑
摘要: 1,修改外观和图标可以在MainFrm中进行,而修改背景和光标只能在View中进行。为什么?因为view的显示挡在了MainFrame的前面。a.在MainFrame中PreCreateWindow()中,在窗口创建之前,用重新注册窗口类的方法,比较麻烦。在PreCreateWindow()中修改也可以用简单的方法,用全局函数//cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,0,0,// LoadIcon(NULL,IDI_WARNING));在窗口创建之后,在OnCreate()中修改//SetWindowLong(m_hW 阅读全文
posted @ 2011-07-28 17:15 飞翔荷兰人 阅读(472) 评论(0) 推荐(0) 编辑
摘要: 1. Windows应用程序工作的基本流程是从用户那里得到数据,经过相应的处理之后,现把处理结果输出到屏幕,打印机或者绵输出设备。这就需要用到Windows应用程序的用户接口对话框。对话框就是一个窗口,它不公可以接收消息,而且还可以被移动和关闭,甚至可以在它的客户区中进行绘图。相当于一个窗口,在它上面能够旋转各种标准控件和扩展控件。都是由CWnd类派生来2. 对话框的类型:模态(Model)对话框和非模态(Modeless)对话框模态对话框:指当其显示时,程序会暂停执行,直到关闭这个模态对话框后,才能继续执行程序中其它任务。当一个模态对话框打开时,用户只能与该对话框进行交互,而其它用户界面对象 阅读全文
posted @ 2011-07-28 17:14 飞翔荷兰人 阅读(3498) 评论(0) 推荐(0) 编辑
摘要: 1. MFC中的顶层菜单默认为弹出菜单(Pop-up),它是不能用来作命令响应的,当取消Pop-up选项后可接受命令响应。2. 消息的分类:标准消息,命令消息,通告消息。[标准消息]:除WM_COMMAND之外,所有以WM_开头的消息。从CWnd类派生的类都可以接收到这一消息;[命令消息]:来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。在MFC中,通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。从CCmdTarget(CWnd的父类)派生的类都可以接收到这一类消息;[通告消息]:由控件产生的消息,例如,按钮的单击,列表框的选 阅读全文
posted @ 2011-07-28 17:13 飞翔荷兰人 阅读(2001) 评论(0) 推荐(0) 编辑
摘要: 1,创建插入符:void CreateSolidCaret( int nWidth, int nHeight );//创建插入符void CreateCaret( CBitmap* pBitmap );//创建位图插入符void ShowCaret( );//显示插入符void HideCaret( );//隐藏插入符static void PASCAL SetCaretPos( POINT point );//移动插入符号说明:1)创建插入符要在窗口创建完成之后,CreateSolidCaret函数创建的插入符被初始化为隐藏,所以需要调用ShowCaret()将其显示。2)使用CreateC 阅读全文
posted @ 2011-07-28 17:12 飞翔荷兰人 阅读(522) 评论(0) 推荐(0) 编辑
摘要: 1. 在单文档中view挡在MainFrame的前面。此时如果编写针对MainFrame的mouseClick事件,将不会有反应。因为MFC视类窗口是覆盖在框架窗口上的,因此框架窗口不能感到鼠标消息。因为CWnd类中含有一个窗口句柄,所以可以不必传递窗口句柄参数,直接使用成员函数MessageBox(显示的内容)。2. MFC的消息映射机制:在每个能接收和处理消息的类中,定义一个消息和消息函数对照表,即消息映射表.在消息映射表中,消息与对应的消息处理函数指针成对出现.某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态表中.当有消息需要处理时,程序只要搜索该消息静态表,查 阅读全文
posted @ 2011-07-28 17:11 飞翔荷兰人 阅读(788) 评论(0) 推荐(0) 编辑
摘要: 1、课程内容: 讲述MFC AppWizard的原理与MFC程序框架的剖析。AppWizard是一个源代码生成工具,是计算机辅助程序设计工具,WinMain在MFC程序中是如何从源程序中被隐藏的,theApp全局变量是如何被分配的,MFC框架中的几个类的作用与相互关系,MFC框架窗口是如何产生和销毁的,对窗口类的PreCreateWidow和OnCreate两个函数的着重分析,Windows窗口与C++中的CWnd类的关系 在D:\Program Files\VisualSdudio\VC\atlmfc\src\mfc 目录下可以找到appmodul.cpp文件,WinMain函数就在这里。2 阅读全文
posted @ 2011-07-28 10:33 飞翔荷兰人 阅读(1447) 评论(0) 推荐(0) 编辑

I Love Lina~