经典的 windowproc消息处理函数中,使用的switch结束,进行消息转发。
例如:
//窗口消息函数一
LRESULT WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch (message )
{
case WM_CLOSE:
case WM_COMMAND:
case WM_INITDIALOG:
onMessage(hWnd,wParam,lParam);
break;
}
}
看了一下深入浅出MFC,自己也来写一个消息处理函数,方便自己测试,参照P owerbuilder中的消息封装,把消息和处理函数放到一个数组中。
struct Event
{
UINT msg; //消息
function fun;//函数指针
};
//窗口消息函数一
LRESULT WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
Event eMap[] ={{WM_COMMAND,onMessage},{WM_CREATE,onMessage},{WM_CLOSE,onMessage}};
int iSize = SIZEOF_ARRAY(eMap);
for(int i =0;i<iSize;i++)
{
if(uMsg == eMap[i].msg)
{
(*eMap[i].fun)(hWnd,wParam,lParam);
return 1 ; //有消息
}
}
return 0 ;
}
LRESULT onMessage(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
printf("handed Message\n");
return 0 ;
}
function 是一个函数指针,定义 :typedef LRESULT (*Function)(HWND,WPARAM,LPARAM);
窗口要用到哪些消息,就定义在消息数组中,简单好用,在这里写个备忘录。