Windows SDK
消息在主应用中堵塞读取,然后由同一的回调进行处理
while (GetMessage(&msg,...)) {
TranslateMessage(&msg); //转换键盘消息(虚拟到字符)
dispatchMessage(&msg); // 分派消息
}
LRESULT CALLBACK WndProc(HWND hWnd,
UINT message,
WParaM wParam,
LParaM lParam)
MFC
封装的SDK,增加映射表进行
struct MSGMAP_ENTRY {
UINT nMessage;
LONG (*pfn)(HWND,UINT,WParaM,LParaM);
};
struct MSGMAP_ENTRY _messageEntries[] =
{
WM_CREATE,OnCreate,
WM_PAINT,OnPaint,
WM_SIZE,OnSize,
WM_COMMAND,OnCommand,
WM_SETFOCUS,OnSetFocus,
WM_CLOSE,OnClose,
WM_DESTROY,OnDestroy,
} ;
对具体的回调,比如command,再加了一层包装
struct MSGMAP_ENTRY _commandEntries =
{
IDM_ABOUT,OnAbout,
IDM_FILEOPEN,OnFileOpen,
IDM_SAVEAS,OnSaveAs,
} ;
附:
PostMessage 和 SendMessage
核心对象:
event CreateEvent
mutex CreateMutex
semaphore CreateSemaphore
file CreateFile
file-mapping CreateFileMapping
process CreateProcess
thread CreateThread
消息流是冒泡
WinForm & Silverlight
对对应的回调增加委托
其中Silverlight的网络操作都是异步的,而且刷新页面必须在主线程中
Html javascript
冒泡&捕获,先捕获后冒泡
Flex
发送字符串的事件,冒泡
JAVA
Java1.0 事件模型 :
dispatchEvent()-postEvent()-handleEvent()
Java 2 事件处理模型 :
在 Java2 处理事件时,没有采用 dispatchEvent()-postEvent()-handleEvent() 方式,采用了监听器类,每个事件类都有相关联的监听器接口。事件从事件源到监听者的传递是通过对目标监听者对象的 Java 方法调用进行的。(必须实现对应的接口)
Android的事件模型:
跟JAVA2一样,增加了indent的概念
Indent,可指定本地类,也可由系统进程进行选址
Intent 是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯。比如说调用 startActivity()来启动一个activity,或者由broadcaseIntent()来传递给所有感兴趣的 broadcaseReceiver,再或者由startService()/bindservice()来启动一个后台的service.所以可以看出来,intent主要是用来启动其他的 activity 或者service,所以可以将intent理解成activity之间的粘合剂。
对于明确指出了目标组件名称的Intent,我们称之为“显式Intent”。对于没有明确指出目标组件名称的Intent,则称之为“隐式 Intent”。Android系统使用IntentFilter 来寻找与隐式Intent相关的对象。
广播接收器,可以拦截短信,然后返回true,系统默认SMS应用的回调将不会被调用。
内部也有Looper+消息接收器,对消息接收器发送消息,如果没有指定looper,将在该对象所处的activity线程中执行。
this.post(new Runnable(){
public void run(){
在主线程中更新ui
}
});
public void setResult(Object obj,int key) { if(obj!=null){ netHandler.setResult(obj,key); Message msg=netHandler.obtainMessage(); msg.setTarget(netHandler); msg.sendToTarget(); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。