首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

EVC SDK下创建MFC消息处理结构,消息分发有关问题,

2012-01-23 
EVC SDK下创建MFC消息处理结构,消息分发问题,高手请进!背景:不使用MFC环境,使用EVCWCEapplication.创建CWi

EVC SDK下创建MFC消息处理结构,消息分发问题,高手请进!
背景:
    不使用   MFC   环境,   使用EVC     WCE   application.
    创建   CWinComponent     为所有控件的基类
                有一函数指针变量:     CALLBACK   m_pfnOldWindowProc(...)

    创建CWinForm:   public   CWinComponent   为所有窗口的基类
    创建其他的   CBtn:Public   CWinComponent   为一般的按钮控件

思路:
    模拟MFC的消息分发机制,创建全局的:
LRESULT   CALLBACK   WinGlobalWinProc   (HWND   hWnd,   UINT   message,   WPARAM   wParam,   LPARAM   lParam)
      在创建WinForm   窗体(CreateWindowEx)后,设置窗口管理,并替换原来系统默认的窗口处理函数为当前全局的窗体处理函数,使系统所有消息均受全局消息循环处理:
      //添加到全局窗口列表中
        g_WinMgr.Append(GetHandle(),   this);
        if   (m_pfnOldWindowProc   ==   NULL)//如果本组建原来的消息处理函数为空,则置新的窗体处理函数为全局的消息处理函数
        {
          m_pfnOldWindowProc   =   (WNDPROC)GetWindowLong(GetHandle(),   GWL_WNDPROC);
          if   (equal((long)m_pfnOldWindowProc,   (long)WinGlobalWinProc)   ==   false){
          m_pfnOldWindowProc   =   (WNDPROC)
          SetWindowLong(GetHandle(),   GWL_WNDPROC,   (long)   WinGlobalWinProc);
            }
        }

【问题】
在EVC4.0+SP4   环境下,
      equal((long)m_pfnOldWindowProc,   (long)WinGlobalWinProc)始终返回为false,     通过调试跟踪,查看内存,赋值给一个DWORD   nx     比较,   最终pfnOldWindowProc   表现为全局的WinGlobalWinProc地址,   而
n1   =   (long)WinGlobalWinProc则始终都是   后低20   位数据,
  例如     pfnOldWindowProc     =     0x18013fc8     而传入   equal(long,long)的第二个参数   (long)WinGlobalWinProc)     始终为:   0x00013fc8

在DEBUG下和RELEASE下的调试结果是不同的,   DEBUG下还可以运行正常,但是在RELEASE下就不可能运行正常

【难点解释】
1、GlobalProc   的CALLBACK定义是否和每一个对象的oldProc定义有歧异,不能正常比较?
2、在调试窗口看到的   GlobalProc和   OldProc具有相同的地址,为什么比较却不同?是否比较方式不对?能那么比较么?
3、在调试过程中发现   GlobalProc   和   OldProc   的定义有差异,一个为:GlobalProc(HWND__   *   hWnd   ,.....)   而另外一个为   GlobalProc(struct   HWND__   *hWnd)..     这个什么原因引起的?
4、模拟MFC的消息处理过程,最核心的就是这理的消息分发机制,那么是否有其他的好的机制建议呢?



[解决办法]
问题好宏大呀!帮顶接分!

EVC是什么没用过!
[解决办法]
EVC是什么没用过!
[解决办法]
up
[解决办法]
正在学EVC 用WTL做程序呢...
[解决办法]
EVC是嵌入式设备下的交叉编译工具。

最近用这个编写windows ce.net操作系统的应用程序 也编几个小游戏在自己的PPC上耍。

热点排行