VS2010 C++ MFC框架学习笔记5 - C++面向对象编程基础1

VS2010 C++ MFC框架学习笔记5 - C++面向对象编程基础1 时隔一周多,再继续C++之路。 1. MSG结构体 Windows应用程序响应操作系统的消息,通过MSG结构体传达消息信息: 2. 消息队列 Windows消息队列,被应用程序逐条响应 注意2点: 1. 消息——用户操作、程序状态 2. 消息响应 3. WinMain函数——VC++的入口函数 int CALLBACK WinMain( _In_ HINSTANCE hInstance,//实例的句柄,标识这个当前运行的实例 _In_ HINSTANCE hPrevInstance, //实例的句柄,标识previous运行的实例 _In_ LPSTR lpCmdLine, //LongPointer_String 长指针,指向一个String , 运行程序时,传入的命令行参数。ARGC ARGV _In_ int nCmdShow //指定窗口显示时的状态(最大化、适中、隐藏。。。) ); 4. 窗口应用程序的创建步骤 设计一个窗口类 注册窗口 创建窗口 显示及更新窗口 typedef struct tagWNDCLASS { UINT style; //Style这里是窗口类型,见上面的解释 WNDPROC lpfnWndProc; //窗口过程函数的指针,用这个函数来处理相应的消息 int cbClsExtra; //分配的额外的内存空间,通常称为类的附加内存 int cbWndExtra; //窗口的附加内存 HINSTANCE hInstance; // = hInstance HICON hIcon; //图标句柄wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); HCURSOR hCursor; //光标句柄wndclass.hCursor=LoadCursor(NULL,IDC_CROSS); HBRUSH hbrBackground; //窗口背景被这个参数控制 //画刷的句柄wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); LPCTSTR lpszMenuName; //长指针常量String,用来设定菜单的名字,NULL LPCTSTR lpszClassName; //常量字符串,设定类的名字。"weixin",创建窗口时,名字要与其一致,否则创建不出窗口 } WNDCLASS, *PWNDCLASS; 怎么使用:

READ MORE

VS2010 C++ MFC框架学习笔记4 - C++面向对象编程基础2

VS2010 C++ MFC框架学习笔记4 - C++面向对象编程基础2 跟着教材《Visual C++ 2010 MFC 编程入门》.pdf 学习了2周,感觉有些基础的概念不太清楚,所以找出网易学堂的VC++课程进行学习http://tech.163.com/special/0009159F/vc.html =========================================== [第二课 C++经典语法与应用 类的编写与应用] =========================================== 构造函数:采用类的方式来保证它的唯一性,取个类名,没有返回值,对类里的变量进行初始化。 析构函数:回收内存,没有返回,没有参数。 例: 1. #include<iostream> 2. using namespace std; 3. class Point{ 4. public: 5. int x; 6. int y; 7. Point(){ //构造函数,同,类名 8. x = 0; 9. y = 0; 10. } 11. 12. Point(int a, int b){ //构造函数,带参 13. x = a; y = b; 14. } 15. 16. ~Point(){ //析构函数,取反符号+类名 17. } 18. 19. void output(){ 20. cout<<x<<endl<<y<<endl; 21. } 22. void output(int x, int y){ 23.

READ MORE

VS2010 C++ MFC框架学习笔记2 - 创建一个简单的加法计算器(2)

VS2010 C++ MFC框架学习笔记2 - 创建一个简单的加法计算器(2) Title: VS2010 C++ MFC框架学习笔记2 - 创建一个简单的加法计算器(2) VS2010 C++ MFC框架学习笔记1 - 创建一个简单的加法计算器(1)里,我们入门了MFC的基本概念,现在我们要实践一个简单的加法器了。 ======================================== MFC程序: 创建对话框模板和修改对话框属性 什么是对话框 C++ Windows应用程序有很多类型,比如单文本类型,多文本,对话框,等等。一个360安全助手就是一个对话框,只不过做了很多美工。 Windows计算器也是一个对话框类型的程序。 创建对话框主要分两大步, 创建对话框资源:主要包括创建新的对话框模板、设置对话框属性和为对话框添加各种控件; 生成对话框类: 主要包括新建对话框类、添加控件变量和编写控件的消息处理函数等。 第一步:创建对话框资源 创建基于对话框的应用程序框架 创建对话框模板 修改对话框属性 添加各种控件 第二步:生成对话框类 | | | | | | | | | | | |

READ MORE

VS2010 C++ MFC框架学习笔记1 - 创建一个简单的加法计算器(1)

VS2010 C++ MFC框架学习笔记1 - 创建一个简单的加法计算器(1) ======================================= MFC程序框架及运行流程介绍 利用C++ MFC (微软基础类库)创建windows应用程序可以比较方便,因为微软打包好了很多基础东东,比如控件。 首先MFC写的程序的运行大致原理,要了解。 MFC应用程序的运行流程与SDK程序是类似的,都是先进行一些初始化过程,再注册并创建窗口,然后显示、更新窗口,最后进入消息循环,消息都由窗口过程函数处理。 在运行流程上有基本的掌握即可。 ======================================== MFC程序消息驱动机制 Windows应用程序是消息驱动的。在MFC软件开发中,界面操作或者线程之间通信都会经常用到消息,通过对消息的处理实现相应的操作。比较典型的过程是: 用户操作窗口, 然后有消息产生, 送给窗口的消息处理函数处理, 对用户的操作做出响应。 什么是消息 窗口消息一般由三个部分组成: 1) 一个无符号整数,是消息值; 2) 消息附带的WPARAM类型的参数; 3) 消息附带的LPARAM类型的参数。 其实我们一般所说的消息是狭义上的消息值,也就是一个无符号整数,经常被定义为宏。 什么是消息映射机制 MFC使用一种消息映射机制来处理消息,在应用程序框架中的表现就是一个消息与消息处理函数一一对应的消息映射表,以及消息处理函数的声明和实现等代码。当 窗口接收到消息时,会到消息映射表中查找该消息对应的消息处理函数,然后由消息处理函数进行相应的处理。SDK编程时需要在窗口过程中一一判断消息值进行相应的 处理,相比之下MFC的消息映射机制要方便好用的多。 Windows消息分类 先讲下Windows消息的分类。Windows消息分为系统消息和用户自定义消息。 Windows系统消息有三种: 1.标准Windows消息。除WM_COMMAND外以WM_开头的消息是标准消息。例如,WM_CREATE、WM_CLOSE。 2.命令消息。消息名为WM_COMMAND,消息中附带了标识符ID来区分是来自哪个菜单、工具栏按钮或加速键的消息。 3.通知消息。通知消息一般由列表框等子窗口发送给父窗口,消息名也是WM_COMMAND,其中附带了控件通知码来区分控件。 CWnd的派生类都可以接收到标准Windows消息、通知消息和命令消息。命令消息还可以由文档类等接收。 用户自定义消息是实际上就是用户定义一个宏作为消息,此宏的值应该大于等于WM_USER,然后此宏就可以跟系统消息一样使用,窗口类中可以定义它的处理函数。 消息映射表 除了一些没有基类的类或CObject的直接派生类外,其他的类都可以自动生成消息映射表。下面的讲解都以HelloWorld的CMainFrame为例。消息映射表如下: C++代码: 1. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx) 2. ON_WM_CREATE() 3. ON_COMMAND(ID_VIEW_CUSTOMIZE, &CMainFrame::OnViewCustomize) 4. ON_REGISTERED_MESSAGE(AFX_WM_CREATETOOLBAR, &CMainFrame::OnToolbarCreateNew) 5. ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnApplicationLook) 6. ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7,&CMainFrame::OnUpdateApplicationLook) 7. ON_WM_SETTINGCHANGE() 8. END_MESSAGE_MAP() 在BEGIN_MESSAG_MAP和END_MESSAGE_MAP之间的内容成为消息映射入口项。消息映射除了在CMainFrame的实现文件中添加消息映射表外,在类的定义文件MainFrm.h中还会添加一个宏调用: DECLARE_MESSAGE_MAP() 一般这个宏调用写在类定义的结尾处。 添加消息处理函数 如何添加消息处理函数呢?不管是自动还是手动添加都有三个步骤: 1.在类定义中加入消息处理函数的函数声明,注意要以afx_msg打头。例如MainFrm.h中WM_CREATE的消息处理函数的函数声明: afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 2.在类的消息映射表中添加该消息的消息映射入口项。例如WM_CREATE的消息映射入口项:ON_WM_CREATE()。 3.在类实现中添加消息处理函数的函数实现。例如,MainFrm.cpp中WM_CREATE的消息处理函数的实现: int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { .

READ MORE

Ruby学习笔记7: 添加身份验证(adding Authentication)

我们已经完成了Category & Product页面内容的增删改查,再加入一个身份验证即可成为一个较完整的Rails App了。本文就来完成这个任务。 We now need to give users the ability to sign up for the app so that they can do things like purchase products or leave reviews. To do this, we'll add a user authentication system to the app.看下图: 1. install a gem called Devise. Earlier, we learned about bundler and how it sets up our gems. To add authentication, we'll install a gem called Devise. We've gone ahead and added Devise for you in your Gemfile.

READ MORE

Ruby学习笔记6: 动态web app的建立(3)--多Model之间的交互

We first built a static site which displayed a static image using only a Controller and a View. This is our Etsy landing page page. Then we built the Categories page, with a Model (manages data), Controller (manages decisions) and View (manages display). The Categories pages allows us to display dynamic content so users can browse through different Categories that can be updated regularly. Now we will build the Products page, which will allow users to browse through Products in our Etsy app.

READ MORE

Ruby学习笔记5: 动态web app的建立 (2)

上一节里,我们搭建了一个数据库的结构,并用index验证了request-response cycle,如下图: 1. Add show method into Controller 这一节,我们要继续丰富我们的controller: While index gave all categories, show allows us to access one category. This this is helpful when we want to show just one Category at a time in our Etsy app. The show method works like this. we write: [ruby] view plaincopy def show    @category = Category.find(params[:id])    #it's a hash that we use to find an object by its unique id end  The show method finds a single category of a given id and stores it in @category.

READ MORE

Ruby学习笔记4: 动态web app的建立

Ruby学习笔记4: 动态web app的建立 We will first build the Categories page. This page contains topics like Art, Home & Living, and Kids, so our users can browse through categories and find what they like. Each Category in our site will need to store information about itself, such as a name and an image. Our Category Model is what stores information about our Categories. Remember that our Model manages the data in our app. =============================== 1. Build Model 2. Build Migration Table

READ MORE

Ruby学习笔记3:Rendering(渲染)和 Redirect(重定向)

1. Rendering Rendering 是特别要告诉Controller 中的methods,要哪个view file来显示给用户。We can show Views as we wish! Earlier each one of our Views rendered based on the method specified in the Controller. If we write the following method: def render_demo end Rails will always look for the render_demo View. But if we write: def render_demo render :home end We can tell Rails to render the home View, as long as we have one. Rendering just tells Rails to show the View we specify. 这里这个例子是这样的:

READ MORE