关于VC自定义消息的有关问题

关于VC自定义消息的问题
我自己创建了一个类CTestPro类
里面定义
#define WM_PRO_MSG (WM_USER+100)
#define PRO_INIT_SEC 101
#define PRO_INIT_ER 118
#define PRO_AVAILABLE 102
#define PRO_INVALID 103

在此类中调用
 PostMessage(m_pDlg, WM_PRO_MSG, (WPARAM)nInfo, 0)//m_pDlg 是Ctest类初始化时传进的主窗口类CMsgDlg类的m_hWnd

在CmsgDlg类中注册了消息处理函数
//{{AFX_MSG(CMsgDlg)
afx_msg UINT OnProMsg(WPARAM dwMsg,LPARAM dwMsg2);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

在消息映射宏中定义如下
BEGIN_MESSAGE_MAP(CMsgDlg, CDialog)
//{{AFX_MSG_MAP(CParallelAppDlg)

ON_MESSAGE(WM_PRO_MSG,OnProMsg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

UINT CMsgDlg::OnProMsg(WPARAM dwMsg,LPARAM dwMsg2)
{

BOOL bWork=FALSE;
CString strMsg1,strMsg2,strMsg3;
switch(dwMsg)
{
case PRO_INIT_SEC:
ShowMsg("初始化完成.");
return 0;
case PRO_INIT_ER:
ShowMsg("初始化失败.");
break;
case PRO_AVAILABLE:
ShowMsg("就绪.");
return 0;
case PRO_INVALID:
ShowMsg("不可用.");
break;
}
}

编译通过,运行的时候我调用PostMessage显示已成功,为甚么不执行OnProMsg函数啊?


------解决方案--------------------
OnProMsg(WPARAM dwMsg,LPARAM dwMsg2) 
你的参数转换了没有?因为你没有对default进行处理,如果都不符合case里面的,它就不会有消息弹出来。
------解决方案--------------------
在哪里 PostMessage ??
------解决方案--------------------
用sendmessage呢?
------解决方案--------------------
UINT CMsgDlg::OnProMsg(WPARAM dwMsg,LPARAM dwMsg2)
{

BOOL bWork=FALSE;
CString strMsg1,strMsg2,strMsg3;
switch(dwMsg)
{
case PRO_INIT_SEC:
ShowMsg( "初始化完成. ");
return 0;
case PRO_INIT_ER:
ShowMsg( "初始化失败. ");
break;
case PRO_AVAILABLE:
ShowMsg( "就绪. ");
return 0;
case PRO_INVALID:
ShowMsg( "不可用. ");
break;
}


你跟踪下,到这个函数的时候,看看参数:WPARAM dwMsg,LPARAM dwMsg2都是啥
------解决方案--------------------
你发送消息的时候,主线程在干什么?,在忙着干活吗?比如在一个循环里面,如果正在忙着的话就收不到了
------解决方案--------------------
检查一下,在PostMessage时,m_pDlg是不是有效的窗口句柄