自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 OnUpdateCmdUI 与 OnCommand 的区别

 一个是WM_INITMENUPOPUP或wm_initmenu产生后由mfc框架调用以便用来控制菜单项的外观的... 一个是点击菜单后产生的..命令更新机制MFC框架结构中,可以用ON_UPDATE_COMMAND_UI( id, memberFxn )宏指定菜单或工具条按钮等对应的状态设置函数在memberFxn中通过传入的CCmdUI对象指针就可以设置菜单项,工具钮的使用、禁用、

2008-07-22 11:52:00 3495 1

原创 C语言精典算法

 迷宫:#include enum boolean{FALSE, TRUE};template struct Node{  T val;  Node *next;};template class List{    Node *head;    int size;  public:    List()    {      head = NULL;      size = 0;    }  v

2008-07-22 11:43:00 1026

原创 MFC教程-3

 CObject类 CObject 是大多数MFC类的根类或基类。CObject类有很多有用的特性:对运行时类信息的支持,对动态创建的支持,对串行化的支持,对象诊断输出,等等。 MFC从CObject派生出许多类,具备其中的一个或者多个特性。程序员也可以从CObject类派生出自己的类,利用CObject类的这些特性。本章将讨论MFC如何设计CObject类的这些特性。首先,考察C

2008-07-22 11:37:00 1712

原创 MFC教程-对象的创建

 MFC对象的创建 前面几章介绍了MFC的核心概念和思想,即介绍了MFC对Windows对象的封装方法和特点;MFC对象的动态创建、序列化;MFC消息映射机制。现在,考查MFC的应用程序结构体系,即以文档-视为核心的编程模式。学习本章,应该弄清楚以下问题:MFC中诸多MFC对象的关系:应用程序对象,文档对象,边框窗口对象,文档边框窗口对象,视对象,文档模板对象等。MFC对象的创

2008-07-22 11:36:00 1085

原创 MFC教程-2

2 WinMain入口函数WinMain流程 现在讨论MFC应用程序如何启动。WinMain 函数是MFC提供的应用程序入口。进入WinMain前,全局应用程序对象已经生成。WinMain流程如图5-3所示。图中,灰色框是对被调用的虚拟函数的注释,程序员可以或必须覆盖它以实现MFC要求的或用户希望的功能;大括号所包含的图示是相应函数流程的细化,有应用程序对象App的初始化、Ru

2008-07-22 11:35:00 1861

原创 MFC教程-7

 MFC的DLL 一般的,在介绍Windows编程的书中讲述DLL的有关知识较多,而介绍MFC的书则比较少地提到。即使使用MFC来编写动态链接库,对于初步接触DLL 的程序员来说,了解DLL的背景知识是必要的。另外,MFC提供了新的手段来帮助编写DLL程序。所以,本节先简洁的介绍有关概念。DLL的背景知识 静态链接和动态链接 当前链接的目标代码(.obj)如

2008-07-22 11:34:00 729

原创 MFC教程-6

  应用程序的退出 一个Windows应用程序启动之后,一般是进入消息循环,等待或者处理用户的输入,直到用户关闭应用程序窗口,退出应用程序为止。例如,用户按主窗口的关闭按钮,或者选择执行系统菜单“关闭”,或者从“文件”菜单选择执行“退出”,都会导致主窗口被关闭。当用户从“文件”菜单选择执行“退出”时,将发送MFC标准命令消息ID_APP_EXIT。MFC实现了函数CWinApp

2008-07-22 11:34:00 751

原创 MFC教程-8

 MFC的进程和线程 Win32的进程和线程概念 进程是一个可执行的程序,由私有虚拟地址空间、代码、数据和其他操作系统资源(如进程创建的文件、管道、同步对象等)组成。一个应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程。线程是操作系统分时调度分配CPU时间的基本实体。一个线程可以执行程序的任意部分的代码,即使这部分代码被另一个线程并发地执行;

2008-07-22 11:33:00 828

原创 MFC教程-9

 MFC的状态 MFC定义了多种状态信息,这里要介绍的是模块状态、进程状态、线程状态。这些状态可以组合在一起,例如MFC句柄映射就是模块和线程局部有效的,属于模块-线程状态的一部分。模块状态 这里模块的含义是:一个可执行的程序或者一个使用MFC DLL的DLL,比如一个OLE控件就是一个模块。一个应用程序的每一个模块都有一个状态,模块状态包括这样一些信息:用来加载资

2008-07-22 11:32:00 893

原创 MFC教程-11

  MFC下的文件类 文件操作的方法 使用Visual C++编程,有如下方法进行文件操作:(1)使用标准C运行库函数,包括fopen、fclose、fseek等。(2)使用Win16下的文件和目录操作函数,如lopen、lclose、lseek等。不过,在Win32下,这些函数主要是为了和Win16向后兼容。(3)使用Win32下的文件和目录操作函数,如Cre

2008-07-22 11:31:00 831

原创 MFC教程-12

  对话框和对话框类CDialog 对话框经常被使用,因为对话框可以从模板创建,而对话框模板是可以使用资源编辑器方便地进行编辑的。模式和无模式对话框 对话框分两种类型,模式对话框和无模式对话框。模式对话框 一个模式对话框是一个有系统菜单、标题栏、边线等的弹出式窗口。在创建对话框时指定WS_POPUP, WS_SYSMENU, WS_CAPTION和 DS

2008-07-22 11:29:00 1082

原创 MFC教程-13

 MFC工具条和状态栏 Windows控制窗口 Windows (Windows95或者以上版本) 提供了系列通用控制窗口,其中包括工具条(ToolBar)、状态栏(StatusBar)、工具条提示窗口(ToolTip)。Windows在一个DLL加载时注册个控制窗口的“窗口类”。例如,工具条的“窗口类”是 “ToolbarWindow32”,状态栏的“窗口类”是“ms

2008-07-22 11:26:00 1395

原创 MFC的模块状态:从AfxGetApp()和AFX_MANAGE_STATE()看MFC的模块状态

 Introduction当我们在用MFC编程的时候,我们经常用到AfxGetApp()来获得当前的CWinApp的Instance。看看MFC的源代码中AfxGetApp()的实现,你会发现AfxGetApp()的实现并不像一般情况下面那样直接:_AFXWIN_INLINE CWinApp* AFXAPI AfxGetApp()         { return afxCurrent

2008-07-21 13:18:00 817

原创 AFX_MANAGE_STATE(AfxGetStaticModuleState());问题

  写一个MFC规则动态链接库(regularDll.dll),在这个里面写一个函数 extern "C " _declspec(dllexport) void ShowDlg(void) { CMyDlg dlg; dlg.DoModal(); AfxMessageBox( "hello "); } 建立一个基于对话框的应用程序CallDll,添加一个按钮,在OnBtn1(){}里调用

2008-07-21 11:13:00 1381

原创 (转了多次不知道几转了)在DLL中使用资源(CDialog)

  在DLL中使用资源     现在最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题。这里我们从Win32 DLL和MFC DLL两个方面来分析并解决这个问题。 1.Win32 DLL      在Win32 DLL中使用对话框很简单,你只需要在你的DLL中添加对话框资源,而且可以在对话框上面设置你所需要的控件。然后使用DialogB

2008-07-21 11:07:00 870

原创 如何对webbrowser和IE编程(十)

由Internet Explorer 5激发事件如你所知, Internet Explorer像其他COM对象一样激发事件—通过连接点.但实际上Internet Explorer如何激发事件呢?每次 Internet Explorer需要向客户提供关于当前活动状态的信息, Internet Explorer 激发通过DWebBrowserEvents2 连接点激发一个事件. (之前到版本 4,

2008-07-17 10:17:00 1054

原创 VC进阶----(3)菜单操作代码

 //标记菜单 //GetMenu()->GetSubMenu(0)->CheckMenuItem(2,MF_BYPOSITION |MF_CHECKED);//索引方式 //GetMenu()获得菜单CMenu对象指针, GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_SAVE,MF_BYCOMMAND |MF_CHECKED);//ID方式

2008-07-17 09:43:00 1012

原创 windows编程总结

 (一)Dialog篇:    CDialog::DoModal();//显示对话框    UpdateData(TRUE);//将数据从控件传递到相应的成员变量    UpdateData(FALSE);//将数据从成员变量传递到相应控件    显示消息框:         int AfxMessageBox(LPCTSTR lpszText,UINT nType=MV_OK,UINT

2008-07-16 17:36:00 238

原创 关于0xC0000005

 0xC0000005: Access Violation错误调试- - Oh my god,耗费我了几个小时的时间,请教了Zz和Tina后,终于搞定了一部分了。 归根结底是内存分配的问题,如果不分配内存,就会导致访问冲突。 开始是个类的构造没有写,,,(写在另一个类的一个函数里面了,但是没有调用),后来是一些结构没有初始化。调用osip库的init系列初始化后,错误减少了很多。 现在还有很多错误

2008-07-16 13:18:00 36933 9

原创 MFC中获取各种类指针

 1、获取应用程序指针  CMyApp* pApp=(CMyApp*)AfxGetApp();2、获取主框架指针  CWinApp 中的公有成员变量 m_pMainWnd 就是主框架的指针  CMainFrame* pMainFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);  或者  CMainFrame* pMainFrame = (CM

2008-07-15 17:23:00 1445

原创 struct

 结构类型定义和结构变量说明  在实际问题中,一组数据往往具有不同的数据类型。例如, 在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。 显然不能用一个数组来存放这一组数据。因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。为了解决这个问题,C语言中给出了另一种构造数据类型——“结构”。它相当于其它高级语言中的记录。  “结构”是一种

2008-07-15 11:11:00 1093

原创 enum 在c中的使用

 如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。   举个例子来说明一吧,为了让大家更明白一点,比如一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔,这里有两种可能,那么你就可以定义一个枚举类型来表示它! enum box{pencil,pen};//这里你

2008-07-15 11:07:00 6774 2

原创 C/C++动态内存创建与内存管理

 1 内存空间逻辑组织A 静态数据区:内存在程序启动的时候才被分配,而且可能直到程序开始执行的时候才被初始化,如函数中的静态变量就是在程序第一次执行到定义该变量的代码时才被初始化。所分配的内存在程序的整个运行期间都存在,如全局变量,static变量等。注意:初始化的全局变量和静态变量在一块区域,未初始化的全局变量与静态变量在相邻的另一块区域,同时未被初始化的对象存储区可以通过voi

2008-07-15 11:05:00 736

原创 struct深层探索

1. struct的巨大作用 面对一个人的大型C/C++程序时,只看其对struct的使用情况我们就可以对其编写者的编程经验进行评估。因为一个大型的C/C++程序,势必要涉及一些(甚至大量)进行数据组合的结构体,这些结构体可以将原本意义属于一个整体的数据组合在一起。从某种程度上来说,会不会用struct,怎样用struct是区别一个开发人员是否具备丰富开发经历的标志。在网络协议、通信控制、

2008-07-15 10:59:00 536

原创 函数指针及回调函数

 函数指针及回调函数 var $tag=;   1.什么是函数指针?void f();// 函数原型上面的语句声明了一个函数,没有输入参数并返回void。那么函数指针的声明方法如下:void (*) ();让我们来分析一下,左边圆括弧中的星号是函数指针声明的关键。另外两个元素是函数的

2008-07-15 10:57:00 511

原创 C++中class与struct的区别

 关于使用大括号初始化class和struct如果定义了构造函数的话,都不能用大括号进行初始化如果没有定义构造函数,struct可以用大括号初始化。如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化。 关于默认访问权限class中默认的成员访问权限是private的,而struct中则是public的。关于继承方式class继承默认是private继承,而struct

2008-07-15 10:53:00 963

原创 关于 typedef struct 和 struct

 关于 typedef struct 和 struct 请高手帮忙解释以下几种结构体定义的区别: struct{ int x; int y; }test1; struct test {int x; int y; }test1; typedef struct test {int x; int y }text1,text2; 这几种方法把小弟弄得头疼,不胜感激!问题补充

2008-07-15 10:52:00 724

原创 c语言中的结构(struct)和联合(union)

  联       合(union)      1. 联合说明和联合变量定义      联合也是一种新的数据类型, 它是一种特殊形式的变量。      联合说明和联合变量定义与结构十分相似。其形式为:       union 联合名{            数据类型 成员名;            数据类型 成员名;         

2008-07-15 10:50:00 972

原创 全面解析MFC应用程序中处理消息的顺序

 1.AfxWndProc()      该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc 2.AfxCallWndProc()  该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数 3.WindowProc()      该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWi

2008-07-15 10:48:00 967

原创 typedef使用大全

 typedef使用大全1(数组) typedef到处都是,但是能够真正懂得typedef使用的不算太多。对于初学者而言,看别人的源码时对到处充斥的typedef往往不知所错,而参考书又很少,所以在此给出一个源码,供大家参考#include #include  /* 避免Visual C的for与标准for的不同 */#define for   if (0);   

2008-07-15 10:47:00 500

原创 C语言宏定义技巧(常用宏定义)

 1,防止一个头文件被重复包含 #ifndef COMDEF_H#define COMDEF_H //头文件内容#endif3,得到指定地址上的一个字节或字#define MEM_B( x ) ( *( (byte *) (x) ) )#define MEM_W( x ) ( *( (word *) (x) ) )4,求最大值和最小值  #define MA

2008-07-15 10:46:00 541

原创 C++ 虚函数表解析

 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。  关于虚函

2008-07-15 10:45:00 427

原创 内存对齐

 考虑下面的结构:struct foo{char c1;short s;char c2;int i;};假设这个结构的成员在内存中是紧凑排列的,假设c1的地址是0,那么s的地址就应该是1,c2的地址就是3,i的地址就是4。也就是c1 00000000, s 00000001, c2 00000003, i 00000004。可是,我们在Visual c/c++ 6中写一个简单的程序:

2008-07-15 10:44:00 473

原创 在C中用struct实现C++中class的函数声明和定义

 原先对C中的struct理解只局限在数据结构体上,看了部分linux内核代码发现struct用处很多,功能很强大,可以在C环境下实现几乎所有C++中class的用处,我写了一个很简单的一个例子:#includestruct MyClass{        char* name;        int age;        void (*funnull) ();       

2008-07-15 10:42:00 928

原创 浅谈C语言程序设计的逻辑运算符

 虽然早在两年前,自己已经系统地学习过C语言,并且也通过了全国二级等级考试,可是当现在重新在学的时候,还是觉得有许多问题难以理解!的确,学无止境!    所谓“学,然后知不足,教,然后知困。”C语言的确博大精深。就拿逻辑运算符来说,它也并非我们想象中的那么简单,当许多运算符综合在一起,可能会很复杂。前些日子,刚刚学到运算符这边,本以为自己曾经学过而且这里又不是难点,应该不会出太大问题,可是

2008-07-15 10:39:00 1942 1

原创 C/C++头文件一览

  C、传统 C++#include     //设定插入点#include      //字符处理#include      //定义错误码#include      //浮点数处理#include     //文件输入/输出#include     //参数化输入/输出#include    //数据流输入/输出#include     //定义各种数据类型最值常量#inclu

2008-07-15 10:35:00 535

原创 C/C++中回调函数初探

 简介  对于很多初学者来说,往往觉得回调函数很神秘,很想知道回调函数的工作原理。本文将要解释什么是回调函数、它们有什么好处、为什么要使用它们等等问题,在开始之前,假设你已经熟知了函数指针。   什么是回调函数?   简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数

2008-07-15 10:29:00 530

原创 友元类和友元函数

 《windows环境多线程编程原理与应用》中解释:  如果将类的封装比喻成一堵墙的话,那么友元机制就像墙上了开了一个门,那些得  到允许的类或函数允许通过这个门访问一般的类或者函数无法访问的私有属性和方     法。友元机制使类的封装性得到消弱,所以使用时一定要慎重。  ■ 友元类的说明   将外界的某个类在本类别的定义中说明为友元,那么外界的类就成为本类的“朋   

2008-07-15 10:25:00 479

原创 如何理解MFC中的动态创建?

MFC的动态创建是通过一些宏来实现的. 主要过程是: 1.在要实现动态创建的类(classA)的声明代码处加入一个静态的CRuntimeClass变量(b),并重载GetRuntimeClass()函数以返回b,并声明动态建立函数(C())(通过在类的声明处加入DECLARE_DYNCREATE宏) 2.在classA的定义代码处初始化b,b中记录了classA类的父类和C(),并实现C(),就是

2008-07-15 10:24:00 645

原创 MFC的关键技术:动态创建收藏

 动态创建就是运行时创建指定类的对象,在MFC中大量使用。如框架窗口对象、视对象,还有文档对象都需要由文档模板类对象来动态的创建。 初次接触MFC的时候,很容易有这样的迷惘。MFC的几大类不用我们设计也就罢了,但最疑惑的是不用我们实例化对象。本来最直观的理解就是,我们需要框架的时候,亲手写上CFrameWnd myFrame;需要视的时候,亲自打上CView myView;……但 MFC不给我们这

2008-07-15 10:23:00 677

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除