for(i=0; i < dim(_messageEntries); i++) { // 訊息對照表
if (message == _messageEntries[i].nMessage)
return((*_messageEntries[i].pfn)(hWnd, message, wParam, lParam)); /*《----1.这里是什麽意思?没有见过c的函数指针有这样的调用方法啊?"((*_messageEntries[i].pfn)(hWnd, message, wParam, lParam)"2.怎麽理解?*/
}
for(i=0; i < dim(_commandEntries); i++) { // 命令項目對照表
if(LOWORD(wParam) == _commandEntries[i].nMessage)《----3.这里是什麽意思?
return((*_commandEntries[i].pfn)(hWnd, message, wParam, lParam));
}
4.还有书上说wParam和IParam一个是十六进制,一个是32进制,但他还是没说清到底有什麽区别啊?请指点!

解决方案 »

  1.   

    1.这里是调用相应的消息处理函数.
    2.道理和1一样,看看messageEntries的结构吧,自然就明白了.
    3.在MFC中wParam中包含了消息类型,如WM_CREATE这样的消息,wParam中的低字节保存了Windows消息这里LOWORD(wParam)就是取得wParam低字节的内容也就是取得Windows消息.
    4.书上应该说的是wParam和lParam一个是十六位,一个是三十二位的吧.
      

  2.   

    4:wParam:WORD(两个字节)类型的;lParm:LONG(四个字节)
      

  3.   

    我不明白的主要是这里:"*_commandEntries[i].pfn)(hWnd, message, wParam, lParam)"
    这个*_commandEntries[i].pfn是什麽调用方法?返回值是什麽?后面紧跟的hWnd, message, wParam, lParam)"是谁的参数?
      

  4.   

    1、2、3 :这里是以函数指针的形式调用函数。这里用的是结构数组,结构中存放消息值与处理该消息的函数指针。你看一下结构的定义就知道了。4、如果我记错好像windows下都是32位的。不然你就自己测一测。
       用sizeof()算一下。看看具体值是多少。
      

  5.   

    注:深入浅出MFC中分析的代码和vc6不太一样。
      

  6.   

    函数指针,调用函数的一种方法。LOWOR表示低端字节的意思。
    HIWOR表示高断字节