MFC C++ 如何发送Postmessage
案例1
一、发起postmessage
void CValidEdit::OnTimer(UINT_PTR timer)
{
if (timer == TM_BALLOONTIP)
{
_bIsShowingTip = false;
KillTimer(TM_BALLOONTIP);
Edit_HideBalloonTip(m_hWnd);
CWnd *pParent = GetParent();
if (pParent != NULL)
{
CDialog *pDlg = dynamic_cast<CDialog*>(pParent);
while (pDlg == NULL)
{
pParent = pParent->GetParent();
if (pParent != NULL)
pDlg = dynamic_cast<CDialog*>(pParent);
}
if (pDlg != NULL)
pDlg->PostMessage(KILL_TM_BALLOONTIP);
}
}
}
这个方法 会通过GetParent()找到控件的所属对话框
CWnd *pParent = GetParent();
通过递归,找到CDialog对话框:
CDialog *pDlg = dynamic_cast<CDialog*>(pParent);
while (pDlg == NULL)
{
pParent = pParent->GetParent();
if (pParent != NULL)
pDlg = dynamic_cast<CDialog*>(pParent);
}
最后通过PostMessage向所属对话框发消息
pDlg->PostMessage(KILL_TM_BALLOONTIP);
二、接受message
BEGIN_MESSAGE_MAP(CDlgDrawJKSecionEx, CCommonDialogEx)
ON_WM_VSCROLL()
ON_MESSAGE(KEY_DOWN_CTRL_Q, &CDlgDrawJKSecionEx::OnKeyDownSpaceQ)
ON_MESSAGE(KEY_DOWN_CTRL_W, &CDlgDrawJKSecionEx::OnKeyDownSpaceW)
ON_MESSAGE(KEY_DOWN_CTRL_E, &CDlgDrawJKSecionEx::OnKeyDownSpaceE)
ON_MESSAGE(KEY_DOWN_CTRL_R, &CDlgDrawJKSecionEx::OnKeyDownSpaceR)
ON_MESSAGE(WM_NUM_CHANGE, &CDlgDrawJKSecionEx::OnListNumChange)
ON_MESSAGE(KEY_DOWN_CTRL, &CDlgDrawJKSecionEx::OnKeyDownCtrl)
ON_MESSAGE(KEY_UP_CTRL, &CDlgDrawJKSecionEx::OnKeyUpCtrl)
ON_MESSAGE(KILL_TM_BALLOONTIP, &CDlgDrawJKSecionEx::OnUpdateDlg)
END_MESSAGE_MAP()
在接收对话框的message上面,添加ON_MESSAGE
ON_MESSAGE(KILL_TM_BALLOONTIP, &CDlgDrawJKSecionEx::OnUpdateDlg)
在这个对话框中,就可以实现这个消息了
案例2
子窗口向窗口发送postmessage