C++学习总结 简单版本的

来源:互联网 发布:数据保护线缠绕图解 编辑:程序博客网 时间:2024/06/16 05:57

 

MSG windows消息结构体 (参看MSDN)

句柄(HANDLE)的概念:
操作系统要管理和操作的资源的标识。类似于指针,按照类型可以分为
图标句柄(HICON)
光标句柄(HCURSOR)
窗口句柄(HINSTANCE)
操作系统给每一个窗口指定一个唯一的标识号,即窗口句柄


windows的入口函数:

WinMain函数

设计windows窗口步骤:

1.设计窗口类
WNDCLASS(查看MSDN)
   窗口类型:程序中经常要使用到一类变量,这个变量的每一位(bit)都对应某一种特性。当该变量的某位为1时,表示该位对应的那种特性,为0,则没有。某几位同时为1时,表示同时具有几种特性的组合。一个变量中的哪一位代表什么意义,不需要记忆。可以去查看一些宏定义
如:
CS_VREDRAW=0X0001
CS_HREDRAW=0X0002
CS_DBLCLKS=0X0008
CS_NOCLOSE=0X0200

他们的共同点就是只有一位为1,其余都为0.如果希望有组合特性,可以使用或运算 |
如 style=CS_VREDRAW | CS_HREDRAW | CS_NOCLOSE

如果希望在原有的特征上去掉其中一个特征,可以用取反 (~) 之后再进行与(& )运算就能够实现,如去掉CS_NOCLOSE 特征   style & ~CS_NOCLOSE


2.回调函数:当操作系统收到消息的时候,要调用一个函数来处理。这个函数在应用程序中定义
3.注册窗口类
RegisterClass(&wndclass)
4.创建窗口
5.显示及更新窗口

//////////////////////////////////////////////////
c++语法

c++提供三个对象cin,cout,cerr三个指针

cin与>>一起使用
cout与<<一起使用

c++中结构体中可以有函数

结构体和类相似,主要区别在访问控制上
结构体中所有的成员缺省都是public的。而类是私有的


c++的类属性不会自动初始化

析构函数 ~类名,不允许带参数

this指针

类继承的访问性
c++中继承的时候可以按public ,protected,private来继承

基类访问权限   特性   子类访问特性
public    public   public
protected     protected
privagte     不能访问
*****************************************************
public    protected protected
protected     protected
private      不能访问
******************************************************
public    private   private
protected     private
private      不能访问
*******************************************************


c++中的引用必须在定义的时候就定义
int a=9;
int& b=a;

引用和指针的区别:引用本身不需要占用内存。而指针需要内存存放

***********************************************************
c++中类的声明和实现可以分离
头文件(.h)中做声明,源文件(.cpp)中做实现

如:

Student.h
********************
class Student
{
private:
   char *name;
   int age;
public :
   Student(char *name,int age);
   Student();
   void shout();
};
////////////////////////////////////////////////////

Student.cpp
***********
#include "Student.h"
#include<iostream.h>
Student::Student()
{
this->name="";
this->age=0;
cout<<"无参构造函数"<<endl;
}
Student::Student(char *name,int age)
{
this->name=name;
this->age=age;
cout<<"两个参数构造函数"<<endl;
}
void Student::shout()
{
cout<<"my name is "<<this->name<<"   age is :"<<this->age<<endl;
}


////////////////////////////////////////////////////////
MFC
第一,MFC 中的大部分类都是从基类 CObject 中继承下来的。该类包含有大部分MFC类所通用的数据成员和成员函数。
第二,CWinApp 类是在你建立应用程序是要用到的,并且任何程序中都只用一次。
第三:CWnd 类汇集了 Windows 中的所有通用特性、对话框和控制。CFrameWnd 类是从 CWnd 继承来的,并实现了标准的框架应用程序。
第四:CDialog 可分别处理无模式和有模式两种类型的对话框。从 CWnd 继承来的
第五:CView 是用于让用户通过窗口来访问文档。从 CWnd 继承来的
第六:Windows 支持六种控制类型: 静态文本框、可编辑文本框、按钮、滚动条、列表框和组合框(一种扩展的列表框)。


///////////////////////
Helloworld制作过程

a.一个应用程序对象,用来初始化应用程序并把它挂到 Windows 上。该应用程序对象处理所有的低级事件。
b.一个窗口对象来作为主窗口。
C.一个静态文本对象,用来显示“hello world”

////////////////////////////////////////////////////////////////////////
#include<afxwin.h>

class CMyFrame:public CFrameWnd
{
public:
CMyFrame()
{
   Create(NULL,"你好世界",WS_OVERLAPPEDWINDOW,rectDefault,NULL,NULL,0,NULL);
   CStatic *s=new CStatic();
   RECT rec;
   rec.left=0;
   rec.top=0;
   rec.right=500;
   rec.bottom=50;
   s->Create("你好世界!Helloworld",WS_VISIBLE|SS_CENTER,rec,this);
}
};

class CMyApp:public CWinApp
{
public:
CMyApp()
{

}
BOOL InitInstance( )
{
   m_pMainWnd = new CMyFrame();
   m_pMainWnd->ShowWindow(m_nCmdShow);
   m_pMainWnd->UpdateWindow();
   return TRUE;  
}
};

CMyApp myapp;
/////////////////////////////////////////////////////////////////////////

绘图:
//////调用api绘图

HDC hdc=::GetDC(this->m_hWnd);//获得句柄
::MoveToEx(hdc,p.x,p.y,NULL);
::LineTo(hdc,point.x,point.y);
CView::OnLButtonUp(nFlags, point);
::ReleaseDC(this->m_hWnd,hdc);//释放句柄

//////利用CDC类指针和CWin类成员函数获取DC。
CDC *dc=this->GetDC();
dc->MoveTo(this->p);
dc->LineTo(point);
this->ReleaseDC(dc);

///////利用CClientDC对象。(CClientDC类从CDC类派生来的)
CClientDC dc(this);
dc.MoveTo(p);
dc.LineTo(point);

///////利用CWindowDC对象。(CWindowDC类从CDC类派生来的)
CWindowDC dc(this);//
dc.MoveTo(p);
dc.LineTo(point);

////////GetParent()得到父窗口指针;GetDesktopWindow()得到屏幕窗口指针。
CWindowDC dc(GetDesktopWindow());//
dc.MoveTo(p);
dc.LineTo(point);

/////////////利用画笔改变线条颜色和类型:
CPen pen(PS_DOT,1,RGB(0,255,0));//构造画笔对象
CClientDC dc(this);CPen *pOldPen=dc.SelectObject(&pen);//将画笔选入DC
dc.MoveTo(p);
dc.LineTo(point);
dc.SelectObject(pOldPen);//恢复先前的画笔

/////////////使用画刷(通常利用画刷去填充矩形区域):
CBrush brush(RGB(255,0,0));//构造画刷对象
CClientDC dc(this);
dc.FillRect(CRect(p,point),&brush);//用指定的画刷去填充矩形区域


//不间断绘图
a.设置标识,保存鼠标左键是否按下。
   在鼠标左键按下的时候,把当前的坐标保存起来,同时把标识位设置成TRUE
b.鼠标弹起的时候
   在鼠标左键按下的时候,把当前的坐标保存起来,同时把标志位设置成FALSE
c.添加鼠标移动事件
if(this->m_isButtonPress)
{
   CPen pen(PS_DOT,1,RGB(0,255,0));//构造画笔对象
   CClientDC dc(this);
   CPen *pOldPen=dc.SelectObject(&pen);//将画笔选入DC
   dc.MoveTo(p);
   dc.LineTo(point);
   dc.SelectObject(pOldPen);//恢复先前的画笔
}
this->p=point;
//////////////////////////////////////////////////////////////////////////////////////
字插入符。在View类中添加 WM_CREATE
CreateSolidCaret() //创建
ShowCaret() //显示,因为默认的是不显示的

原创粉丝点击