<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    學海拾遺

    生活、技術、思想無處不在學習
    posts - 52, comments - 23, trackbacks - 0, articles - 3
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    VC++中的ON_COMMAND_RANGE宏

    Posted on 2008-01-26 13:51 tanzek 閱讀(4694) 評論(0)  編輯  收藏
    VC++中的ON_COMMAND_RANGE宏和ON_COMMAND等宏一樣,是用來聲明消息處理函數的,與
    ON_COMMAND不同的是,此宏可用來定義一組消息的處理函數。

    兩個宏的用法是:
    ON_COMMAND(id,memberFxn)
    ON_COMMAND_RANGE(
    id1,id2,memberFxn)

    看起來其中memberFxn似乎沒有什么差別,但是在學習使用中,發現ON_COMMAND_RANGE宏中的memberFxn常常會被定義成帶參數的處理函數,而ON_COMMAND則是不帶參數的處理函數。這就讓我奇怪了,于是查閱MSDN的解釋,循著提供的線索一直查到了《Visual C++ Programmer’s Guide》中的《Handlers for Message-Map Ranges》一章,于是在《Declaring the Handler Function》一節中找到了答案,引用原文如下:

    Handler functions for single commands normally take no parameters. With the exception of update handler functions, handler functions for message-map ranges require an extra parameter, nID, of type UINT. This parameter is the first parameter. The extra parameter accommodates the extra command ID needed to specify which command the user actually chose.?

    為了幫助和我一樣不太懂英文的朋友,頂著頭皮翻譯了下:
    單個命令(消息)的處理函數通常不帶參數。但是更新處理函數、針對消息映射范圍的處理函數需要一個額外的參數,一個UINT類型的nID。此參數是第一個參數,這個額外的參數收集了用來指定用戶真正選擇命令的命令ID。

    因此完全可以一個帶參數的消息處理函數來接收指定的命令ID,不過這里要提醒朋友一點的是,并不是非得只有一個參數,可以使用多個參數的消息處理函數,如function(WPARAM wParam, LPARAM lParam),但是真正能夠使用的參數是第一個參數wParam,它是用戶選擇的命令ID。


    對于更新處理函數,也存在相對應于ON_COMMAND_RANGE的ON_UPDATE_COMMAND_UI_RANGE宏,它的作用也是處理連續的范圍(contiguous range),但是它與ON_COMMAND_RANGE有一點點區別。通過上面可知,一般范圍處理函數(ON_COMMAND_RANGE)是通過在處理函數后面加一個參數,當消息進行處理時,將會把該命令ID傳至該參數。而ON_UPDATE_COMMAND_UI_RANGE則使用的是pCmdUI,一個CCmdUI的指針類型,它內部就包含了一個數據成員(m_nID),用來指向命令ID,具體請參考MSDN中的內容。上述內容在MSDN中的《Visual C++ Programmer’s Guide》中的《Handlers for Message-Map Ranges》一章《Example for a Range of Command IDs》一節中可以找到原文:

    Update handler functions for single commands normally take a single parameter, pCmdUI, of type CCmdUI*. Unlike handler functions, update handler functions for message-map ranges do not require an extra parameter, nID, of type UINT. The command ID, which is needed to specify which command the user actually chose, is found in the CCmdUI object.

    意思大概也是:
    單個命令的更新處理函數通常只帶一個參數,即一個CCmdUI指針類型的pCmdUI。不像普通的處理函數一樣,針對消息映射范圍的更新處理函數不需要一個額外的UINT參數nID,這個用來指定用戶真正選擇的命令ID,能夠在CCmdUI對象中找到。

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 99热在线观看免费| 91免费国产在线观看| 亚洲an天堂an在线观看| 成人免费在线观看网站| 国产免费内射又粗又爽密桃视频| 久久精品国产亚洲AV麻豆网站 | 无码av免费一区二区三区试看| 亚洲性无码AV中文字幕| 亚洲va国产va天堂va久久| 四虎免费大片aⅴ入口| 日本一道本不卡免费 | 亚洲人成77777在线播放网站不卡| 亚洲高清视频一视频二视频三| 99久久综合精品免费| 有色视频在线观看免费高清在线直播| 99久久亚洲综合精品成人网| 亚洲国产精品一区二区三区久久| 最近最新高清免费中文字幕| 黄色网址在线免费观看| 亚洲一卡二卡三卡| 亚洲大尺度无码专区尤物| 国产无遮挡又黄又爽免费视频| 18成禁人视频免费网站| 中文字幕在线免费播放| 色天使亚洲综合一区二区| 亚洲日本香蕉视频| 亚洲AV综合色区无码一区爱AV | **真实毛片免费观看| 久久www免费人成精品香蕉| 亚洲人成无码网站在线观看| 亚洲国产精品不卡在线电影| 亚洲精品动漫人成3d在线| 成年女人免费视频播放77777| 久操视频在线免费观看| 国产精品hd免费观看| 老司机午夜在线视频免费| 亚洲中文字幕精品久久| 亚洲性无码av在线| 亚洲AV无码第一区二区三区| 久久国产成人精品国产成人亚洲| 免费永久在线观看黄网站|