您的位置:首页 > 其它

MFC中自定义消息的一般流程

2011-11-10 18:05 399 查看
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);
}
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: