摘要: 实现功能:在弹出对话框中填写用户名和密码,按下登录按钮,如果用户名和密码均正确则进入主窗口,如果有错则弹出警告对话框。实现原理:通过上节的多窗口原理实现由登录对话框进入主窗口,而用户名和密码可以用if语句进行判断。实现过程:1.先新建Qt4 Gui Application工程,工程名为mainWidget,选用QWidget作为Base class,这样便建立了主窗口。文件列表如下:2.然后新建一个Qt Designer Form Class类,类名为loginDlg,选用Dialog without Buttons,将其加入上面的工程中。文件列表如下:3.在logindlg.ui中设计下面的 阅读全文
posted @ 2010-07-28 18:44 maxweii 阅读(638) 评论(0) 推荐(0) 编辑
摘要: 实现功能: 程序开始出现一个对话框,按下按钮后便能进入主窗口,如果直接关闭这个对话框,便不能进入主窗口,整个程序也将退出。当进入主窗口后,我们按下按钮,会弹出一个对话框,无论如何关闭这个对话框,都会回到主窗口。实现原理: 程序里我们先建立一个主工程,作为主界面,然后再建立一个对话框类,将其加入工程中,然后在程序中调用自己新建的对话框类来实现多窗口。实现过程:1.首先新建Qt4 Gui Application工程,工程名为nGui,Base class选为QWidget。建立好后工程文件列表如下图。2.新建对话框类,如下图,在新建中,选择Qt Designer Form Class。3.选择Di 阅读全文
posted @ 2010-07-28 18:43 maxweii 阅读(790) 评论(0) 推荐(0) 编辑
摘要: 1.首先到Qt的官方网站上下载Qt Creator,这里我们下载windows版的。下载地址:http://qt.nokia.com/downloads如下图我们下载:Download Qt SDK for Windows* (178Mb)下载完成后,直接安装即可,安装过程中按默认设置即可。2.运行Qt Creator,首先弹出的是欢迎界面,这里可以打开其自带的各种演示程序。3.我们用File-New菜单来新建工程。4.这里我们选择Qt4 Gui Application。5.下面输入工程名和要保存到的文件夹路径。我们这里的工程名为helloworld。6.这时软件自动添加基本的头文件,因为这 阅读全文
posted @ 2010-07-28 18:41 maxweii 阅读(396) 评论(0) 推荐(0) 编辑
摘要: 1引言 MMI(ManMachineInter-face),即人机界面,它负责和用户的交互,在必要的时候调用其它模块的功能。MMI模块在整个系统中处于最高层,主要实现人机交互的功能,即解释用户的各种命令并发消息到相应的处理模块,同时将系统接收到的各种消息或系统所处的状态以界面友好的方式反馈给用户。它由管理人机界面交互的任务实现。MMI软件利用面向对象的程序设计方法,平台采用消息循环驱动机制,实现对下层核心代码的抽象、隔离和封装,从而使得MMI软件同硬件平台和下层软件的相关性降低。在完成大型的应用软件开发过程中,便于分组分工合作。 目前,各个手机厂商正在将越来越多的注意力集中到人机界面的设计上, 阅读全文
posted @ 2010-07-21 14:33 maxweii 阅读(863) 评论(0) 推荐(0) 编辑
摘要: 破解需要的软件(点击下载):侦壳 language.exe脱壳AspackDie.exe反编译 W32Dasm黄金中文版16进制编辑器 UltraEdit.rar 在破解之前先复习一下基础知识: 一.破解的等级 初级,修改程序,用ultraedit修改exe文件,称暴力破解,简称爆破 中级,追出软件的注册码 高级,写出注册机 二.用w32dasm破解的一般步骤: 1.看软件的说明书,软件注册与不注册在功能上有什么区别,如何注册 2.运行此软件,试着输入你的姓名和任意注册码去注册,有什麽错误提示信息,将错误提示信息记下来 3.侦测有无加壳(第一课).若加壳,脱壳(第二课) 4.pw32dasmg 阅读全文
posted @ 2010-05-18 16:19 maxweii 阅读(1444) 评论(0) 推荐(0) 编辑
摘要: 看到网上经常有人问汉化方面的东西,我今天也来灌水一篇,来个汉化扫盲教程。写的不好的地方欢迎大家指正!OK,现在我们进入正题。我这里所说的汉化,是指汉化 Windows 下的 PE 文件,把其他语言界面的程序翻译为中文界面。要汉化一个软件,一般的流程是这样:一、检测软件是否加了壳。 汉化一个软件前我们首先要做的就是要看看软件是否加了壳。因为程序加了壳后,一般情况下资源也被压缩了,使用普通的汉化工具是无法汉化的。这时一般有两种办法:一种是完全脱壳后再汉化,这种方法可以汉化的比较彻底;另一种是壳太猛,不好脱,只好退而求其次,用 freeRes 这样的工具来释放一下资源,再来汉化。这种方法只能汉化标准 阅读全文
posted @ 2010-05-18 15:57 maxweii 阅读(2158) 评论(0) 推荐(0) 编辑
摘要: /////////////////////////////////////////////////////////////////////////////// SystemTray.h : header file//// Written by Chris Maunder (chrismaunder@codeguru.com)// Copyright (c) 1998.//// This code may be used in compiled form in any way you desire. This// file may be redistributed unmodified by a 阅读全文
posted @ 2010-05-18 15:01 maxweii 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 滑动条控制(Slider Control)也叫轨道条控制,其主要是用一个带有轨道和滑标的小窗口以及窗口上的刻度,来让用户选择一个离散数据或一个连续的数值区间。通过鼠标或键盘来进行数据的选择操作,这在WIN98/95中的很多应用程序中都可以看到,如控制面板中的鼠标等,滑动条既可以是水平方式的也可以是垂直方式的。滑动条控制的风格如下:TBS_HORZ 滑动条是水平方向的 TBS_VERT 滑动条是垂直方向的TBS_LEFT 滑动条位于窗口左侧 TBS_RIGHT 滑动条位于窗口右侧TBS_TOP 滑动条位于窗口顶部 TBS_BOTTOM 滑动条位于窗口底部TBS_BOTH 滑动条位于窗口两侧 TB 阅读全文
posted @ 2010-05-18 13:19 maxweii 阅读(449) 评论(0) 推荐(0) 编辑
摘要: C输出格式总结2007-07-08 12:091 一般格式 printf(格式控制,输出表列) 例如:printf("i=%d,ch=%c\n",i,ch); 说明: (1)“格式控制”是用双撇号括起来的字符串,也称“转换控制字符串”,它包括两种信息: ①格式说明:由“%”和格式字符组成,它的作用是将输出的数据转换为指定的格式输出。 ②普通字符,即需要原样输出的字符。 (2)“输出表列”是需要输出的一些数据,可以是表达式 (3) printf函数的一般形式可以表示为 printf(参数1,参数2,……,参数n) 功能是将参数2~参数n按参数1给定的格式输出2 格式字符(9种) (1)d(或i) 阅读全文
posted @ 2010-05-11 15:27 maxweii 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 一、获得绘图的窗口句柄方法(详细参数及其调用可以看考MSDN):1、 HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName)HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter,LPCTSTR lpClassName, LPCTSTR lpWindowName)2、 HWND WindowFromPoint(POINT& Point)3、 BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam) BOOL CALLBACK 阅读全文
posted @ 2010-03-22 14:26 maxweii 阅读(1099) 评论(0) 推荐(0) 编辑
摘要: CBitmap是代表位图的一个类,包含着位图的属性及对位图的操作,是对HBITMAP的封装;BITMAP是一个结构体,封装着位图的一些信息;HBITMAP是位图的句柄。关联的方式是:CBitmap bitmap;HBITMAP hBitmap;bitmap.LoadBitmap(ID);bitmap.Attach(hBitmap);BITMAP bm;bitmap.GetBitmap(&bm); //此函数获得位图的一些信息,并赋给bm结构体 阅读全文
posted @ 2010-03-20 10:33 maxweii 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 一、打开CD-ROMmciSendString("Set cdAudio door open wait",NULL,0,NULL);二、关闭CD_ROMmciSendString("Set cdAudio door closed wait",NULL,0,NULL);三、关闭计算机OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);GetVersionEx(&OsVersionInfo); //获取操作系统版本信息if(OsVersionI 阅读全文
posted @ 2010-03-19 11:50 maxweii 阅读(452) 评论(0) 推荐(0) 编辑
摘要: 很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能够启动运行,方法是写注册表Software\\Microsoft\\Windows\\CurrentVersion\\Run。参考程序可以见下:(查找程序目录的执行文件,存在则进行添加注册表操作) //实用代码一int C***Dlg::CreateRun(void){//添加以下代码HKEY RegKey; CString sPath; GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH); sPath.ReleaseBuffer 阅读全文
posted @ 2010-03-06 14:53 maxweii 阅读(467) 评论(0) 推荐(0) 编辑
摘要: CSpinButtonCtrl使用说明CSpinButtonCtrl使用起来比较特殊,使用起来,需要注意一些地方.实际的教程也比较少.为了让后人少走弯路,这里写这篇文章以说明.1.添加EDIT控件2.添加Spin控件如果不是这样的顺序的话,使用ctrl+D改变Tab顺序,使spin紧靠edit后面3.在EDIT控件上面设置group属性(特别注意)或((CSpinButtonCtrl *)GetDlgItem(IDC_SPIN_ROUND))-SetBuddy(GetDlgItem(IDC_EDIT_ROUND));将两个关联4.在Spin控件上设置Auto Buddy 为 trueSet 阅读全文
posted @ 2010-03-05 10:21 maxweii 阅读(380) 评论(0) 推荐(0) 编辑
摘要: 人说在IT公司没有不忙的。你会发现每天RTX要闪烁几十个对话框是再正常不过的事情。可能你正好在写一个ppt,同时领导安排今天必须出一封邮件,刚在酝酿的时候突然还会有人电话催你开会,离开时刚好还有个朋友在QQ上请求帮忙找回密码,每天周而复始,逢人遍说忙似乎成了流行的口头禅。你会发现,时间永远也不够用,每天永远都有着“做不完”的事情。带着和所有人共同的问题,我了解了时间管理的方**:GTD。下面我会带着一些自己的理解、更加直白的介绍一下GTD。  GTD就是Get Thing Done的缩写,翻译过来就是“把事情做完”,David Allen这本书的中文名叫:《尽管去做》。GTD的核心理念概括一句 阅读全文
posted @ 2010-02-20 11:11 maxweii 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 一,CHyperLinkm_cVersionInfo;二 ,DDX_Control(pDX, IDC_STATIC, m_cVersionInfo);三,m_cVersionInfo.SetURL(_T("http://msdn.microsoft.com/library/psdk/shellcc/shell/Versions.htm"));路径改成文件名,照样打开 和ShellExcecute类似.release版本正确,debug有个错误// HyperLink.cpp : implementation file // // HyperLink static control. Will o 阅读全文
posted @ 2010-02-09 18:35 maxweii 阅读(380) 评论(0) 推荐(0) 编辑
摘要: 2 过程语言中的回调(C)2.1 函数指针回调在C语言中是通过函数指针来实现的,通过将回调函数的地址传给被调函数从而实现回调。因此,要实现回调,必须首先定义函数指针,请看下面的例子: void Func(char *s);// 函数原型void (*pFunc) (char *);//函数指针可以看出,函数的定义和函数指针的定义非常类似。 一般的化,为了简化函数指针类型的变量定义,提高程序的可读性,我们需要把函数指针类型自定义一下。 typedef void(*pcb)(char *);回调函数可以象普通函数一样被程序调用,但是只有它被当作参数传递给被调函数时才能称作回调函数3 面向对象语言中 阅读全文
posted @ 2010-02-09 15:39 maxweii 阅读(980) 评论(0) 推荐(1) 编辑
摘要: 作用:  将一个类的接口转换成客户希望的另外一个接口。Adapt 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。  UML示意图  1)采用继承原有接口类的方式  2)采用组合原有接口类的方式  解析:  Adapt模式其实就是把完成同样的一个功能但是接口不能兼容的类桥接在一起使之可以在一起工作,这个模式使得复用旧的接口成为可能.  实现:  Adapt模式有两种实现办法,一种是采用继承原有接口类的方法,一种是采用组合原有接口类的方法,这里采用的是第二种实现方法.#include iostreamusing namespace std;// 需要被Adapt的类class 阅读全文
posted @ 2010-02-07 13:51 maxweii 阅读(254) 评论(0) 推荐(0) 编辑
摘要: #include iostreamusing namespace std;// 虚拟基类,所有原型的基类,提供Clone接口函数class Prototype{public: Prototype(){} virtual ~Prototype(){} virtual Prototype* Clone() = 0;};// 派生自Prototype,实现Clone方法class ConcretePrototype1 : public Prototype{public: ConcretePrototype1(); ConcretePrototype1(const ConcretePrototy 阅读全文
posted @ 2010-02-07 11:11 maxweii 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 作用:保证一个类仅有一个实例,并提供一个访问它的全局访问点。  UML结构图:  解析:  Singleton模式其实是对全局静态变量的一个取代策略,上面提到的Singleton模式的两个作用在C++中是通过如下的机制实现的:1)仅有一个实例,提供一个类的静态成员变量,大家知道类的静态成员变量对于一个类的所有对象而言是惟一的 2)提供一个访问它的全局访问点,也就是提供对应的访问这个静态成员变量的静态成员函数,对类的所有对象而言也是惟一的.在C++中,可以直接使用类域进行访问而不必初始化一个类的对象.  下面的实现其实是Singleton的一个简单实现,并不是特别的通用,一般的,如果一个项目中需 阅读全文
posted @ 2010-02-07 11:06 maxweii 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 作用:  在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.  UML结构图:  解析:  Memento模式中封装的是需要保存的状态,当需要恢复的时候才取出来进行恢复.原理很简单,实现的时候需要注意一个地方:窄接口和宽接口.所谓的宽接口就是一般意义上的接口,把对外的接口作为public成员;而窄接口反之,把接口作为private成员,而把需要访问这些接口函数的类作为这个类的友元类,也就是说接口只暴露给了对这些接口感兴趣的类,而不是暴露在外部.下面的实现就是窄实现的方法来实现的.#include string#includ 阅读全文
posted @ 2010-02-07 00:12 maxweii 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 作用:  允许一个对象在其内部状态改变时改变它的行为.  UML结构图:解析:  State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的问题,大部分人是采用switch-case语句进行处理的,这样会造成一个问题:分支过多,而且如果加入一个新的状态就需要对原来的代码进行编译.State模式采用了对这些不同的状态进行封装的方式处理这类问题,当状态改变的时候进行处理然后再切换到另一种状态,也就是说把状态的切换责任交给了具体的状态类去负责.同时,State模式和Strategy模式在图示上有很多相似的地方,需要说明的是两者的思想都是一致的,只不过封装的东西不 阅读全文
posted @ 2010-02-06 23:08 maxweii 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 作用:  定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化.  解析:  简而言之一句话,Strategy模式是对算法的封装.处理一个问题的时候可能有多种算法,这些算法的接口(输入参数,输出参数等)都是一致的,那么可以考虑采用Strategy模式对这些算法进行封装,在基类中定义一个函数接口就可以了.#include iostream using namespace std; class Strategy { public: virtual ~Strategy(){} virtual void AlgorithmInterface() 阅读全文
posted @ 2010-02-06 01:02 maxweii 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 作用:  定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。  UML结构图:  抽象基类:  1)AbstractClass:抽象基类,定义算法的轮廓  解析:  TemplateMethod 的关键在于在基类中定义了一个算法的轮廓,但是算法每一步具体的实现留给了派生类.但是这样也会造成设计的灵活性不高的缺点,因为轮廓已经定下来了要想改变就比较难了,这也是为什么优先采用聚合而不是继承的原因.#include iostreamusing namespace std;class Abstract 阅读全文
posted @ 2010-02-06 00:07 maxweii 阅读(206) 评论(0) 推荐(0) 编辑
摘要: UML结构图:适用于以下情况:1)当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 2)当构造过程必须允许被构造的对象有不同的表示时。抽象基类:1)Builder:这个基类是全部创建对象过程的抽象,提供构建不同组成部分的接口函数接口:1)Builder::BuildPartA,Builder::BuildPartB:是对一个对象不同部分的构建函数接口,Builder的派生类来具体实现.另外还有一个需要注意的函数,就是Director::Construct函数,这个函数里面通过调用上面的两个接口函数完成对象的构建--也就是说各个不同部分装配的过程都是一致的(同样的调用的Con 阅读全文
posted @ 2010-02-05 23:24 maxweii 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 命令模式(Command)的目标是将一个请求封装成一个对象,因此可以参数化多个客户的不同请求,将请求排除,记录请求日志,并支持撤消操作。 结构图如下:其实现思想是将一个请求封装到一个类中(Command),再提供接收对象(Receiver),最后Command命令由Invoker调用。 以一个电灯开关为例,命令的执行、不执行相对于开关的打开、关闭操作,由开关发出命令,电灯接收命令,结构图如下:#include iostreamusing namespace std;class Light {public: Light(){}; virtual ~Light(){}; void Turn 阅读全文
posted @ 2010-02-04 23:35 maxweii 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 作用: 为其他对象提供一种代理以控制对这个对象的访问。UML结构图: 抽象基类:1)Subject:定义了Proxy和RealSubject的公有接口,这样就可以在任何需要使用到RealSubject的地方都使用Proxy. 解析: Proxy其实是基于这样一种时常使用到的技术-某个对象直到它真正被使用到的时候才被初始化,在没有使用到的时候就暂时用Proxy作一个占位符。这个模式实现的要点就是Proxy和RealSubject都继承自Subject,这样保证了两个的接口都是一致的。#include iostream#include stdlib.husing namespace std 阅读全文
posted @ 2010-02-04 23:03 maxweii 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 抽象基类:  1)Abstraction:某个抽象类,它的实现方式由Implementor完成.  2)Implementor:实现类的抽象基类,定义了实现Abastraction的基本操作,而它的派生类实现这些接口.  接口函数:  1)Implementor::OperationImpl:定义了为实现Abstraction需要的基本操作,由Implementor的派生类实现之,而在Abstraction::Operation函数中根据不同的指针多态调用这个函数.  解析:  Bridge用于将表示和实现解耦,两者可以独立的变化.在Abstraction类中维护一个Implementor类指 阅读全文
posted @ 2010-02-04 16:56 maxweii 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 创建型模式:Abstract Factory(抽象工厂):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 Builder(生成器):将一个复杂对象的构件与它的表示分离,使得同样的构建过程可以创建不同的表述。Factory Method(工厂方法):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。Prototype(原型):用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。Singleton (单例):保证一个类仅有一个实例,并提供一个访问它的全局访问点。结构型模式: Adapter(适配器) 阅读全文
posted @ 2010-02-04 10:00 maxweii 阅读(895) 评论(0) 推荐(0) 编辑
摘要: 待续 阅读全文
posted @ 2010-02-03 16:58 maxweii 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 一、匈牙利命名法:广泛应用于象Microsoft Windows这样的环境中。 Windows 编程中用到的变量(还包括宏)的命名规则匈牙利命名法,这种命名技术是由一位能干的 Microsoft 程序员查尔斯·西蒙尼(Charles Simonyi) 提出的。匈牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等。这些符号可以多个同时使用,顺序是先m_(成员变量),再指针,再简单数据类型,再其他。例如:m_lpszStr, 表示指向一个以0字符结尾的字符串的长指针成员变量。 匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首 阅读全文
posted @ 2010-02-01 09:59 maxweii 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 关于C++中函数指针的使用(包含对typedef用法的讨论) (一)简单的函数指针的应用。//形式1:返回类型(*函数名)(参数表) char (*pFun)(int); char glFun(int a){ return;} void main() { pFun = glFun; (*pFun)(2); } 第一行定义了一个指针变量pFun。首先我们根据前面提到的“形式1”认识到它是一个指向某种函数的指针,这种函数参数是一个int型,返回值是char类型。只有第一句我们还无法使用这个指针,因为我们还未对它进行赋值。 第二行定义了一个函数glFun()。该函数正好是一个以int为参数返 阅读全文
posted @ 2010-01-31 22:19 maxweii 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 摘要:许多游戏软件的开发中,实现高速平滑的动画需要许多比较深的技术,如:OpenGL、DirectX,并且可能还要开发人员有深厚的数学功底。但是,我们在开发一些小游戏,或为应用程序的界面实现一些动画效果,就可能不用以上这些技术了,我们更多的是用Windows API提供或MFC封装后的GDI绘图函数来实现。为此我们可不可以用GDI来实现高速平滑的动画呢?答案是肯定的。本文教您如何用GDI函数来开发平滑无闪的动画,并以一个应用实例来介绍这些用法。 关键词:GDI,MFC,Bitmap,内存设备环境一、动画原理。大家都知道播放电影的原理:在规定时间(一般为1秒)播放24幅连续的画面,由于人的视觉暂 阅读全文
posted @ 2010-01-29 15:16 maxweii 阅读(399) 评论(0) 推荐(0) 编辑
摘要: BOOL StretchBlt( int x, //指定目的矩形区域左上角的X坐标 int y, //指定目的矩形区域左上角的Y坐标 int nWidth, //指定目的矩形区域的宽度 int nHeight, //指定目的矩形区域的高度 CDC* pSrcDC, int xSrc, //指定源矩形区域左上角的X坐标 int ySrc, //指定源矩形区域左上角的Y坐标 int nSrcWidth, //指定源矩形区域的宽度 int nSrcHeight, //指定源矩形区域的高度 DWORD dwRop //此参数参考MSDN,SRCCOPY类型为直接拷贝); //此函数将一个位图资源从一 阅读全文
posted @ 2010-01-27 17:30 maxweii 阅读(2901) 评论(0) 推荐(0) 编辑
摘要: 在项目开发中,经常要求系统在同一时刻在同一台机器上只能运行一个实例,可以通过这种方式实现在InitInstance()函数中添加如下代码(可以函数最前边添加,也可以放后边点,不过最好放最前边): Sample CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--HANDLEm_hMutex=::CreateMutex(NULL,TRUE,m_pszName);// m_pszName为互斥体 名 如"132"或者"my"if(GetLastEr 阅读全文
posted @ 2010-01-25 20:03 maxweii 阅读(355) 评论(0) 推荐(0) 编辑
摘要: 一、GDI GDI是位于应用程序与不同硬件之间的中间层,这种结构让程序员从直接处理不同硬件的工作中解放出来,把硬件间的差异交给了GDI处理。GDI通过将应用程序与不同输出设备特性相隔离,使Windows应用程序能够毫无障碍地在Windows支持的任何图形输出设备上运行。例如,我们可以在不改变程序的前提下,让能在Epson点式打印机上工作的程序也能在激光打印机上工作。它把windows系统中的图形输出转换成硬件命令然后发送给硬件设备。GDI是以文件的形式存储在系统中,系统需要输出图形时把它载入内存,如果转换成硬件命令时遇到非GDI命令,系统还可能载入硬件驱动程序,驱动程序辅助GDI把图形命令转换 阅读全文
posted @ 2010-01-25 19:43 maxweii 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 打开一个文件 :ShellExecute(NULL, NULL, "c:\\mfc类库详解.chm", NULL, NULL, SW_SHOWNORMAL);打开一个文件夹: ShellExecute(NULL, NULL, "c:\\", NULL, NULL, SW_SHOWNORMAL);在资源管理器中打开:ShellExecute(NULL, "explore", "c:\\", NULL, NULL, SW_SHOWNORMAL);搜索一个文件夹 : ShellExecute(NULL, "find", "c:\\", NULL, NULL, SW_SHOWNORMAL);点击发邮件 阅读全文
posted @ 2010-01-22 11:46 maxweii 阅读(476) 评论(0) 推荐(0) 编辑
摘要: 首先让我们看一看刚入软件公司会出现的情况:1. 你可能会常常发现,写了一段代码后,编译程序时是一大堆的出错 (原因:语法不熟)──别担心,这是每个程序员必须经历的事,这时候你就需要更大的耐心及细心,对每一行代码进行仔细人阅读并改正,这个很重要,这可以培养你的理解代码能力,所以要常读程序,不要等到程序运行以后才知道你的程序的结果。──如何避免:在写代码以前,要认真的学习计算机语言的语法,如关键点,易错点,易忘点。同时要自已动手写自已的测试代码,而尽量不要抄别人的代码示例。即使抄,在学习阶段也尽量不要每一行一模一样的对着抄。而应对着代码示例写有所不同的例子。比如:在学java 知识点时,你最好建一 阅读全文
posted @ 2010-01-20 13:41 maxweii 阅读(308) 评论(0) 推荐(0) 编辑
摘要: Dlg 是Dialog 的缩写,对话框App类就是这个SDI作为"程序"的入口有点像c的Main函数View是指编辑区里面的事就是那块白色的中间区域他负责绘制和乡音一些消息Doc就有点像数据库,他保存着编辑数据,用于view的Redraw的时候用,还有保存文件。反正动态的编辑数据都放在Doc里面。1) 在View中获得Doc指针 CYouSDIDoc *pDoc=GetDocument();一个视只能有一个文档。2) 在App中获得MainFrame指针 CWinApp 中的 m_pMainWnd变量就是MainFrame的指针 也可以:CMainFrame *pMain =(CMainFra 阅读全文
posted @ 2010-01-13 10:18 maxweii 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4、事 件: 用来通知线程有一些事件已发生,从而启动后继任务的开始。一,临界区(Critical Section): 保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操. 阅读全文
posted @ 2010-01-12 15:21 maxweii 阅读(333) 评论(0) 推荐(0) 编辑