MFC中自定义消息的一般流程
1. 定义自己的消息值。一般形式为
#define WM_MYMESSAGE (WM_USER + 100)
2. 定义该消息的响应函数。形式应该为:
LRESULT CYourClass::OnMyMessage(WPARAM wParam, LPARAM lParam){}
其中完成自己想要完成的功能。
3. 将两者绑定起来。BEGIN_MESSAGE 与 END_MESSAGE 宏之间,加入:
BEGIN_MESSAGE_MAP(CMainFrame, CBCGPMDIFrameWnd) ..... ON_MESSAGE(WM_MYMESSAGE, OnMyMessage) .... END_MESSAGE_MAP()
4. 在合适的地方发出该消息:
a.如托盘程序,是将xxxx与消息绑定
b.如监听目录程序,在有新文件加入时,调用PostMessage()方法
//托盘程序 //设定托盘通知数据结构 NOTIFYICONDATA tnd; tnd.uCallbackMessage=WM_TRAY; tnd.cbSize=sizeof(NOTIFYICONDATA); tnd.hWnd=this->m_hWnd; tnd.uID=IDR_MAINFRAME;//IDR_MSPMfrdasTYPE; tnd.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP|NIF_INFO; ...
//监听程序
void CMonitorDirFiles::getCurrentFileList()
{
//---------------判断有无新文件-------------------//
vector<string> fileList;
getCurrentFileList(fileList);
string fname;
BOOL foundFlag = FALSE;
int count = 0;
//----------判断有无新文件------------//
EnterCriticalSection(&MsgCriticalSection);
for (int i = 0; i < (int)fileList.size(); i++)
{
fname = fileList[i];
foundFlag = FALSE;
for (int j = 0; j < (int)m_listExistFile.size(); j++)
{
if (fname == m_listExistFile[j])
{
foundFlag = TRUE;
break;
}
}
if (foundFlag) continue;
m_listNewFile.push(fname);
m_listExistFile.push_back(fname);
count++;
}
LeaveCriticalSection(&MsgCriticalSection);
//----------判断有无新文件------------//
//---------------判断有无新文件-------------------//
if (count > 0 && m_hWnd != NULL)
{
//发送消息
PostMessage(m_hWnd, m_nMsg, NULL, NULL);
}
}
浙公网安备 33010602011771号