窗口消息处理对象的传递

在前面已经定义好窗口的消息处理类,虽然拥有处理能力了,但还没有放到回调函数里进行相应的调用,那还是达不到目标,还需要下面两个细节的处理,才可以嵌入到消息处理过程里。我们来顺着消息类的传递路径来进行分析它的具体过程,这样理解起来会更顺畅一些,更符常人的思维。具体的过程如下图所示:

从上图可以看到,使用Controller类来创建窗口处理消息的实例对象ctrl,然后把它传送给WinMaker的实例对象,也就是传送给创建窗口的函数Create,通过操作系统的创建窗口的消息WM_NCCREATE带给回调函数PyWndProc,在PyWndProc函数里响应消息WM_NCCREATE时,就把Controller类对象取出来,把它绑定到这个对应窗口里,这一步是通过WIN32的API函数SetWindowLongW来实现的。以后所有窗口的消息,都会根据窗口的句柄来获取绑定到这个窗口处理的消息处理对象,而获取这个窗口消息处理类的对象是通过函数GetWindowLongW来获取的,这样后面就可以通过窗口消息处理类的函数MyWndProc来处理自己窗口需要处理的消息了。在这里可以看到,回调函数PyWndProc是提供给所有窗口进行消息处理的,但它根据窗口句柄来获取窗口的消息处理对象来处理各个窗口的消息。经过这样设计之后,就可以实现不同的窗口采用不同的类来处理消息,把相应的事件局限某一个窗口范围内,让处理窗口消息的代码更加清晰,维护性更好。

时间: 2024-09-05 18:10:27

窗口消息处理对象的传递的相关文章

借助Intent实现Android工程中Activity之间Java对象的传递——实现Parcelable接口

借助Intent实现Android工程中Activity之间Java对象的传递有两种方式:一种所传递对象实现了Serializable接口:另一种是所传递对象实现了Parcelable接口,本博客总结传递对象实现Parcelable接口的情况下如何实现Java对象传递: 代码1.添加名为"User.java"的文件: package com.ghj.vo; import android.os.Parcel; import android.os.Parcelable; public cl

Android调用WebService系列之对象构建传递

上一篇我们讲了如何封装Android调用WebService的能力,把上一章的类加入我们便有了与WebService通讯的能力.往往我们会遇到WebService调用是通过对象来进行实际交互调用的.于是便有了这一章构建对象传递. 首先我们了解一下. Ksoap2这个开源包里面提供了一个接口 /* Copyright (c) 2003,2004, Stefan Haustein, Oberhausen, Rhld., Germany  *  * Permission is hereby grant

借助Intent实现Android工程中Activity之间Java对象的传递——实现Serializable接口

借助Intent实现Android工程中Activity之间Java对象的传递有两种方式:一种所传递对象实现了Serializable接口:另一种是所传递对象实现了Parcelable接口,本博客总结传递对象实现Serializable接口的情况下如何实现Java对象传递: 代码1.添加名为"User.java"的文件: package com.ghj.vo; import java.io.Serializable; public class User implements Seria

Netty实战-对象编解码,Netty对象网络传递

书籍推荐:        实例代码 :http://download.csdn.net/detail/jiangtao_st/7677503 Server端代码 <span style="font-size:12px;">/** * * <p> * Netty Server Simple * </p> * * LineBasedFrameDecoder + 消息中得换行符 * * @author 卓轩 * @创建时间:2014年7月7日 * @ver

[转载]php 数组 类对象 值传递 引用传递 区别

一般的数据类型(int, float, bool)不做这方面的解说了 这里详细介绍一下数组和的类的对象作为参数进行值传递的区别 数组值传递 实例代码: <?php function main() { $cc = array( 'a','b' ); change($cc); var_dump($cc); die; } function change($cc){ $cc = array('dd'); } main(); ?> output: array(2) {    [0]=>    st

springMVC通过ajax传递参数list对象或传递数组对象到后台

springMVC通过ajax传递参数list对象或传递数组对象到后台 环境: 前台传递参数到后台 前台使用ajax 后台使用springMVC 传递的参数是N多个对象 JSON对象和JSON字符串 在SpringMVC环境中,@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象.然而在ajax请求往往传的都是Json对象,用 JSON.stringify(data)的方式就能将对象变成字符串.同时ajax请求的时候也要指定dataType: "json",

Android Studio NDK 入门教程(5)--Java对象的传递与修改

概述 本文主要Java与C++之间的对象传递与取值.包括传递Java对象.返回Java对象.修改Java对象.以及性能对比. 通过JNIEnv完成数据转换 Java对象是存在于JVM虚拟机中的,而C++是脱离JVM而运行的,如果在C++中访问和使用Java中的对象,必然会使用JNIEnv这个桥梁.其实通过下面的代码很容易看出,这种访问方式和Java中的反射十分雷同. 这里定义一个简单Java对象用于下文测试: package com.example.wastrel.hellojni; /** *

Android 基于Netty的消息推送方案之对象的传递(四)

在上一篇文章中<Android 基于Netty的消息推送方案之字符串的接收和发送(三)>我们介绍了Netty的字符串传递,我们知道了Netty的消息传递都是基于流,通过ChannelBuffer传递的,那么自然,Object也需要转换成ChannelBuffer来传递.好在Netty本身已经给我们写好了这样的转换工具.ObjectEncoder和ObjectDecoder,下面我们介绍一个案例. 1. 我们构造一个用来传输的对象(JavaBean) [java] view plaincopy

php 对象数组/传递数组参数

在php当中,普通得数据类型的参数传递是通过copy赋值,而object对象则会传递对象的引用,在函数的调用或者直接赋值时会按照这个规则进行,而php中array()传递属于普通数据类型(与我们在C/C++中的传递数组时是传递指针有所不同),因此数组不能够使用clone将内容复制,而是直接赋值时就会复制整个数组,但是该数组是否会完全把内容复制,还要根据数组的item内容确定:当数组的item是普通数据类型时(数值,数组etc.),会直接整个数组包括内容都被复制:当数组的item是object时,