近来在网上发了很多求教贴子,许多人都教我说:看看深入浅出就全懂了,好象他们很懂的样子。到底真懂假懂,到这里来分清!--120分求一例程,最先给出者得全分!!!
我的逻辑是:真正看懂了MFC深入浅出,理解了MFC体系结构的高人,不需MFC类库的支持也能实现用MFC类库肯定能实现的功能。因此我要求大家编写的这个类不能使用MFC中的东西,也不能继承自任何类。当然在测试这个类的功能时可以使用。
(我从CWnd派生了一个类,实现了下述功能,不过对MFC的实现细节搞不清楚。希望哪位高手能不用MFC给我做个演示程序,帮助我理解MFC)
要求编一个类(不能从任何类派生)a,它只有一个公有方法Begin,当调用该方法时,它要启动一个Timer,以便能每个5秒钟弹出一个MessageBox(弹出5个后停止)。
测试方法如下:编一个对话框,上面放5个按钮,并加入a类的5个实例:a1,a2--a5做为成员,当第一个按钮的响应代码为:a1.Begin(),第二个按钮的响应代码为:a2.Begin();依此类推。除此以外测试程序不能外加任何代码(目的是要求所有实现包括SetTimer都封装在类内部)。要求结果是:(1)按下哪个按钮,第隔5秒后弹出一MessageBox上书(ax第n次);(2)可以按任意顺序按这五个按钮,且可能按完第一个按钮又马上按第二个;(3)把按钮数和a类实例数扩大到百上千个都可以。
此题的关键是,要求a类的每一个实例对象(a1--a5)都要生成一个窗口(因SetTimer只能把消息发到窗口),而第个窗口都要有一个全局函数做为窗口过程,也就是说,有多少个a的实例就得有多少个全局函数,可是a类到底有几个实例是不知道的,有可能要生成成百上千个实例,总不能事先编好几千个全局函数备用吧?
有人会说,这还不简单,把窗口过程定为a类的一个静态员函数,不就可以了吗?可是这又带来一个新问题,当这个窗口过程(静态函数)收到一个WM_TIMER消息时,怎么能知道是哪个实例的消息进而支显示与该实例相关的MessageBox?有人会说,你不会把每个实例的this指针当做参数传过去吗?可是要知道,OnTimer函数只有一个参数nIDEvent,不能接收到this指针!当然,这也有办法解决------总之有一系列问题,我想看看高手们如何解决。
最先发到我信箱且符合要求者得120分!!!还会视参与讨论者的情况分别给分,争取大家即有分拿又长知识! 我的信箱为:CYQ_96@etang.com
另:希望高手们能把核心代码贴在下面供大家学习讨论。