• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Dragon  
            Dragon
            日歷
            <2008年9月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011
            統(tǒng)計(jì)
            • 隨筆 - 58
            • 文章 - 0
            • 評(píng)論 - 55
            • 引用 - 0

            導(dǎo)航

            常用鏈接

            留言簿(3)

            隨筆分類(58)

            隨筆檔案(58)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

             

                    這是一篇自己理解所寫(xiě)的文章,若我有哪些地方理解不正確的,請(qǐng)指出,不想誤導(dǎo)讀者。
                    在可視化的消息中,我們會(huì)發(fā)現(xiàn)他三個(gè)地方加了代碼,但有的不同,在頭文件中加的不是afx_msg開(kāi)頭,而用virtual,如OnOK
            函數(shù)。一般加的代碼的步驟是:
            1.在頭文件中加心afx_msg 開(kāi)頭的函數(shù)聲明.
            2.在實(shí)現(xiàn)文件的BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()之間加ON_WM_或ON_MESSAGE的代碼
            3.最后還是在實(shí)現(xiàn)文件里加函數(shù)的實(shí)現(xiàn)


                    但我還是有點(diǎn)不理解,最后想自己寫(xiě)一個(gè)自定義的消息映射程序,雖然沒(méi)有寫(xiě)出來(lái),但還是根據(jù)這些來(lái)猜這機(jī)制的執(zhí)行原理,這些
            程序都是上網(wǎng)查到的,
            1.在頭文件加:
              #define WM_MYMSG  WM_USER+5//自定義一個(gè)消息
              afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam); //自定義消息的處理函數(shù)聲明


            2.在實(shí)現(xiàn)文件里加:
              ON_MESSAGE(WM_MYMSG, OnMyMessage)
              //利用ON_MESSAGE()宏在自定義消息與其處理函數(shù)間建立映射關(guān)系


            void CModelessDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
            //從lParam中取出CString對(duì)象的指針,并將字符串內(nèi)容在IDC_MSGEDIT中顯示出來(lái)
            {

                CString *str;
                str=(CString *)lParam;

                SetDlgItemText(IDC_EDIT,*str);
            }


            void CModelessDlg::OnMsgBTN()
            {

             CString str= "自定義消息被觸發(fā)了!";

             SendMessage(WM_MYMSG, 0, (LPARAM) &str);
             //給ModelessDlg自己發(fā)一個(gè)自定義的消息
            }

                    我的理解:它是根據(jù)WM_MYMSG來(lái)確定參數(shù)的值的(wParam,lParam),對(duì)于每一個(gè)消息操作函數(shù)來(lái)確定他的參數(shù)的,這里的SendMessage函數(shù)把WM_MYMSG與(wParam)0和(lParam)&str捆綁在一起了,所以,在我們用消息處理函數(shù)OnMyMessage()時(shí),我們?nèi)粢玫絽?shù)時(shí)我們就可以用這兩個(gè)參數(shù),在這的參數(shù)位置應(yīng)該不可以改變的吧,我猜的.
            后來(lái)看到一本書(shū),自定義的消息函數(shù)一般帶wParam,lParam這兩個(gè)參數(shù),加下面一段代碼增加理解:

            暫時(shí)理解消息函數(shù)是通過(guò)消息(WM_)對(duì)應(yīng)的參數(shù)(wParam.lParam).

            BOOL CServerDlg::PreTranslateMessage(MSG* pMsg)
            {
             if (pMsg->message == WM_SOCKET)
             {
              m_sockCur = pMsg->wParam;
              m_nCurMsg = pMsg->lParam;
             }
             return CDialog::PreTranslateMessage(pMsg);
            }
            通過(guò)WM_SOCKET關(guān)聯(lián) pMsg->wParam和pMsg->lParam。
                     但當(dāng)我在用WSAAsyncSelect函數(shù)時(shí)沒(méi)有看到他的消息參數(shù)(假如在這里是WM_SOCKET_READ)未與一些參數(shù)關(guān)聯(lián)在一起,而且這個(gè)參數(shù)還是我自定義的,不是系統(tǒng)本身有的,它是用來(lái)接收消息的參數(shù)的,后來(lái)我查MSDN時(shí)發(fā)現(xiàn)他的描述是這樣的:
              
               When one of the nominated network events occurs on the specified socket s, the application's window hWnd receives message wMsg. The wParam parameter identifies the socket on which a network event has occurred. The low word of lParam specifies the network event that has occurred. The high word of lParam contains any error code. The error code be any error as defined in Winsock2.h.

            Note  Upon receipt of an event notification message, the WSAGetLastError function cannot be used to check the error value because the error value returned can differ from the value in the high word of lParam.

            The error and event codes can be extracted from the lParam using the macros WSAGETSELECTERROR and WSAGETSELECTEVENT, defined in Winsock2.h as:

            #define WSAGETSELECTERROR(lParam)       HIWORD(lParam)
            #define WSAGETSELECTEVENT(lParam)       LOWORD(lParam)

                當(dāng)一個(gè)指定的網(wǎng)絡(luò)事件發(fā)生在指定的套接字s上時(shí),應(yīng)用程序的窗口句柄接收到一條消息wMsg,wParam識(shí)別網(wǎng)絡(luò)事件發(fā)生在哪一個(gè)套接字上,lParam的低字段則指定發(fā)生的網(wǎng)絡(luò)事件,高字段包括任意的錯(cuò)誤代碼,錯(cuò)誤代碼在Winsock2.h文件中定義.
                這事件和錯(cuò)誤可以從lParam通過(guò)調(diào)用宏WSAGETSELECTERROR 和 WSAGETSELECTEVENT提取,在Winsock2.h文件中定義為:
                #define WSAGETSELECTERROR(lParam)       HIWORD(lParam)
                #define WSAGETSELECTEVENT(lParam)       LOWORD(lParam)


            可以看出WSAAsyncSelect收到的參數(shù)還是在其它地方作過(guò)關(guān)聯(lián)的,不然它也不會(huì)有值(wParam,lParam),這是我的推理,未證實(shí).
               
            typedef UINT WPARAM;(wParam的類型,w表示W(wǎng)ORD)
            typedef LONG LPARAM;(lParam的類型,l表示LONG)

            posted on 2008-09-02 19:59 Dragon 閱讀(524) 評(píng)論(0)  編輯 收藏 引用 所屬分類: VC
             
            Copyright © Dragon Powered by: 博客園 模板提供:滬江博客
            久久精品中文字幕第23页| 国内精品九九久久精品| 久久男人AV资源网站| 国产偷久久久精品专区| 精品一区二区久久| 久久久91人妻无码精品蜜桃HD| 久久亚洲中文字幕精品一区| 久久久精品国产sm调教网站| 久久露脸国产精品| 一本久久a久久精品vr综合| 91精品观看91久久久久久| 一本久久免费视频| 久久亚洲国产中v天仙www| 久久久久久精品免费看SSS | 国産精品久久久久久久| 久久精品国产2020| 久久久久无码专区亚洲av| 99久久99久久久精品齐齐| 欧美精品乱码99久久蜜桃| 国产精品久久久久久久久久免费| 久久人妻少妇嫩草AV无码专区| 亚洲国产成人久久综合碰| 亚洲狠狠久久综合一区77777| 久久综合给合久久狠狠狠97色69| 久久久久久国产a免费观看不卡| 久久久无码精品亚洲日韩按摩| 无码八A片人妻少妇久久| 久久精品国产99久久久香蕉| 久久国产高清字幕中文| 久久久一本精品99久久精品66| 丁香色欲久久久久久综合网| 亚洲综合久久久| 一级女性全黄久久生活片免费| 久久精品国产欧美日韩| 91麻豆精品国产91久久久久久| 97久久精品无码一区二区| 久久国产乱子伦免费精品| 97久久综合精品久久久综合| 久久精品国产亚洲av麻豆色欲| 久久亚洲精品国产精品| 久久国产亚洲精品无码|