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); 
}
}

  

posted on 2011-11-10 18:05  LateStop  阅读(392)  评论(0)    收藏  举报

导航