Duilib 窗口之间的消息传递

转载:https://www.cnblogs.com/Alberl/p/3404240.html

1、定义消息ID

#define WM_USER_POS_CHANGED     WM_USER + 2 

2、响应自定义消息:

  在HandleMessage函数的switch分支里加上如下代码即可:

1 case WM_USER_POS_CHANGED:  
2     //处理代码;    
3     break;

3、发送自定义消息:

  在需要发送消息的地方调用::PostMessage(*this, WM_USER_POS_CHANGED, wParam, lParam);即可,和windows一样(当然,SendMessage也OK,看情况使用)

踩过的坑:

1.PostMessage函数第一个参数为窗口句柄,传递窗口句柄时,应将传递部分写在Create函数和ShowModal函数之间。

例如:点击主窗口设置按钮打开设置窗口,要创建新线程:

CreateThread(NULL,0,SettingThread,m_hWnd,0,NULL);

然后线程函数代码如下:

DWORD WINAPI SettingThread(LPVOID lpParameter){
  HWND hWnd = (HWND)lpParameter;
  CsettingWnd* pWnd = new CSettingWnd;
  pWnd->Create(NULL, _T("CSettingWnd"),UI_WNDSTYLE_DIALOG,WS_EX_WINDOWEDGE);
  pWnd->SetMainWnd(hWnd);
  pWnd->CenterWindow();
  pWnd->ShowModal();
  delete pWnd;
  return 0;
}

2.确保传递消息的函数被调用了。

猜你喜欢

转载自www.cnblogs.com/Toya/p/11419945.html