其他分享
首页 > 其他分享> > ocx手动添加自定义消息

ocx手动添加自定义消息

作者:互联网

接上篇介绍的ocx手动添加事件,下面介绍添加自定义消息的方式

添加自定义消息:

.h:
1,增加自定义消息ID
#define WM_ON_YBINIT WM_USER+23
   
2,在消息映射节点内增加自定义消息的处理函数声明
// Message maps
//{{AFX_MSG(CocxCtrl)
// NOTE - ClassWizard will add and remove member functions here.
//   DO NOT EDIT what you see in these blocks of generated code !
afx_msg void OnSyybInit(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
       
       .cpp:
1, 在消息映射节点增加消息映射的宏
BEGIN_MESSAGE_MAP(CocxCtrl, COleControl)
//{{AFX_MSG_MAP(CocxCtrl)
// NOTE - ClassWizard will add and remove message map entries
//   DO NOT EDIT what you see in these blocks of generated code !
ON_MESSAGE(WM_ON_YBINIT, OnSyybInit)
//}}AFX_MSG_MAP
 
2, 对消息处理函数进行实现
void CocxCtrl::OnSyybInit(WPARAM wParam, LPARAM lParam)
{
   string* pStr = (string*)lParam;
   if (pStr != NULL)
  {
this->FireOnYbInit((*pStr).c_str());
       delete pStr;
  }
}    

unsigned int WINAPI CocxCtrl::YbInitThread(LPVOID lpParam)
{
   CocxCtrl* pOnwer = (CocxCtrl*)lpParam;

char szErrMsg[1536], szRet[50];
memset(szErrMsg,0,sizeof(szErrMsg));
memset(szRet,0,sizeof(szRet));
sprintf(szRet,"%d", YB::instance()->Init(szErrMsg));

map<string, string> result;
result.insert(map<string, string>::value_type("FunRet", szRet));
result.insert(map<string, string>::value_type("FunMsg", szErrMsg));
   string* pStr = new string(PackJsonStr(result));
pOnwer->PostMessage(WM_ON_YBINIT, 0, (LPARAM)pStr);

{
Lock g(pOnwer->m_asny_shyb);
pOnwer->m_asny_shyb_invoked = false;
}
_endthreadex(0);
return 0;
}

short CocxCtrl::YbInit(LPCTSTR pInitInfo)
{
   Lock g(m_asny_shyb);

   if(m_asny_shyb_invoked)
  {
return -2;
  }
m_asny_shyb_invoked = true;

   unsigned int threadId;
   HANDLE hthread = (HANDLE)_beginthreadex(0, 0, YbInitThread, (void*)this, 0, &threadId);
   if(hthread == 0)
  {
m_asny_shyb_invoked = false;
       return -1;
  }
CloseHandle(hthread);
   return 0;
}

  

 

 

 

 

标签:pStr,szErrMsg,自定义,asny,CocxCtrl,手动,ocx,shyb
来源: https://www.cnblogs.com/zhangmo/p/16363399.html