文档库 最新最全的文档下载
当前位置:文档库 › Lesson06 消息处理

Lesson06 消息处理

Lesson06 消息处理
Lesson06 消息处理

Lesson 06 消息处理

Windows程序是基于消息,事件驱动的。本课学习消息处理和消息映射的建立方法。

一、用ClassWizard处理消息

ClassWizard(类向导)是VisualC++6.0集成开发环境所提供的工具之一。使用Class Wizard可以很方便的为应用程序添加消息处理,ClassWizard会自动为开发人员完成大部分重复的程序代码。

1.Class Wizard

在ClassWizard对话框中一共有5个选项卡,其中第一个选项卡Message Maps(消息映射)就是用来添加各种消息处理的。在消息映射选项卡中主要有以下5个控件,从左到右,从上到下依次为:

①Projects(工程名)组合框

允许用户选择当前工作区中包含的工程。

②Class Name(类名)组合框

允许用户选择当前工程中能够处理消息的类。单击组合框右边的下拉按钮,可以对要添加消息处理的类进行选择。

③Objects Ids(对象ID号)列表框

列出当前选中的类名及相关的ID。对于主窗口和视图来说,这些ID为菜单项的标识;对于对话框来说,这些ID为对话框所含控件的ID。

④Messages(消息)列表框

列出当前所选类及所选择ID可以重写的虚方法以及可接收(或者发送)的消息。

⑤Member Functions(成员函数)列表框

列出Class Name组合框中当前选中的类所包含的所有成员函数。用户可以增加、删除成员函数,也可以对成员函数进行编辑。函数前面有“V”标志的表示该函数为虚函数,函数前面有“W”标志的表示该函数为Windows消息处理函数。

除此以外,消息映射选项卡的右边还有4个按钮:

●Add Class…(添加类)按钮

此按钮允许用户往工程里添加新类。在按钮边有一个向下的小箭头,表明按些按钮将弹出一个菜单。菜单中包含两项:New…菜单项可以新建一个类;From a type lib…则用于从一个类库中导入类。

●Add Function(添加函数)按钮

它允许用户往Member Functions列表框中加进一个新的消息处理成员函数,该新增成员函数被用来响应Message Maps列表中当前所选中的消息或者虚方法。

注意:新添加的函数被添加到Class Name(类名)组合框中所选择的当前类中。因此,在添加消息处理时一定要首先选择好要添加的类。

●Delete Function(删除函数)按钮

用于删除Member Functions列表框中所选中的成员函数。

●Edit Code(编辑代码)按钮

它允许用户对Member Functions中所选中的成员函数进行编辑。如果单击此按钮,此时VisualC++6.0将首先关闭MFC Class Wizard对话框,然后将选中的成员函数打开在集成开发环境中的编辑窗口中,以方便开发人员进行编辑。

2.为菜单项添加消息处理

打开2DCAD工程,菜单项添加消息处理:

第1步:选择V iew菜单下的Class Wizard…菜单项。

第2步:在弹出的对话框中选择Message Maps选项卡,首先在Class Name下拉列表中选择Cmy2DCADView类(即视图类),然后在Object Ids列表模式中选择ID_GRAPH_POINT,此时Messages列表框中只有两个消息:COMMADA(命令消息)和UPDATE_COMMAND_UI(更新命令用户界面消息)。

菜单项COMMAND消息在用户单击某个菜单项的时候发送,当单击某个菜单希望执行某种功能时处理这个消息,而UPDATE_COMMAND_UI消息则是当菜单(或者工具栏)需要重新绘制或者更新时由系统发送,当需要维护用户界面状态时处理这个消息。

第3步:在Message列表框中双击COMMAND项(或者选中COMMAND)然后单击Add Function按钮,在这个对话框中,给出了默认的成员函数名,当然也可以改为其他名字。

默认函数名是根据ID名称来规定的,遵循菜单项命名规则,可以给所添加的消息处理函数一个规范易懂的默认函数名。

第4步:按OK接受默认的成员函数名。OnGraphPoint成员函数就出现在MemberFuctions 列表框中,函数名后显示了所映射的消息。

此时就已经为画点菜单项添加了消息处理函数,下面来编写函数代码。

第5步:单击ClassWizard对话框右边的Edit Code按钮,此时ClassWizard对话框被关闭,同时在集成开发环境的编辑窗口中,出现了OnGraphPoin函数的代码。修改OnGraphPoin 函数如下:

void CMy2DCADView::OnGraphPoint()

{

CClientDC dc(this);

//在视图区中输出文本“画点”

dc.TextOut(100, 100, "画点");

}

3.更新用户界面

①UPDATE_COMMAND_UI消息

一般情况下,菜单项和工具栏按钮都不止一种状态,应用程序经常需要根据程序运行的内部状态来对菜单项和工具栏按钮的状态作相应的改变。

在通常Windows应用程序中还会看到,菜单项的左边可能还会有检查标记(一个钩或一个点,或者菜单项左边的图标处于按下状态),表示它是选中的还是未选中的。

在以往使用Windows API编辑时,要完成用户界面的更新维护,需要对每个状态的变化情况进行一一处理,工作非常繁琐而且容易遗漏。而在MFC应用程序框架中,则引入了更新命令用户界面消息UPDA TE_COMMAND_UI,使得用户界面的更新维护变得非常容易。

UPDATE_COMMAND_UI是专门用于处理菜单项和工具栏按钮更新的消息,当菜单(或者工具栏按钮)需要重新绘制或者更新时由系统发送。每一个菜单命令都对应于一个更新命令用户界面消息。

同COMMAND消息一样,可以为更新命令用户界面消息编写消息处理函数来处理用户界面(包括菜单和工具栏按钮)的更新。如果一个命令ID有多个用户界面对像(比如2DCAD 工程中对应于ID_GRAPH_POINT有一个菜单项和一个工具栏按钮),那么两者都被发送给同一个消息处理函数。这样,对于所有等价的用户界面对象来说,可以把用户界面更新代码放在同一个地方,方便管理。

②为菜单项添加选中标记

第1步:按Ctrl+W键,弹出MFC ClassWizard对话框,选择Message Map选项卡。

第2步:选Cmy2DCADView类,然后在Object Ids列表框中选择ID_GRAPH_POINT。

第3步:在Message列表框中双击UPDA TE COMMAND_UI项(或者选中该项,然后

单击Add Function按钮),此时弹出的Add Member Function对话框。单击OK按钮接受默认的成员函数名为OnUpdateGraphPoint。

第4步:单击Class Wizard对话框右边Edit Code按钮,修改OnUpdateGraphPoint函数如下:

void CMy2DCADView::OnUpdateGraphPoint(CCmdUI* pCmdUI)

{

pCmdUI->SetRadio(TRUE);

}

编译并运行程序。

③CCmdUI类

查看OnUpdateGraphPoint函数代码,可以看到函数带有一个参数:CCmdUI*pCmdUI。这个参数是一个指向CcmdUI类对象的指针,程序中使用CcmdUI类的成员函数SetRadio 给菜单项画上了一个点,表示选中。

在MFC类库中,CCmdUI没有基类,是一个独立的类。CCmdUI类只在ON_UPDATE_COMMAND_UI处理函数内使用,实现对应用程序的界面对象(如菜单、控件、工具栏)等的更新。CCmdUI类封装了一些更新用户界面的函数。可以在OnUpdateGraphPoint函数中CcmdUI的成员函数,详细的成员函数说明可以查阅MSDN帮助文件。

④维护界面

给应用程序增加一个布尔变量,来标识画点项是否被选中,然后在程序中根据这个布尔变量的状态来控制是否设置菜单项的选中标记。具体步骤如下:

第1步:添加成员变量

在Class V iew(类)窗口中的Cmy2DCADView上单击鼠标右键,从弹出的右键菜单中选择Add Member V ariable…项,此时弹出添加成员变量对话框。输入成员变量的类型的名字,然后单击OK按钮,这样就为视图类添加了一个名为m_bIsPoint的BOOL型公有成中员变量。

第2步:初始化成员变量

成员变量的初始化一般都在类的构造函数中完成的,将CMy2DCADView构造函数在编辑窗口中打开,添加灰色所示的赋值语句,将布尔变量的初始值设为假:第3步:在程序中改变布尔变量的状态

当单击2DCAD的画点按钮(或者菜单项)时,程序处于画点状态,此时应该将布尔变量m_bIsPoint设为真(TRUE)。

因此,在Class View中双击CMy2DCAD View下的命令消息处理成员函数OnGraphPoint,在函数中添加如下的语句:

m_bIsPoint = TRUE;

第4步:使用布尔变量控制用户界面的更新

在Class View中双击CMy2DCADView下的更新命令用户界面消息处理成员函数OnUpdateGraphPoint,修改变函数下:

void CMy2DCADView::OnUpdateGraphPoint(CCmdUI* pCmdUI)

{

pCmdUI->SetRadio(m_bIsPoint);//根据布尔变量的值控制用户界面更新}

编译并运行2DCAD程序,看结果。

⑤用户界面更新原理

更新命令UI消息只适用于弹出式菜单的菜单项,而对顶层菜单项则不适用,在显示弹出式菜单时,框架按视图→文档→框架窗口→应用程序的传递顺序发送弹出式菜单的所有菜单项的更新命令UI消息。如果菜单项有一个更新处理函数,则它被调用进行更新;如果没有,则框架检查命令处理函数是否存在。若不存在,则使菜单变灰。因此为了使一个菜单项有效,则必须有一个菜单处理函数或更新处理函数。

CcmdUI类只在ON_UPDA TE_COMMAND_UI处理函数内使用,实现对应程序的接口对象(如菜单、控件、工具栏等)的更新。

当用户拉下应用程序的一个菜单时,每个菜单项都需要知道它应该显示为使能状态还是禁止状态(变灰)。菜单命令通过ON_UPDA TE_COMMAND_UI处理函数来提供这个信息。可以利用Class Wizard来浏览应用程序中的命令用户界面对象,并为每个处理函数创建一个消息映射项和函数原型。

当菜单项被拉下时,应用程序的框架查找并调用各个ON_UPDA TE_COMMAND_UI处理函数,每个处理函数都调用CCmdUI的成员函数。例如Enable和Check,然后应用程序的框架正确地显示各个菜单项。

按钮的命令更新机制与菜单的命令界面更新机制类似,只是工具栏按钮的命令界面更新在空闲循环时完成。

4.删除消息处理函数

一般来说,可以有两种方式删除一个消息处理函数:

①使用ClassWizard

使用ClassWizard来删除。

打开ClassWizard,进入Message Map选项卡,在Class Name(类)组合框中选中要删除消息处理函数的类,然后在Membwr Functions(成员函数)列表框中选中需要删除的消息处理函数,单击对话框右边的Delete Function(删除函数)按钮,就可以将该函数删除。使用ClassWizard删除完毕后,在CPP文件中的函数体依然存在,必须依靠大家手工删除,否则编译时会出错。

②使用Class View中的右键菜单

使用Class V iew中的右键菜单,可以删除类的任何成员函数,当然也包括消息处理函数。

在Class V iew中,找到将要删除的消息处理成员函数,然后在成员函数名上单击鼠标右键,在弹出的右键菜单中选择第三个菜单项Delete,就可以很方便地将该函数删除掉。

与第一种方法不同的是,在CPP文件中的函数体虽然存在,但已经被加了注释符号,不会影响程序的编译和连接。第二种方法比第一种方法更加方便可靠。

二、消息映射的建立

在Windows系统中,一个消息包含有一个消息名称(UINT)和两个参数(WPARAM,LPARAM)。当用户进行了输入或者窗口的状态发生改变时系统都会发送消息到某一个窗口,例如当单击某个菜单项之后会有WM_COMMAND消息发送,WPARAM的高字节当中是命令消息的ID号,对菜单来说就是菜单ID。

一个消息必须由一个窗口接收。必须有一个窗口函数(或者窗口过程)来处理这个消息。如果希望在窗口中进行图形输出就必须对WM_PAINT进行处理。而应用程序未处理的消息则由Windows系统默认的窗口函数处理。因为有了这个默认的窗口函数,许多应用程序不关心的消息都可以交给Windows系统自己去处理。

每个Windows应用程序都有一个WinMain函数来建立主窗口和消息循环,同时还有一个主窗口函数负责对消息进行处理。在主窗口函数中,处理消息所使用的是switch-case语句。

在基于MFC类库的应用程序中(比如2DCAD程序),既没有WinMain函数,也没有处理消息的窗口函数。实际上,WinMain函数依然存在,只不过是放在了MFC类库的源代码中,开发人员就不用自己编写WinMain函数了。而处理消息的窗口函数也被封装了起来,switch-case语句使用消息映射(Message Map)来代替。使用Class Wizard为菜单项添加消息处理时,实际上就是为类添加消息映射。

1.消息映射

简单地说,消息映射可以看做是一种对应关系,它告诉应用程序和Windows系统每一个消息由哪个消息处理函数来处理。当应用程序的某个窗口(或者某个类)接收到一个消息时,就在类的消息映射中查找这个消息的处理函数,如果有,系统就调用这个函数处理消息。如果类中没有这个消息的处理函数,就把消息交给基类处理。如果基类的消息映射中也没有这个消息的处理函数,则消息再次交给基类的基类处理。如果都没有处理,则由Windows的默认消息处理函数处理。

可以简单的将消息映射看做是一个消息和一个函数的对应关系,如同为画点菜单添加的消息处理,单击菜单项所发送的WM_COMMAND命令消息就与CMy2DCADView类中的成员函数OnGraphPoint建立了一一对应的关系,单击该菜单项,系统就会自动调用OnGraphPoint函数。

2.消息映射宏

大部分的工作都是由Class Wizard完成的,用户所做的工作仅仅是在生成的程序框架中添加了相应的处理代码。一个类中消息映射的建立涉及到一组宏。

消息映射宏介绍如下:

■DECLARE_MESSAGE_MAP

声明消息映射的宏,用于在类的头文件(.h)中声明类中含有消息映射。

■BEGIN_MESSAGE_MAP

在类的CPP文件中使用,标记消息映射的开始。这个宏带有两个参数,第一个参数是拥有此消息映射表的类名,第二个参数是此类的基类名。

■END_MESSAGE_MAP

在类的CPP文件中使用,标记消息映射的结束。BEGIN_MESSAGE_MAP和END_MESSAGE_MAP必须成对出现。

在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间有两个非常奇怪的注释行://{{AFX_MSG_MAP(CMy2DCADView)和//}}AFX_MSG_MAP,这是由Class Wizard 添加的用来标记由ClassWizard管理的消息映射。在V isual C++的编辑窗口中,两个注释之间的代码都是灰色的,这些代码都是由Class Wizard添加的。

除了这3个宏以外,在 BEGIN_MESSAGE_MAP和END_MESSAGE MAP之间还有两个宏来添加具体的消息映射关系:

■ON_COMMAND

用于建立特定的命令消息和类的一个成员函数之间的对应关系。这个宏带有两个参数,第一个参数指明发送WM_COMMAND命令消息的菜单项ID号,第二个参数是消息处理函数的名字。WM_COMMAND命令消息全部都用ON_COMMAND宏来进行处理。

■ON_UPDATE_COMMAND_UI

用于建立特定的更新命令用户界面消息和类的一个成员函数之间的对应关系。这个宏的参数含义和ON_COMMAND宏类似。

注意:宏是一些代码的替换,一般都使用大写字母。在MFC中,定义了许多宏,这些宏声明了一些应用程序框架,使得程序变得简洁。

除了前面提到的MFC消息映射宏以外,还有许多其他的消息映射宏用来建立消息映射,如对应于窗口创建消息WM_CREA TE,其消息映射宏为ON_WM_CREA TE,对应的消息处理函数为OnCreate。这些窗口消息的消息映射宏都是不带参数的。

3. 能够处理消息的类

消息是发送给一个窗口的。在MFC中,CWnd类封装了窗口,因此,CWnd类及其派生类(比如2DCAD程序中的框架窗口类和视图类CMy2DCADView)都可以接收并处理消息。

与窗口无关的类,如果也想处理消息,就必须派生自MFC类库中的CCmdT arget (命令目标)类。但是,非窗口类只能处理WM_COMMAND命令消息(也就是单击菜单或者工具栏按钮所发送的消息)。

在类的头文件中声明DECLARE_MESSAGE_MAP;在类的执行文件(CPP文件)中使用BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏。

三、手动添加消息处理

1.Class Wizard 生成的消息映射代码分析:

①消息处理函数的声明

在.h文件中,消息函数被放在两个注释之间,与BEGIN_MESSAGE_MAP和END_MESSAGE_MAP消息映射宏之间的注释行一样,这两个注释行也是ClassWizard自动添加的,所有ClassWizard添加的消息处理函数的声明都在这两上注释行之间。

在消息处理函数前面还使用了一个afx_msg关键字,表明此成员函数是一个消息处理函数。函数没有返回值,也不含有参数。

②消息映射的建立

在类的CPP文件中,在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP消息映射宏之间,使用ON_COMMAND宏建立起消息映射关系:

这个语句是灰色的,使用ON_COMMAND宏表明ID_GRAPH_POINT菜单项所对应的消息处理函OnGraphPoint。

③消息处理函数的定义

消息处理函数的函数体定义在类的CPP文件中,一般都添加在CPP文件的最后。

函数的声明和定义是任何一个函数都必需的,不同之处在于消息处理函数需要使用相应的消息映射宏来与对应的消息建立对应关系,这样的应用程序才能够在接收到消息时调用相应的消息处理函数。

2.手动为画线菜单添加消息处理:

为画线菜单项手动添加名为OnGraphLine的消息处理函数,具体步骤如下:

①在类的头文件中声明消息处理函数

打开2DCAD工程,打开CMy2DCADView视图类的头文件2DCADView.h,在头文件的后部添加如下代码:

……

protected:

//{{AFX_MSG(CMy2DCADView)

afx_msg void OnGraphPoint();

afx_msg void OnUpdateGraphPoint(CCmdUI* pCmdUI);

//}}AFX_MSG

afx_msg void OnGraphLine();

DECLARE_MESSAGE_MAP()

……

注意:手动添加的消息处理函数一般不要放在两个注释行间的灰色代码部分,注释行间的消息处理函数是由ClassWizard管理的。

②在类的CPP文件中(消息映射宏之间)手工添加消息映射

打开视图类的CPP文件2DCADView.cpp,在文件的前面部分BEGIN_MESSAGE_MAP 和END_MESSAGE_MAP宏之间添加如下代码部:

……

BEGIN_MESSAGE_MAP(CMy2DCADView, CView)

//{{AFX_MSG_MAP(CMy2DCADView)

ON_COMMAND(ID_GRAPH_POINT, OnGraphPoint)

ON_UPDA TE_COMMAND_UI(ID_GRAPH_POINT, OnUpdateGraphPoint)

//}}AFX_MSG_MAP

ON_COMMAND(ID_GRAPH_LINE, OnGraphLine)

END_MESSAGE_MAP()

……

同样需要注意一般不要把自己添加的代码写入两个注释行之间。

③在类的CPP文件中定义消息处理函数体

打开2DCADView.cpp,在文件的最后面添加如下的函数体定义代码:

//手动添加的消息映射函数

void CMy2DCADView::OnGraphLine()

{

CClientDC dc(this);

//在视图区中输出文本“画线”

dc.TextOut(100, 100, "画线");

}

编译运行2DCAD程序,工具栏上的画线按钮由于已经添加了消息理而变为可用。此时单击画线按钮,在视图区中就输出了文本“画线”;单击画点按钮,输文本“画点”。

注意:由于是手动添加的消息处理,在ClassWizard中看不见已经手动添加的消息处理函数。

3.完善菜单维护

使用ClassWizard为画线菜单项的UPDA TE_COMMAND_UI消息添加消息处理函数OnUpdateGraphLine。

首先为视图类添加一个新的布尔变量m_bIsLine来标志是否画线。添加完成员变量以后,在类的构造函数中进行初始化。修改视图类的构造函数如下:

CMy2DCADVie w::CMy2DCADVie w()

{

// TODO: add construction code here

m_bIsPoint = FALSE;

m_bIsLine = FALSE;

}

修改OnGrapPoint函数如下:

void CMy2DCADView::OnGraphPoint()

{

CClientDC dc(this);

//在视图区中输出文本“画点”

dc.TextOut(100, 100, "画点");

m_bIsPoint = TRUE;//允许画点

m_bIsLine = FALSE;

}

修改OnGraphLine函数如下:

//手动添加的消息映射函数

void CMy2DCADView::OnGraphLine()

{

CClientDC dc(this);

//在视图区中输出文本“画线”

dc.TextOut(100, 100, "画线");

m_bIsLine = TRUE;//允许画线

m_bIsPoint = FALSE;

}

修改OnUpdateGraphLine函数如下:

void CMy2DCADView::OnUpdateGraphLine(CCmdUI* pCmdUI)

{

pCmdUI->SetRadio(m_bIsLine);//根据布尔变量的值控制用户界面更新}

编译并运行2DCAD程序。

注意:在应用程序中,经常使用BOOL变量来标识某个菜单项状态。当程序中有许多同类型的菜单时,使用BOOL变量变会变得十分繁琐,此时可以用一个整型变量来代替多个BOOL变量。

四、添加右键菜单

除了常规菜单以外,Windows应用程序常使用右键菜单(也叫上下文菜单、快捷菜单等),使得应用程序的交互变得更加方便。

1.使用组件画廊

右键菜单在Windows应用程序中使用非常频繁,V isual C++6.0将右键菜单作为一个常用的组件提供给用户。使用这个组件,开发人员无需编写任何代码,就可以在应用程序中弹出右键菜单。

Visual C++6.0提供的组件被放在一个名叫Component Gallery(组件画廊)的组件库中。当需要向应用程序添加某个组件时,单击Project|Add to Project|Components and Controls…菜单项,做选择。

Visual C++6.0提供的常用组件分为两类:Registered ActiveX Controls和V isual C++ Components。Registered ActiveX Controls用于往应用程序中添加注册过的ActiveX控件,而Visual C++ Components包含了Windows应用程序中经常使用的一些标准特性,如:右键菜单、剪贴板、对话条、启动画面(Splash Windows)、定制状态条(带时间显示)等等。

Component Gallery是一个组件库,它保存着以后可共享和重用的代码。这些代码包括由Visual C++6.0自带的组件和从用户工程中增加到Gallery中去的用户自定义组件。当开发人员将某个组件加入到应用程序中时,Component Gallery将自动在工程文件中加入该组件所需要的CPP、H文件以及资源,并自动修改源程序,插入必要的代码。

为2DCAD工程插入一个右键菜单,当用户在视图区中单击鼠标右键的时候,可以弹出一个快捷菜单。具体步骤如下:

第1步:打开2DCAD工程,单击Project|Add| toProject|Components and Controls…菜单

项,将弹出组件和控件画廊对话框。

第2步:双击列表框中的V isual C++Components目录,在该目录下选择Pon-up Menu 组件。

当选中Pop-up Menu组件时,对话框下面有关于这个组件的简单说明,如果需要更详细的说明,单击对话框中的More Info按钮,就会弹出Pop-up Menu组件的详细帮助文件。

第3步:单击Insert按钮,弹出消息框,询问用户是否要插入Pop-up Menu组件。

第4步:单击确定按钮,弹出Pop-up Menu对话框。对话框中的Add pop-up menu to下拉列表框表明所要添加右键菜单的类,选择CMy2DCADView视图类。在Menu resource ID 编辑框中给出了右键菜单资源的ID号,使用默认值。先单击OK按钮关闭Pop-up Menu对话框,然后单击Close按钮关闭Component and Controls Gallery对话框。

注意:一定要选择好向哪个类中添另右键菜单,默认情况下,右键菜单会被添加到CabuotD1g类中。

右键菜单已经添加到2DCAD程序中了。编译运行应用程序,在视图窗口中单击右键,弹出右键菜单。可见弹出式菜单中包含有三个菜单项:Cut、Copy、Paste。由于没有对应的消息处理函数,所以这些菜单项都是灰色的、非活动的。

将右键菜单修改,具有一个画点和画线菜单项,使用右键菜单也可以实现工具栏和主菜单的功能。

2.修改右键菜单

看Component Gallery为应用程序所添加的菜单资源,所添加的右键菜单资源ID为CG_IDR_POPUP_MY2_DCADVIEW。

打开Resource V iew,在资源浏览器中找到这个菜单资源。将弹出式菜单中的第一、二个菜单项修改为主菜单中【图形】菜单下的【点】和【线段】菜单项。

修改完毕直接编译运行2DCAD程序,修改右键菜单没有改动任何源代码。

3.OnContextMenu函数

使用Class V iew浏览CMy2DCADView视图类,在CMy2DCADView增加了一个OnContextMenu成员函数,它是CWnd的一个方法,用于处理鼠标右键单击,对应的Windows消息为WM_CONTEXTMENU。消息处理函数原型如下:

afx_msg void OnContextMenu(CWnd* pWnd,CPoint point);

其中参数pWnd指向右键单击窗口,而参数point则记载鼠标的位置,以便在该位置弹出右键菜单。

CMy2DCADView视图类下的OnContextMenu成员函数源代码如下:

OnCOntextMenu函数

#include "resource.h"

void CMy2DCADView::OnContextMenu(CWnd*, CPoint point)

{

// CG: This block was added by the Pop-up Menu component

{

if (point.x == -1 && point.y == -1){

//keystroke invocation

CRect rect;

GetClientRect(rect);

ClientToScreen(rect);

point = rect.TopLeft();

point.Offset(5, 5);

}

CMenu menu;//声明一个CMenu类的对象

VERIFY(menu.LoadMenu(CG_IDR_POPUP_MY2_DCADVIEW));//从资源中装

//载菜单CMenu* pPopup = menu.GetSubMenu(0);//获取弹出菜单的子菜单

ASSERT(pPopup != NULL);

CWnd* pWndPopupOwner = this;

//使用循环获取菜单的所属窗口

while (pWndPopupOwner->GetStyle() & WS_CHILD)

pWndPopupOwner = pWndPopupOwner->GetParent();

//使用TrackPopupMenu函数弹出并跟踪菜单

pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x,

point.y,pWndPopupOwner);

}

}

在OnContextMenu函数中显示一个右键菜单主要有以下4个步骤:

①声明一个CMenu类的对象并从资源中加载菜单

使用CMenu类声明一个对象menu,然后使用CMenu类的成员函数LoadMenu将菜单资源加载到menu对象中。

在MFC类库中,CMenu类派生于CObject类,它封装了许多针对菜单的操作函数。LoadMenu函数是其中之一。

②获取将要显示的弹出式菜单的子菜单

用CMenu的成员函数GetSubMenu来获取菜单的下一级子菜单。

③获取菜单的所属窗口

程序中使用一个while循环来获取菜单的所属窗口。循环的初始值就是单击右键的窗口(在这里为视图窗口),循环的条件是窗口风格中包含WS_CHILD(子窗口)风格。如果窗口为子窗口风格,则找到其父窗口进行判断,直到窗口不是子窗口风格为止。

注意:这里使用到了CWnd的两个成员函数GetStyle和GetParent,前者用来获取窗口的风格,后者用来获取窗口的父窗口。子窗口是不能拥用菜单的。视图窗口是子窗口,而视图窗口的父窗口为主框架窗口,可以拥有菜单。因此,当循环找到主框架窗口时,就终止了。

提示:非子窗口可以使用CWnd的成员函数GetMenu来获取窗口的菜单指针。比如主框架窗口调用GetMenu函数就可以获取主菜单指针。

④使用T rackPopupMenu函数显示并跟踪菜单

显示并跟踪菜单的函数是CMenu的TrackPopupMenu成员函数。

五、自定义消息

在Windows程序中,任何事件的发生都由消息来从中周旋。Windows编程的核心问题就在于如何获取和处理消息。在Windows应用程序中,用户可以自己定义消息,并对消息进行相应的处理。

1.定义消息

在Windows操作系统中,使用整数来引用消息,虽然在windows程序中所有消息都是通过它们的名字来引用的。

消息的定义通过一个#define语句将名称和数值联系起来,让windows程序开发人员可以只关心消息的名字,而不必关心消息对应的整数到底是多少。

打开V isual C++的安装目录一上的\VC98\Include\WINUSER.H头文件,在文件中查找“WM_CREA TE”,就可以看到关于消息的定义:

……

/*

* Window Messages

*/

#define WM_NULL 0x0000

#define WM_CREA TE 0x0001

#define WM_DESTROY0x0002

#define WM_MOVE 0x0003

#define WM_SIZE 0x0005

……

每个消息名字实际上同菜单的ID号类似,是一个预先定义的符号常量。使用下面的语句来定义一个用户消息:

//自定义消息

#define WM_MY_MESSAGE (WM_USER + 101)

使用(WM_USER+101)是为了避免消息被重复定义,以及和windows系统定义的消息发生冲突。WM_USER(0x0400)至0x7FFF的整数是Windows留给用户消息使用的,为保险起见,在WM_USER基础上再加上101,这样就不会有冲突的情况发生了。

用户消息的定义语句可以放在这个消息之前,在这里将用户消息的定义放在2DCADView.cpp文件中。在2DCADView.cpp文件的前面部分添加下面的代码:#define WM_MY_MESSAGE (WM_USER + 101)

注意:可以将用户消息的定义放在一个单独的文件中,然后在使用该消息的地方包含这个头文件。

2.处理自定义的消息

定义完消息后,可以给消息添加消息处理函数。由于WM_MY_MESSAGE消息是用户定义的,因此不能使用ClassWizard来添加消息处理函数,必须手动添加消息处理函数。在CMy2DCADView视图类中添加自定义消息的处理,具体步骤如下:

①消息处理函数的声明

打开视图类的头文2DCadV iew.h,在相应的位置添加消息处理函数的声明代码:

……

afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);

……

自定义的处理函数命名为OnMyMessage,是为和ClassWizard的习惯相同,一般来说,自定义消息处理函数的参数和返回值都应该是上面代码所示的类型。参数和返回值具体代表什么意思,都是由用户自定义的。

②消息映射的建立

在视图类的执行文件2DCadView.cpp,在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏之间非ClassWizard管理的映射位置添加消息映射代码:……

ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage) //自定义消息

……

使用的消息映射宏是ON_MESSAGE,这个消息映射宏专门用来处理用户自定义消息

的映射。ON_MESSAGE宏所带的两个参数分别是消息名字和消息处理函数名字。

③消息处理函数的函数体定义:

在视图类的执行文件2DCadV iew.cpp的最后添加如下的函数定义代码:

//自定义消息的处理函数

LRESULT CMy2DCADView::OnMyMessage(WPARAM wParam, LPARAM lParam) {

CClientDC dc(this);

//在视图区中输出文本“测试自定义消息”

dc.TextOut(100, 50, "测试自定义消息");

return 1;

}

由于消息用户定义的,什么时候发送WM_MY_MESSAGE消息,也需要由用户来决定。

3.发送自定义消息

消息的发送非常简单,使用CWnd的成员函数SendMessage或者PostMessage可以向窗口发送一个消息(不论是用户自定义消息还是别的什么消息)。

①SendMessage函数

成员函数SendMessage原型如下:

LRESULT SendMesage(UINT message, WPAEAM wParam=0,LPARAM 1Param=0);

这个函数有三个参数:

■message:消息

表明发送的是什么消息,比如WM_CREA TE、WM_MY_MESSAGE等。

■wParam:消息参数之一

消息的一个参数,类型为WPARAM(在Win32是32位长整数),具体意义根据消息的不同而不同,默认值为0。对于用户自定义消息,则可以自己定义参数。

■1Param:消息参数之二

消息的另外一个参数,类型为LPARAM(32位长整数),具体意义根据消息的不同而不同,默认值为0。对于用户自定义消息,则可以自己定义参数。

除此以外,还有一个全局的SendMessage 函数,不同之处在于多了一个接收消息的窗口句柄参数。

注意:SendMessage函数直接将消息发送给窗口处理函数,直到发送的消息被处理后才返回。

②PostMessage函数

PostMessage也可以用来向一个窗口发送(或者叫寄送)消息。不同于SendMessage函数的地方是:PostMessage函数将消息发送到应用程序的消息队列后就立即返回。

CWnd的成员函数PostMessage原型如下:

BOOL PostMessage(UINT message,WPARAM wParam=0,LPARAM lParam=0);

PostMessage函数的参数与SendMessage函数完全相同,只是返回值类型为BOOL型。如果消息发送成功则返回非零(真),否则返回0值。

也有一个全局的PostMessage函数,参数同全局SendMessage函数完全相同,但返回值为BOOL型。

在CMy2DCADView视图中的OnGraphPoint函数中添加如下代码:

void CMy2DCADView::OnGraphPoint()

{

CClientDC dc(this);

//在视图区中输出文本“画点”

dc.TextOut(100, 100, "画点");

m_bIsPoint = TRUE;//允许画点

m_bIsLine = FALSE;

SendMessage(WM_MY_MESSAGE);//发送自定义消息

}

单击画点按钮,就会发送WM_MY_MESSAGE消息。编译运行2DCAD程序,然后单击画点按钮,在视图区中除了输出文本“画点”以外,还会输出文本“测试自定义消息”。

六、练习

1.建立一个工程(单文档或多文档),添加菜单,并在原有工具栏上添加新工具栏项,利用Class Wizard 添加菜单项(工具栏项)的命令消息映射函数和更新命令用户界

面消息函数并填写代码。

2.通过两种方法删除上面一个菜单项的消息映射函数,改用手动方式添加,并尝试在消息影射宏的注释代码中添加,观察结果。

3.尝试手动为上面程序添加右键菜单。

4.为上面程序添加自定义消息及消息函数,并分别用两个发送消息的函数发送消息。

舆情信息处置机制制度精编版

舆情信息处置机制制度 为积极响应上级通知精神,进一步加强对舆情的引导与监控,建立健全舆情快速响应和处理机制,促进和保障幼儿园各项工作的有序开展,根据我园实际情况,采取以下措施:一、加强领导,构建全方位舆情监控网络 幼儿园舆情监控工作由保教处牵头,全面负责互联网及各大媒体的舆情引导与监控工作。设兼职舆情管理员一名,由保教主任担任。各部门、各年级组兼职舆情监督员,并邀请家委会主任担任社会舆情反馈员。进一步加强与地方各级新闻媒体的沟通协作,构建全方位舆情监控网络,密切配合,共同应对幼儿园舆情的引导与监控工作。 二、实行舆情监控巡查制度 1、实行舆情信息处置日值班制度,建立舆情信息处置每日记录。制定舆情监控负责制,每天由舆情监督员利用中午1点-2点,下午4点-5点两个时段负责监测跟踪网上涉及幼儿园工作的各种论坛、帖吧言论,掌握舆情热点,密切关注网络信息动态,捕捉带有苗头性、倾向性、群众性的问题。采取多种方式进行引导和疏通,并做好记录。 2、保教处舆情管理员每天向各处室了解一天舆情。 3、加强沟通,拓宽舆情监控渠道。加强与家委会负责人和地方其他媒体的沟通联系,及时了解来自各方面信息,及时扑捉舆情线索。

三、实行疏导、控制制度 每天舆情管理员整理舆情信息及时向园领导反馈情况,并对可能出现的突发事件进行早期预报,确保有关的重大舆情和负面信息早发现、早报告、早处置。对于有可能给幼儿园造成负面影响的舆论报道和评论,幼儿园组织协调有关力量及时进行舆情处置和舆论引导,有效疏导和控制负面舆情。 四、加强宣传,建立正确舆论导向 充分利用幼儿园网络、报纸、园信通等宣传平台,通过多种手段和渠道做正确的舆论方向引导,同时建立防控体系,积极消除不和谐、不稳定隐患。 化隆县第二幼儿园 2019年10月

信息处理的一般过程

信息处理的一般过程 一、信息收集 企业根据自己生产经营的需要和目标,有目的有系统地从企业内外大量、复杂的信息中搜集自己生产经营所需求的信息的活动。 1、内容 (1)宏观方面 --政策、政治、法规、国际形势等信息; --国家、地区发展规划、重大工程; --经济发展与经济形势; --资源(社会、自然、企业资源); --技术(新技术、新产品、新材料、技术发展趋势等); --社会、文化; --地理、地质、气候等; (2)微观方面 --市场供求及趋势(数量、结构); --用(客)户; --市场竞争及竞争对手; --供应商; --协作单位; --相关公众; (3)企业自身 --人力 --物力 --财力 2、搜集方法 --调查、考察;

--查询、咨询; --购买; --交换、索取、复制; 基本方法:常规搜集(如一般行情、基本情况)、专题收集(重要信息,重点收集)。 3、信息来源途径 --各种传播媒体; --政府部门; --用户; --竞争对手; --各类专家、(咨询)机构; --统计报表、年鉴; --专业行情; --各类会议; --专业人员; --各类展示活动。 二、信息鉴定和分类 --鉴定:筛选去除错误的或者无用的信息; --分类:杂乱无章的信息使之有序化,为加工利用打下基础; --分类一般方法:按来源、按用途、按属性、按内容。 三、信息存储和检索 四、信息加工 1、信息加工的思路 很多信息不一定能直接利用应采用信息加工的科学方法对其进行加工和提炼,揭示反映事物的本质或更加深度的内容 --经过加工,了解信息揭示的某种趋势; --发现和肯定某种可以利用的资源或机会; --发现事物发展的规律; --寻找造成某一问题的原因; --确定某事物可能发展的方向; --确认某种差距、薄弱环节或不

校园网络舆情信息监测处置机制

校园网络舆情信息监测处置机制为进一步加强网络舆情监测,特别是加强校园网络舆情的引导和监控,防止不良信息对校园的侵害,掌握网络舆情主动权,加强对网络舆情的预警防范和监测引导,形成积极向上的主流舆论,营造良好的舆论环境,促进和保障校园网络信息服务健康、有序发展,根据国家有关法律法规,现结合我校实际情况,特制定本办法。 一、工作目标 加强网上舆情监控,及时掌握舆情动态,坚决封堵、删除各种有害信息,及时掌握学校学生在各种网络媒介中的言论和动态,加强正面引导,释疑解惑,化解矛盾,消除不良影响,营造积极、健康的舆论氛围。 二、主要内容 本办法中的网络舆情,特指可能或已经对学生思想政治教育工作产生影响的网上负面报道或网络负面言论。网络舆情的管理与处置,是指对涉及宣传思政工作的新闻报道或评论在互联网上刊发、扩散后,所引发的反应、言论、评论和后续报道等综合舆论情况的监测、控制和化解等具体措施。 三、组织结构 成立网络舆情管理与处置工作领导小组,指定教导处为领导小组办公室,在领导小组的领导下牵头开展网络舆情管 理与处置的组织、监督、实施、考核工作。

四、工作职责 网络舆情监督员负责监测学校的微博、微信,学生个人人人通、微博、微信的舆情情况,了解各网站当前的舆情,及时将舆情通报网络舆情管理员,督促及时控制和引导,并作好日志记录和备案工作;负责跟踪各单位的舆情控制及引导情况,及时上报学校。 五、工作原则 按照“谁主管、谁负责”的原则将监测到的舆情信息进行分转交办,按照“快速反应、确认事实、妥善处理”的原则及时对网络舆情进行分析、判断、评估,准确查找舆情信息产生的原因,认真核实舆情反映的问题,对舆情走向作出正确的判断,对舆情可能产生的影响进行客观、全面评估,及时准备好跟(回)帖材料。 在处置网络舆情事件时,一定要端正工作态度,多渠道、多方法全面了解事件真相,不推卸责任,勇于承担应负的责任;在回应时不要只站在如何消除对学校和学校形象的影响上,而要站在师生或受害者的立场上。第一时间告知学生和当事人事情真相,进行真诚、公开、及时的沟通,不使矛盾进一步激化,赢得学生的理解和信任。根据某一重大舆情事件的发展态势和走向,最大程度地争取媒介的公信力和权威性,适时转移目标,发布最及时权威的信息,左右网络舆情的走向,把噪音杂音压下来,使该网络舆情信息关注度逐渐转冷。要加强正面宣传,树立良好风气。 六、操作流程

Handler消息处理机制

Handler消息处理机制 1.概述。 Handler消息处理机制对于初学者来说,应该算是一块心病,几乎每次面试都会被问到,今天我抽时间从源码的角度总结一下相关知识点。先看一下我们平时是怎么用的,如下代码实例: public class MainActivity extends AppCompatActivity { private TextView text; private Handler mHandler; int i=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.wendangku.net/doc/036209161.html,yout.activity_main); text = (TextView) findViewById(R.id.text); mHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); text.setText("变为:"+msg.what); } }; } public void sendMes(View view){ mHandler.sendEmptyMessage(i); i++; } } 很简单,onCreat()方法中实例化了一个Handler实例,实现其handlerMessage(Message msg)方法,在方法中改变TextView的显示内容,在布局文件中放了一个Button设置其android:onClick="sendMes",看一下效果:

信息员工作流程(老系统)

信息员工作操作流程 1、每天早上信息员必须6:20之前到达店面,首先变菜的售价:先看菜单上的 进价,根据店面的实际情况(看看前一天的库存和菜的质量)定菜的售价。 进入锐翔管理系统:价格管理→生鲜商品变价处理→输入商品条码(如2160001红椒)→输入现售价(以公斤计算)→保存→变价单审核→右键(全部变价单已审核通过)→执行变价。 2、传称步骤: (1)系统设置→条码称数据传送→选择正确的路径(如:D:\rxmis\spxx.scl)→寺岗称导出→确定。 (2)打开TOP2000(一般在桌面上或状态栏上)→点击文件菜单→打开如:D:\rxmis\spxx.scl→部分下传→输入商品条码省略第一位(如:红椒:160001)小技巧:可以直接从160001到190495一次性全传完。下传→输入部门号01或输入称号用逗号隔开(要保证称是开着的)→确定。 3、变进价:(变生鲜的进价如鱼、菜、肉以公斤输入,其中注意肉的每个单品都 要变进价,如:文杰白条:2130311变16.5元/公斤(注意:前夹、后座、全精肉、肋排、小排、大排、腿骨等白条分割出来的单品的进价全部要变成16.5元/公斤)价格管理→生鲜商品进价变价→输入商品条码(如2160001红椒)→输入现进价(以公斤计算)→保存→生鲜商品进价变价审核→右键(全部变价单已审核通过)→执行变价(不需要传称)。 4、上传当天水果订单:拿到店面水果订单→打开已存水果订单表格→改日期填 入数据→保存→联网→上传(8:30左右) 5、日报表(统计前一天的销售): (1)销售管理→日销售汇总统计→统计→日结库处理 注:如果统计出错,看报什么错A:出现较大的收银误差或找不台号→拷表先POS数据回传,然后开始→运行→pos01\02\03→D:\→POS→dlib拷当天日期的B、M表(如:B9030101、M9030101)如果出现找不到表(打电话4843793、)没有权限(运行前台电脑D:\解决局域网共享问题\共享方式:访问本机无需验证即可进入)要密码(打电话、、) B:出现空记录(Is not……某某表出错)打电话(4843793或) (2)查销售、销售毛利:销售报表查询→日销售报表查询(记下销售金额和销售毛利)。 (3)客流量、客单价:销售信息查询→客流量、客单价查询(记下数据)。(4)单品销售查询:销售信息查询→分类销售明细查询→改日期(前一天的日期) A:米:米面类→米类→散装米(记下每种米的销售,不联网的店面记下所有米

信息发布管理制度流程

信息发布管理制度 为使教育局门户网站和微信管理平台在信息化建设中发挥应有的作用,加强对网站的管理,保证其安全、有效、可靠地运行,依据国家有关法律、法规,并根据信息化建设的要求,结合我局实际,特制定本制度。 第一条门户网站发布信息实行信息审批制度,信息和相应的审批遵循“谁主管、谁负责;谁运营、谁办理”的原则。 第二条网站的信息发布由宣传科统一负责。局机关各科室及所属各单位负责提供本单位的相关信息,具体责任根据各单位工作职责划分。 第三条宣传科负责监督、审核网站内容。局机关各科室及所属各单位,所提供的内容需经本部门负责人批准后,交办公室或宣传科审核统一发布。相关我局重大新闻和重大事件的发布必须经办公室或宣传科主管领导审核后,请示分管局领导或局长,批准后方能正式发布。 第四条局机关办公室和宣传科对所有上传的涉及局新闻、政策、法规等重要信息负有责任;局机关各科室及所属各单位,对所提供的相关信息负有责任。 第五条网站上发布的信息必须符合国家有关保密规定,严禁涉密信息上网。各有关部门应制定上网信息发布审核管理制度,规范上网信息发布流程。一般情况下,拟上网发布的信息由拟稿人拟稿后须经科室初审、单位分管领导把关后方可发布,未经审核批准的信息不得上网。 第六条信息审核内容包括:上网信息有无涉密问题;上网信息目前对外发布是否适宜;信息中的数据是否准确;是否含有法律、行政法规禁止的内容等。上网信息出现安全问题的,要追究信息发布部门的责任。 第七条局机关各科室及所属各单位信息采集人员只能操作自己所负

责的相关业务内容,不得擅自修改、删除、发布其他采集人员所采集的信息。否则将追究信息采集人员和所在处室负责人的责任。 第八条局机关及所属各单位信息采集人员要严格遵守国家有关法律、行政法规,严格执行国家安全保密制度,不从事与身份不符的活动,各单位信息采集人员按照权限,采集自己所负责的相关栏目文档。 第九条局机关相关人员不得利用门户网站散布含有危害国家安全和社会稳定的信息,不得泄露国家秘密和工作秘密,不得宣扬暴力、色情等内容。网站的使用过程中,必须遵守网站各功能的使用说明和使用协议。 第十条 第十一条 第十二条 第十三条用户信息安全管理制度 网站为充分保护用户的个人隐私、保障用户信息安全,特制订用户信息安全管理制度。 1、尊重并保护用户的个人隐私,除了在与用户签署的隐私保护协议和网站服务条款以及其他公布的准则规定的情况下,未经用户授权不随意公布和泄露用户个人身份信息。 2、定期对相关人员进行网络信息安全培训并进行考核,使网站相关管理人员充分认识到网络安全的重要性,严格遵守相应规章制度。。 3、对用户的个人信息严格保密,并承诺未经用户授权,不得编辑或透露其个人信息及保存在本系统中的非公开内容,但下列情况除外: 4、①违反相关法律法规或本网站服务协议规定; 5、②按照主管部门的要求,有必要向相关法律部门提供备案的内容; 6、③因维护社会个体和公众的权利、财产或人身安全的需要;

MFC的运行机制和消息响应机制

MFC的类层次结构与运行机制 MFC的类层次结构 如图所示(子类指向父类): 其中: CObject:是MFC提供的绝大多数类的基类。该类完成动态空间的分配与回收,支持一般的诊断、出错信息处理和文档序列化等。 CCmdTarget:主要负责将系统事件(消息)和窗口事件(消息)发送给响应这些事件的对象,完成消息发送、等待和派遣调度等工作,实现应用程序的对象之间的协调运行。 CWinApp:是应用程序的主线程类,它是从CWinThread类派生而来的。CWinThread类用来完成对线程的控制,包括线程的创建、运行、终止和挂起等。 CDocument:是文档类,包含了应用程序在运行期间所用到的数据。 CWnd:是一个通用的窗口类,用来提供Windows中的所有通用特性、对话框和控件。 CFrameWnd是从CWnd类继承来的,并实现了标准的框架应用程序。 CDialog类用来控制对话框窗口。 CView:用于让用户通过窗口来访问文档。 CMDIFrameWnd和CMDIChildWnd:分别用于多文档应用程序的主框架窗口和文档子窗口的显示和管理。CMiniFrameWnd类是一种简化的框架窗口,它没有最大化和最小化窗口按钮,也没有窗口系统菜单,一般很少用到它。 MFC运行机制 在程序中,当定义一个类对象时,它会自动调用相应的构造函数。所谓"类对象",就是用该类定义的"变量",这个"变量"又称为类的一个实例。例如,theApp就是类CSimpApp的一个对象。 MFC正是利用类的这种"自动调用相应的构造函数"特性,使得WinMain()函数的调用变成了应用程序框架内部的调用,所以我们在代码中看不到每个Windows程序所必须有的WinMain()函数。 当应用程序运行到"CSimpApp theApp;"时,系统就会先调用基类CWinApp构造函数,进行一系列的内部初始化操作,然后自动调用CSimpApp的虚函数InitInstance(),该函数会进一步调用相应的函数来完成主窗口的构造和显示工作。下面来看看上述程序中InitInstance的执行过程。 首先执行的是: m_pMainWnd = new CMainFrame; 该语句用来创建从CFrameWnd类派生而来的用户框架窗口CMainFrame类对象,继而调用该类的构造函数,使得Create函数被调用,完成了窗口创建工作。

信息工作流程规范

信息工作流程规范 一、信息工作意义目的 商场如战场,在现代信息经济的商业竞争中,信息的价值正被充分重视和挖掘。“知己知彼,百战不殆”,密切关注竞争对手、行业发展态势、宏观经济环境、政策调控等信息,为企业的营销战略、策略制定提供重要信息参考,同时也利于企业根据市场的变化做出及时应变或预防,从而进一步增强企业竞争力。 加强企业营销管理能力、提高品牌策划行销水平,也是我们需不断努力的方向。“他山之石,可以攻玉”,拓展视野,学习、借鉴国际、国内成功品牌的运作管理经验和模式,可帮助我们快速成长,逐步向国际品牌靠拢。 正是基于以上宗旨,市场研究部创立了关联信息工作运作机制。《信息工作流程规范》旨在建立及规范信息工作体系,使信息工作有章可循。 二、信息工作流程 附图:信息工作流程图

三、信息分类及来源 1、信息类别 主要分为五大类,即“宏观资讯”、“行业信息”、“他方评论”、“竞争动态”、“其他资讯”等: (1)“宏观资讯”主要指宏观经济、消费指标等方面的信息; (2)“行业信息”主要指酒类及其关联行业、相关政策等方面发生的信息; (3)“他方评论”主要指业内外人士对行业或具体品牌发展、营销的分析、判断和评论信息; (4)“竞争动态”主要指保健酒品牌、白酒品牌或有突出营销动作行为的其他酒类品牌信息; (5)“其他资讯”主要指其他行业及其具体品牌在管理、营销、人力资源等方面的重大变革或突出作为的讯息。 2、信息来源 (1)Internet网;酒类企业网站、酒类行业网站、财经参考类网站、营销管理网站、政府/研究机构网站、市场研究专业机构网站、广告传媒机构网站等其他有关网站。 (2)报刊杂志;酒类行业类、营销管理类等报刊杂志。 (3)市场一线;市场营销人员反馈、公司人员出差实地获取。 (4)专项调研;通过进行专项调查研究获取。 (5)酿酒协会;中国酿酒协会、湖北省酿酒协会等行业机构。 (6)资讯公司;通过与资讯公司的合作或行业报告的购买等形式获取。 四、信息工作成果体现 信息工作成果主要以三类方式体现:即时信息文件、关联信息月度简报、专题分析报告等。 (1)即时信息文件。即时信息文件主要指的是有关市场、竞争对手、行业形势、国家政策等其他有关方面的即时性信息;信息文件类别分竞争对手信息、实时行业信息、第三方视野、行业统计信息等。 (2)关联信息月度简报。关联信息月度简报主要从“宏观资讯”、“行业信息”、“他方评论”、“竞争动态”、“其他资讯”五个方面进行展现。关联信息简报是市场研究部当月信息工作所有内容的汇总体现。 (3)专题分析报告。确定专项研究课题,综合大量相关信息进行研究分析,最终形成专题分析报告文件。

信息安全事件处理流程

信息安全事件处理流程 Document number【AA80KGB-AA98YT-AAT8CB-2A6UT-A18GG】

信息安全事件处理流程 一、信息安全事件分类 根据公司实际生产运行情况,将信息安全事件分为两大类:重大信息安全事件和一般信息安全事件。 1、重大信息安全事件 1) 重要信息系统遭受严重的系统损失; 1.1 通信线路和设备故障、主机(服务器)、存储系统、网络设备(各类网络交换机、路由器、防火墙等)、电源故障运行中断不能为超过80%(包括80%)的网络注册用户提供服务,时间达4小时;不能为80%以下网络注册用户提供服务,持续等效服务中断时间达8小时。 1.2 系统(硬、软件)损坏或失窃,直接经济损失达1万元以上者。 1.3 重要技术开发、研究数据损坏或丢失,或重要信息系统数据损坏或丢失,数据量在时间上连续超过48小时。 1.4 发生计算机程序、系统参数和数据被删改等信息攻击和破坏或计算机病毒疫情导致信息系统不能提供正常服务达到上述的规定。 1.5 发生传播有害数据、发布虚假信息、滥发商业广告、随意侮辱诽谤他人、滥用信息技术等信息污染和滥用,网络地址和用户身份信息的窃取、盗用。 1.6 发生自然灾害性事件导致的信息安全事故。 2)产生的社会影响波及到一个或多个地市的大部分地区,引起社会恐慌,对经济的建设和发展有较大负面影响,或损害到公众利益。 2、一般信息安全事件 1)重要信息系统遭受较小的系统损失; 1.1 通信线路和设备故障、主机(服务器)、存储系统、网络设备(各类网络交换机、路由器、防火墙等)、电源故障运行中断导致不能为超过80%(包括80%)的网络注册用户提供服务,时间达2小时;不能为80%以下网络注册用户提供服务,持续等效服务中断时间达4小时。

有害信息发现受理处置机制

有害信息发现处置机制 第一章总则 第一条为了加强对网站的安全保护,根据《中华人民共和国计算机信息系统安 全保护条例》、《计算机信息网络国际联网安全保护管理办法》及其他有关法律、行政法规的规定,制定本机制。 第二条有害信息的本着“谁主管,谁负责”、遵循依法、客观公正、合理恰当 的原则。 第三条有害信息事件是指单位和个人利用网站制作、复制、查阅和传播下列的 事件: 1. 煽动抗拒、破坏宪法和法律、行政法规实施的; 2. 煽动颠覆国家政权、推翻社会主义制度的; 3. 煽动分裂国家、破坏国家统一的; 4. 煽动民族仇恨、民族歧视,破坏民族团结的; 5. 捏造或者歪曲事实,散布谣言,扰乱社会次序的; 6. 宣扬封建迷信、淫秽、色情、赌博、暴力、凶残、恐怖、教唆犯罪的; 7. 公然侮辱他人或者捏造事实诽谤他人的; 8. 损害网站形象和网站利益的; 9. 其他违反宪法和法律、行政法规的。 第四条有害信息发生部位:在BBS、留言板等交互式栏目,在网站首页、商品信息页中张贴、传播有害信息。利用电子邮件发送危害安全、宣扬“法轮功”等邪教和扰乱社会秩序的各种谣言等有害信息。 第五条用户的通信自由和通信秘密受法律保护。任何单位和个人不得违反法律 规定,不得利用网站侵犯用户的通信自由和通信秘密。 第二章有害信息处置程序 第六条一旦发现网络有害信息的,应立即启动预案,采取“及时处理、下载保存和24小时上报制度”。 第七条网络有害信息处置前期工作程序: 1. 发现有害信息的公司员工要立即报告公司信息部,由信息部协调处理网上突发事件,摸清情况,采取措施,最大限度地遏制有害信息在网站上传播和扩散,并在第一时间内向公司主管领导及有关部门报告。 2. 信息部负责有害信息的界定及监控,一旦发现不良信息要马上删除(如遇紧急情况,可直接关闭服务器,暂停网络运行)。 3. 信息部及时对有害信息予以删除,取证留样,对有害信息的来源进行调查;在最短时间内向网络有害信息处置相关机构报告情况。 4. 信息部要对网络安全设备的记录留存,监督检查有害信息报告、清除等情况。 5. 信息安全员负责调查有害信息散布的原因、经过,收集相关证据,以有利于 事件处理时事实清楚,责任明确。 第八条网络有害信息处置后期工作程序: 1. 信息部要利用网络与信息安全技术平台,对网上有害信息和公共有害短信及 时进行封堵:对违规从事网上业务或传播有害信息的用户,依法采取责任令整顿,予以封禁用户等行政处罚措施。 2. 在事实清楚、责任明确的情况下,公司网络安全管理领导小组要对事件做出 处理决定。

短消息处理流程

短消息处理流程 MO流程 MO(Mobile Originated),即移动台始发的短消息,指的是移动台MS向短消息中心提交短消息,到收到短消息中心返回的应答消息的过程。 具体流程如下。 1.移动台MS向VLR提交访问请求和可选的鉴权请求(Access request and possible authentication)。 2.移动台MS向MSC提交短消息(Message Transfer)。 3.MSC向SMC提交短消息(Message Transfer)。 4.SMC向MSC回送应答(Success or Error)。 5.MSC向MS回送应答(Success or Error)。 MT流程 MT(Mobile Terminated),移动台终止的短消息,指的是短消息中心按一定的规则把短消息发送给目的移动台MS,到收到移动台MS返回的应答消息的过程。 SMC根据目的手机号码找到目的手机归属的HLR,并且发送消息到该HLR查询目的手机当前所在的MSC的地址。得到该地址后,SMC发送消息到目的手机所在MSC,由该MSC将短消息转发到该目的手机。目的手机收到短消息后给SMC回送应答消息。

具体流程如下。 1.SMC向HLR查询发送路由(SendRoutingInfo_For_ShortMessage),从HLR 取回用户的IMSI号码和目前用户所在的MSC的地址。 2.SMC向MSC前传短消息(Forward_ShortMessage)。 3.MSC向VLR查询发送路由(SendInfoFor_MT_SMS),从VLR取回当前手机 用户所在的小区位置信息。 4.MSC向移动台MS发送短消息(Message Transfer)。 5.MS向MSC回送MT消息的ACK消息。 6.MSC向SMC回送转发报告(Delivery report)。 MT的流程较为复杂,以上仅为正常下发流程,现在将非正常下发流程说明如下。 ?如果用户不在服务区或用户手机短消息内存已满,则SMC会发信令消息到HLR置MNRF(Mobile Not Reachable Flag)或MCEF(Memory Capacity Exceeded Flag)标志,信令名称为Delivery Status Report。 ?当SMC去HLR取路由时,如果HLR内MNRF或MCEF已被置位,则HLR除发送路由信息,还要发送Inform SC信令到SMC(如果HLR为PHASE1版本,则无此过程),通知该用户不可用,此时如果下发的短消息为普通优先级,则SMC不再下发,如果短消息为高优先级,则SMC尝试下发该短消息,如 果发送不成功则下发结束,如果下发成功,则发信令消息到VLR清除MNRF 或MCEF标志,如果清除成功,HLR发送Alert_SC消息到SMC,如果该用 户仍有短消息未发出,则SMC会保持与MSC的会话,然后继续下发短消息,直到发完或出错为止。 ?每次成功下发后,SMC检测短消息是否是MO短消息且要求状态报告。如果是,则下发状态报告短消息到提交用户。 Alert_SC流程 当HLR检测到手机不可接收短消息的原因(如用户关机、存储区满等)解除时(如该移动台开机、移动台内存可用等),会主动向SMC发Alert_SC消息,SMC收到后立即尝试向该手机重发短消息。 手机开机的呼叫流程如下: 手机开机后,通过BTS和BSC向MSC请求接入。如果该手机是第一次在该MSC 管辖的区域内开机,则VLR内没有该手机的相关信息。这时MSC会根据手机号码的前7位找到该手机归属的HLR,并且发送消息到该HLR查询该手机的相关信息。HLR将相关的信息发送到MSC后,如果MSC认为该用户是合法的,则接受该手机的登录请求。在这个过程中,HLR也记录了该手机当前所在的MSC的地址。 当手机开机后,HLR就会发送Alert_SC消息给SMC,提醒SMC将存储的消息发给该手机,这就是Alert_SC过程。 具体流程如下。

MFC消息机制

全面解析MFC应用程序中处理消息的顺序 1.AfxWndProc() 该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc 2.AfxCallWndProc() 该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数 3.WindowProc() 该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数 4.OnWndMsg() 该函数的功能首先按字节对消息进行排序,对于WM_COMMAND 消息,调用OnCommand()消息响应函数,对于WM_NOTIFY消息调用OnNotify()消息响应函数。任何被遗漏的消息将是一个窗口消息。OnWndMsg()函数搜索类的消息映像,以找到一个能处理任何窗口消息的处理函数。如果OnWndMsg()函数不能找到这样的处理函数的话,则把消息返回到WindowProc()函数,由它将消息发送给DefWindowProc()函数 5.OnCommand() 该函数查看这是不是一个控件通知(lParam参数不为NULL,如果lParam参数为空的话,说明该消息不是控件通知),如果它是,OnCommand()函数会试图将消息映射到制造通知的控件;如果他不是一个控件通知(或者如果控件拒绝映射的消息)OnCommand()就会调用OnCmdMsg()函数 6.OnCmdMsg() 根据接收消息的类,OnCmdMsg()函数将在一个称为命令传递(Command Routing)的过程中潜在的传递命令消息和控件通知。例如:如果拥有该窗口的类是一个框架类,则命令和通知消息也被传递到视图和文档类,并为该类寻找一个消息处理函数 MFC应用程序创建窗口的过程 1.PreCreateWindow() 该函数是一个重载函数,在窗口被创建前,可以在该重载函数中改变创建参数(可以设置窗口风格等等) 2.PreSubclassWindow() 这也是一个重载函数,允许首先子分类一个窗口 3.OnGetMinMaxInfo() 该函数为消息响应函数,响应的是WM_GETMINMAXINFO消息,允许设置窗口的最大或者最小尺寸 4.OnNcCreate() 该函数也是一个消息响应函数,响应WM_NCCREATE消息,发送消息以告诉窗口的客户区即将被创建 5.OnNcCalcSize() 该函数也是消息响应函数,响应WM_NCCALCSIZE消息,作用是允许改变窗口客户区大小

信息安全事件报告和处置管理制度

安全事件报告和处置管理制度 文号:版本号: 编制:审核:批准: 一、目的 提高处置网络与信息安全突发公共事件的能力,形成科学、有用、反应迅速的应急工作机制,确保严重计算机信息系统的实体安全、运行安全和数据安全,最大限度地减轻网络与信息安全突发公共事件的危害,保障国家和人民生命财产的安全,保护公众利益,维护正常的政治、经济和社会秩序。 二、适用范围 本预案适用于本局发生的网络与信息安全突发公共事件和可能导致网络与信息安全突发公共事件的应对工作。 本预案启动后,本局其它网络与信息安全应急预案与本预案相冲突的,按照本预案执行;法律、法规和规章另有规定的从其规定。 三、职责 本预案由局信中心制订,报局领导批准后实施。局有关部门应根据本预案,制定部门网络与信息安全应急预案,并报局信息中心备案。 结合信息网络快速发展和我局经济社会发展状况,配合相关法律法规的制定、修改和完善,适时修订本预案。 本预案自印发之日起实施。 四、要求 1.工作原则 预防为主:立足安全防护,加强预警,重点保护基础信息网络和关系国家安全、经济命脉、社会安定的严重信息系统,从预防、监控、应急处理、应急

保障和打击犯罪等环节,在法律、管理、技术、人才等方面,采取多种措施,充分发挥各方面的作用,共同构筑网络与信息安全保障体系。 快速反应:在网络与信息安全突发公共事件发生时,按照快速反应机制,及时获取充分而确凿的信息,跟踪研判,果断决策,迅速处置,最大程度地减少危害和影响。 以人为本:把保障公共利益以及公民、法人和其他组织的合法权益的安全作为首要任务,及时采取措施,最大限度地避免公民财产遭受损失。 分级负责:按照“谁主管谁负责、谁运营谁负责、谁使用谁负责”以及“条块结合,以条为主”的原则,建立和完善安全责任制及联动工作机制。根据部门职能,各司其职,加强部门间、地局间的协调与配合,形成合力,共同履行应急处置工作的管理职责。 常备不懈:加强技术储备,规范应急处置措施与操作流程,定期进行预案演练,确保应急预案切实有用,实现网络与信息安全突发公共事件应急处置的科学化、程序化与规范化。 2组织指挥机构与职责 发生网络与信息安全突发公共事件后,应成立局网络与信息安全应急协调小组(以下简称局协调小组),为本局网络与信息安全应急处置的组织协调机构,负责领导、协调全局网络与信息安全突发公共事件的应急处置工作。局网络与信息安全协调小组下设办公室(以下简称局协调小组办公室),负责日常工作和综合协调,并与公安网监部门进行联系。 3先期处置 (1)当发生网络与信息安全突发公共事件时,事发部门应做好先期应急处置工作,立即采取措施控制事态,同时向相关局级主管部门通报。 (2)网络与信息安全事件分为四级:特别巨大(Ⅰ级)、巨大(Ⅱ级)、较大(Ⅲ级)、大凡(Ⅳ级)。

信息反馈渠道及处理机制

目录 一、信息反馈渠道及处理机制 0 一、信息反馈渠道及处理机制 项目部要安排管理人员担负行政值班,并要保持24小时通信畅通,随时接 受甲方和广大群众的意见和投诉,对甲方和广大群众的意见和群众投诉要及时整改,重大问题要向总公司领导反映,项目经理对意见和问题做好说明和解释工作,并及时将整改情况及时反馈,做到“事事立即整改,件件及时回音”。 (一)信息反馈渠道

(二)信息处理机制

(三)控制方式 (1)本项目安全生产目标为:实现作业全过程“六无”,即无死亡、无重伤、无倒塌、无中毒、无爆炸、无重大交通事故。 ●火警发生率:≤0.1% ●火灾发生率: 0% ●违章发生率: 1% ●违章处理率: 100% ●设施、设备完好率:≥96% ●重大人身安全事故发生率: 0% (2)严格的岗位责任制和完善的管理规章制度,实行责任、目标控制; (3)采用量化考核办法,以严格的考核和淘汰制实行控制,每月对没一个岗位进行1次量化考核,与当月的绩效工资挂钩; (4)公司质量管理部每月不少于二次对营运部的各项工作进行考核、检查、监督、催办,营运部的质量组每天二次巡回检查、评分,并做好记录,由岗位、组长签字确认。使管理运作控制更为制度化、日常化,更为严谨和规范; (5)标准、规范、流畅、严密的运作流畅,从上至下,再从下至上,环环相扣; (6)在作业区域内建立信息采集反馈渠道,采用等级寻访、业户调查、办事处主管部门征询意见收集非法小广告清理工作存在的问题,合理化的建议,及时提出解决问题的措施并予以实施,及时回复反映问题方,直到问题得到圆满解决; (7)建立全方位、全过程的制度性、随机性的巡查制度。

信息报送制度及流程

医院信息报送制度及流程 根据《统计法》、《会计法》、《药品管理法》和卫生行政部门规定,完成医院基本运行状况、医疗技术、诊疗信息和临床用药监测信息等相关数据报送工作,推动信息报送工作步入制度化、规范化、科学化轨道,充分发挥信息工作在正确决策、科学管理、宣传服务中的重要作用,促进医院和谐、快速、持续发展,特制定本工作制度。 一、医院信息报送工作由各分管院长领导,办公室、药剂科、设备科、信息中心(统计室)、财务科、人事科、预防保健等部门共同组成,根据卫统报表要求整理数据并汇总审核后,及时按卫统报表要求直报上级卫生部门。 二、各归口医院行政职能科室的主要职责: (一)医务科(病案室)负责上报医疗服务数据及出院病人调查表的数据的审核工作。 (二)人事科负责提供人力资源表的数据并审核数据。 (三)设备科负责提供医用设备调查表的数据并审核数据。 (四)财务科负责提供医疗收入等数据并审核数据。 (五)统计室负责提供医院出院病人调查表的数据并审核数据。(六)信息科负责提供医疗服务数据并及时汇总按卫统报表要求直报上级卫生部门。 三、各归口行政职能科室要明确1名工作人员为本单位兼职信息员,从事具体信息报送工作。 四、各归口行政职能科室信息员的工作职责:

根据上级卫生统计工作报送要点,结合本部门实际工作,完成本部门信息的收集、编写、报送工作,定期向本科室主任报送信息审核,及时上报卫生统计部门。 五、信息报送程序及要求各归口医院管理部门应按以下程序进行信息报送: (一)各归口行政职能科室医务科(病案室)、人事科、药剂科、设备部、信息中心(统计室)、财务科、预防保健等部门的信息员完成医疗、人力、财务、药品、设备、医疗统计等统计年报、季报、月报和实时报数据上报工作。经所在部门主管负责人审核同意,报送上级行政主管部门,同时整理成文,报分管院长。 (二)对于各部门工作范围内的突发事件或其他重大紧迫事项,各部门信息员应首先及时告知本科室主任,同时向分管院长报告;并在口头报送后及时补送相关文字材料。 六、信息报送的基本要求: (一)各归口部门信息员要认真学习《统计法》、《会计法》、《药品管理法》,报送信息必须坚持时效性、真实性、完整性、准确性的原则,做到及时、准确、全面、实事求是。 (二)重大突发性事件的报送必须注意时效性。重大事故、突发事件在发生后立即电话通报。 (三)上报卫生部门的信息材料年报装订成册后及时转交档案室存档。 七、核查和问责制度

Openflow 消息处理流程笔记

何腾飞2017.04.25更新 Openflow 消息处理 源码:sptn_code中ofp/dpa/tne模块。 简介:ofp模块接收sck的flow_mod消息,处理后发送给DPA, DPA处理后在发送给TNE。 以下消息处理过程均以flow_mod消息为例,*部分为group_mod消息的处理。*、Sck处理流程 sck_create_proc() sck_receive_proc() 一、Ofp处理流程 简介:接收SCK消息,发送给DPA。 File:ofpmain.c 1.ofp_create_proc() File:ofprecv.c 一系列初始化操作; 设置接收函数ofp_receive_proc() ; ... 2.ofp_receive_proc() in: ips消息,queue_id队列id 判断queue_id: Sck : 调用ofp_rcv_sck_ips(); ... 3.ofp_rcv_sck_ips() In: ips消息 判断ips_type消息类型: Sck_register; Sck_unregister; Sck_rsp; Sck_error; Sck_data; Openflow协议数据: ofp_message_reassemble() ; ofp_check_of_msg_list();

Netconf协议数据: ... Sck_close; 4.ofp_message_reassemble() 收到ofp消息后,首先需要存入ofp消息队列,此时先要判断是否需要新建一个ofp消息块节点or使用现有的LQE队列对应的ofp消息块节点, Ofp消息队列如下: 1---2---3---4---5---...---N 该消息队列为一个双向循环链表; N为全局变量v_ofp_shared->ofp_msgs始终不变;初始化时N.next和N.prev均指向N自身,N自身是没有数据域的(N.self==null); 有数据节点时,N.next始终指向第1个结点,N.prev始终指向最后1个结点; 故只有满足以下条件才不需要新建LQE节点: 1.队列为空(N.next == N时); 2.队列不为空但尾结点为NULL 代码实现如下, 解释:A --- B---N (N为当前的全局ofp消息的LQE )

Windows 消息处理机制与事件驱动

【SunXin.VC++深入】 1.窗口(Windows)和句柄(HANDLE,handle):窗口句柄(HWND)图标句柄(HICON)、光标句柄(HCURSOR)和画刷句柄(HBRUSH) 2.消息,消息队列,消息循环,消息响应 .OS将操作包装成Message .typedef struct MSG { HWND hwnd; //窗口句柄,即标示消息所属的窗口 UINT message;//标示消息的类别,是鼠标还是键盘等如鼠标左键按下消息是 //WM_LBUTTONDOWN,键盘按下消息是WM_KEYDOWN,字符消息是WM_CHAR WPARAM wParam;//消息的附加信息 LPARAM lParam;//消息的附加信息 DWORD time;//消息投递到消息队列中的时间 POINT pt;//鼠标的当前位置 } MSG; .消息队列,每一个Windows应用程序开始执行后,系统都会为该程序创建一个消息队列,这个消息队列用来存放该程序创建的窗口的消息 .进队消息(OS将产生的消息放在应用程序的消息队列中,让应用程序来处理) 不进队消息(OS直接调用窗口的处理过程) 用 Windows 的话说, 窗口的事件就是系统发送给窗口的消息; 窗口要采取的行动(事件代码)就是窗口的回调函数. PostMessage函数将消息添加到应用程序的消息队列中去。应用程序的消息循环会从消息队列中提取登记的该消息,再发送到相应的窗口中。 SendMessage函数可以越过消息队列直接向窗口过程发送。所以当Windows需要立刻返回值时使用SendMessage,当需要不同的应用程序依次处理消息时使用PostMessage。而Perform从本质上和SendMessage相似,它们直接向窗口过程发送。SendMessage、Postmessage函数只需要知道窗口的句柄就可以发送消息,所以它们可以向非Delphi窗体发送一条消息,但而Control.Perform必须知道窗体或控件的实例。 .Windows应用程序的消息处理机制 while(GetMessage(&msg,NULL,0,0)){//接收到WM_QUIT消息时,才返回0 TranslateMessage(&msg);//对消息进行包装处理然后再以消息的形式投放到消息队列 DispatchMessage(&msg);//消息回传给操作系统,由操作系统调用窗口过程函数对消息进行处理 } (1)操作系统接收到应用程序的窗口消息,将消息投递到该应用程序的消息队列中。 (2)应用程序在消息循环中调用GetMessage函数从消息队列中取出一条条的消息。取出后,以对消息进行一些预处理,如放弃对某些消息的响应,或者调用TranslateMessage产生新的消息,再以消息的形式投放到消息队列. (3)应用程序调用DispatchMessage,将消息回传给操作系统。消息是由MSG结构体对象来表示的,其中就包含了接收消息的窗口的句柄。因此,DispatchMessage函数总能进行正确的传递。 (4)系统利用WNDCLASS结构体的lpfnWndProc成员保存的窗口过程函数的指针调用窗口过程,对消息进

短消息信令流程

1.1 短消息信令 短消息中心网关部分主要实现短消息中心接入PLMN信令网的功能,及短消 息人工台、自动台接入PLMN、PSTN网的功能,因此,网关的信令模块主要 包含了七号信令中的MAP、TCAP、SCCP、MTP、TUP各层,实现短消息 的提交、前转、提醒功能,并完成电话呼叫的接续。 网关所要处理的信令主要有三个流程:MO(Mobile Origination,移动台发起 的短消息业务)、MT(Mobile Termination,移动台终止的短消息业务)、 ALERT_SC(Alert Service Center,短消息中心提醒)。 MO主要流程说明 如图1-1所示。 SC SMS IWMSC HLR VLR Access request and possible authentication Message Transfer Forward_ShortMessage MS MSC SendInfoFor_ MO_SMS Message Transfer Ack Ack Ack 图1-1MO信令流程图 具体说明如下: (1) 移动台MS向VLR提交访问请求和可选的鉴权请求(Access request and possible authentication); (2) 移动台MS向MSC提交短消息(Message transfer); (3) MSC向网关SMS-IWMSC上传短消息(forwardShortMessage) (IWMSC:InterWrokingMSC,即接入/互通MSC,负责处理手机提交的短消息);

(4) 网关SMS-IWMSC 向SC 提交短消息(Message transfer ); (5) SC 向网关SMS-IWMSC 回送应答(Ack or Error ); (6) SMS-IWMSC 向MSC 回送应答(Ack or Error ); (7) MSC 向MS 回送应答(Ack or Error )。 ● MT 主要流程说明 如图1-2所示。 SC SMS GMSC HLR VLR Message Transfer Forward_ ShortMessage MS MSC SendInfoFor_ MT_SMS Delivery Report Message Transfer SendRoutingI nfo_For_Shor tMessage Delivery Report 图1-2 MT 信令流程图 具体说明如下: (1) 短消息中心SC 向网关SMS-GMSC (GMSC: Gateway MSC ,即网关 MSC ,负责处理下发短消息)提交消息传送请求Message transfer ; (2) 网关SMS-GMSC 向HLR 查询发送路由sendRoutingInfoForShortMsg ; (3) 网关SMS-GMSC 向MSC 前传短消息forwardShortMessage ; (4) MSC 向VLR 查询发送路由sendInfoForMT-SMS ,从HLR 取回用户的 IMSI 号码和目前用户所在的MSC 的号码; (5) MSC 向移动台MS 发送短消息Message transfer ; (6) MS 向MSC 回送转发报告Message transfer ; (7) MSC 向SMS-GMSC 回送转发报告Delivery report 。 ● MT 的流程较为复杂,以上仅为正常下发流程,现在将非正常下发流程说 明如下:

相关文档
相关文档 最新文档