炫彩界面库论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 1956|回复: 4

求助:C++风格,注册窗口消息过程时总出错

[复制链接]

该用户从未签到

发表于 2014-6-6 14:38:59 | 显示全部楼层 |阅读模式
当调用XCGUI_RegWndMsgProc(m_hWindow, &CCtrl_mainDlg::Ctrl_mainProc);注册函数后,运行时就出错了:
h文件:

h

h

cpp文件:

cpp

cpp

出现的错误:

err

err


想用到一个项目上,但请问这是怎么回事?





该用户从未签到

 楼主| 发表于 2014-6-6 16:07:42 | 显示全部楼层
竟然没人理我,还是太冷清了,不过经过我的调试终于发现问题了,等下发出来

该用户从未签到

 楼主| 发表于 2014-6-6 16:24:14 | 显示全部楼层
一. xcgui.h文件修改2处:
1. 在函数类型枚举中增加一个类型:
  1. enum xcgui_fun_type //函数类型
  2. {
  3.         ....
  4.         xc_fun_v_e, //元素销毁
  5.         xc_fun_b_e_pt,
  6.         xc_fun_b_e_hdraw,
  7.         xc_fun_b_e_i_pt,
  8.         xc_fun_b_w,
  9.         xc_fun_b_w_e,
  10.         xc_fun_b_w_pt,
  11.         xc_fun_b_w_i,
  12.         xc_fun_b_w_i_pt,
  13.         xc_fun_b_w_i_size,
  14.         xc_fun_b_w_i_i,
  15.         xc_fun_b_w_hdraw,
  16.         xc_fun_b_w_hwnd,
  17.         xc_fun_b_w_i_i_i,   // 增加一个窗口消息过程函数类型
  18.         ....
  19.         }
复制代码
2. 在事件回调函数中增加一个分支:
  1. static BOOL CALLBACK OnEventAndMsg(eventOrMsg_ *pEvent,xcgui_fun_type funType)//事件回调
  2. {
  3.                 xcgui_info_ *info=(xcgui_info_*)pEvent->pClass_fun;
  4.                 BOOL bResult=FALSE;
  5.                 switch(funType)
  6.                 {
  7.                                 ....
  8.                                 case xc_fun_b_w_i_i_i:  // 增加一个窗口消息过程分支
  9.                                                         bResult=(info->theThis->*info->funs.fun_b_w_i_i_i)(pEvent->hWindow,pEvent->xint,pEvent->wParam,pEvent->lParam);
  10.                         break;
  11.                         ....
  12.                 }
  13. }
复制代码
二. xcapp.cpp中修改一处:
1. 在总窗口消息过程中更改一个循环:
  1. LRESULT CALLBACK XCGUI_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  2. {
  3.   ...
  4.   // 把这段:
  5.   /*windowProc_ *pFunT=pWindow->pWndProc;
  6.   while(pFunT)
  7.         {
  8.                 if(((pFunWndMsgProc)pFunT->pFun)((HWINDOW)pWindow,message,wParam,lParam))
  9.                         return 0;
  10.                 pFunT=pFunT->pNext;
  11.         }*/
  12.   //改为:
  13.   windowProc_ *pFunT=pWindow->pWndProc;
  14.   while(pFunT)
  15.         {
  16.                 if(pFunT->pClass_Fun_Info)
  17.                 {
  18.                         eventOrMsg_  event_;
  19.                         event_.hWindow=(HWINDOW)pWindow;
  20.                         event_.hEventEle=NULL;
  21.                         event_.xint=message;
  22.                         event_.wParam=wParam;
  23.                         event_.lParam=lParam;
  24.                         event_.pClass_fun=pFunT->pClass_Fun_Info;
  25.                         if(((pFunClassEventMsg)pFunT->pFun)(&event_,xc_fun_b_w_i_i_i))
  26.                                 return TRUE;
  27.                 }else if(((pFunWndMsgProc)pFunT->pFun)((HWINDOW)pWindow,message,wParam,lParam))
  28.                         return 0;
  29.                 pFunT=pFunT->pNext;
  30.         }
  31. ...
  32. }
复制代码
//
完成 。
这是很明显一个错误哦,XCGUI的开发者是乱了呢,还是懒得理C++的支持?

该用户从未签到

 楼主| 发表于 2014-6-6 16:38:56 | 显示全部楼层
xcgui.h中还有一处要修改:
  1. union xcgui_functions //函数指针
  2. {
  3.         ....
  4.         BOOL (CXEventMsg::*fun_b_w_i_i_i)(HWINDOW,int,int,int); // 增加一个定义
  5.         ....
  6. }
复制代码
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

QQ|Archiver|手机版|小黑屋|炫彩界面库 ( 鄂ICP备2023014763号-1 )

GMT+8, 2024-5-8 22:38 , Processed in 0.079875 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表