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

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

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

    學(xué)海拾遺

    生活、技術(shù)、思想無(wú)處不在學(xué)習(xí)
    posts - 52, comments - 23, trackbacks - 0, articles - 3
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    VC++中的ON_COMMAND_RANGE宏

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

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

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

    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.?

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

    因此完全可以一個(gè)帶參數(shù)的消息處理函數(shù)來(lái)接收指定的命令I(lǐng)D,不過(guò)這里要提醒朋友一點(diǎn)的是,并不是非得只有一個(gè)參數(shù),可以使用多個(gè)參數(shù)的消息處理函數(shù),如function(WPARAM wParam, LPARAM lParam),但是真正能夠使用的參數(shù)是第一個(gè)參數(shù)wParam,它是用戶選擇的命令I(lǐng)D。


    對(duì)于更新處理函數(shù),也存在相對(duì)應(yīng)于ON_COMMAND_RANGE的ON_UPDATE_COMMAND_UI_RANGE宏,它的作用也是處理連續(xù)的范圍(contiguous range),但是它與ON_COMMAND_RANGE有一點(diǎn)點(diǎn)區(qū)別。通過(guò)上面可知,一般范圍處理函數(shù)(ON_COMMAND_RANGE)是通過(guò)在處理函數(shù)后面加一個(gè)參數(shù),當(dāng)消息進(jìn)行處理時(shí),將會(huì)把該命令I(lǐng)D傳至該參數(shù)。而ON_UPDATE_COMMAND_UI_RANGE則使用的是pCmdUI,一個(gè)CCmdUI的指針類型,它內(nèi)部就包含了一個(gè)數(shù)據(jù)成員(m_nID),用來(lái)指向命令I(lǐng)D,具體請(qǐng)參考MSDN中的內(nèi)容。上述內(nèi)容在MSDN中的《Visual C++ Programmer’s Guide》中的《Handlers for Message-Map Ranges》一章《Example for a Range of Command IDs》一節(jié)中可以找到原文:

    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.

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

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久免费观看视频| 亚洲乱码日产一区三区| 久久精品国产亚洲av四虎| 九九热久久免费视频| 国产精品无码免费视频二三区| 亚洲人成在线播放| 毛色毛片免费观看| 8x8x华人永久免费视频| 毛片免费在线播放| 亚洲日韩亚洲另类激情文学| 色吊丝永久在线观看最新免费| 黄色三级三级三级免费看| 亚洲一区日韩高清中文字幕亚洲 | 亚洲成人免费在线| 最新黄色免费网站| 亚洲一本一道一区二区三区| 四虎成人免费观看在线网址| selaoban在线视频免费精品| 亚洲国产中文字幕在线观看| 国产又黄又爽又大的免费视频 | MM1313亚洲精品无码久久| 亚洲国产成人久久一区久久| 青青操在线免费观看| 亚洲国产精品久久人人爱| 日韩免费高清视频网站| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 亚洲国产av一区二区三区| 岛国岛国免费V片在线观看| 久久久亚洲AV波多野结衣| 全免费一级毛片在线播放| eeuss免费影院| 亚洲国产亚洲片在线观看播放| 永久黄网站色视频免费观看| 精品熟女少妇aⅴ免费久久| 亚洲韩国在线一卡二卡| 国产大片91精品免费观看男同| 在线观看人成视频免费无遮挡| 亚洲成a人片在线不卡| 亚洲自偷自偷图片| 女人被弄到高潮的免费视频| 最近免费mv在线观看动漫|