• <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
            統計
            • 隨筆 - 58
            • 文章 - 0
            • 評論 - 55
            • 引用 - 0

            導航

            常用鏈接

            留言簿(3)

            隨筆分類(58)

            隨筆檔案(58)

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

             

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


                    但我還是有點不理解,最后想自己寫一個自定義的消息映射程序,雖然沒有寫出來,但還是根據這些來猜這機制的執行原理,這些
            程序都是上網查到的,
            1.在頭文件加:
              #define WM_MYMSG  WM_USER+5//自定義一個消息
              afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam); //自定義消息的處理函數聲明


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


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

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

                SetDlgItemText(IDC_EDIT,*str);
            }


            void CModelessDlg::OnMsgBTN()
            {

             CString str= "自定義消息被觸發了!";

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

                    我的理解:它是根據WM_MYMSG來確定參數的值的(wParam,lParam),對于每一個消息操作函數來確定他的參數的,這里的SendMessage函數把WM_MYMSG與(wParam)0和(lParam)&str捆綁在一起了,所以,在我們用消息處理函數OnMyMessage()時,我們若要用到參數時我們就可以用這兩個參數,在這的參數位置應該不可以改變的吧,我猜的.
            后來看到一本書,自定義的消息函數一般帶wParam,lParam這兩個參數,加下面一段代碼增加理解:

            暫時理解消息函數是通過消息(WM_)對應的參數(wParam.lParam).

            BOOL CServerDlg::PreTranslateMessage(MSG* pMsg)
            {
             if (pMsg->message == WM_SOCKET)
             {
              m_sockCur = pMsg->wParam;
              m_nCurMsg = pMsg->lParam;
             }
             return CDialog::PreTranslateMessage(pMsg);
            }
            通過WM_SOCKET關聯 pMsg->wParam和pMsg->lParam。
                     但當我在用WSAAsyncSelect函數時沒有看到他的消息參數(假如在這里是WM_SOCKET_READ)未與一些參數關聯在一起,而且這個參數還是我自定義的,不是系統本身有的,它是用來接收消息的參數的,后來我查MSDN時發現他的描述是這樣的:
              
               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)

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


            可以看出WSAAsyncSelect收到的參數還是在其它地方作過關聯的,不然它也不會有值(wParam,lParam),這是我的推理,未證實.
               
            typedef UINT WPARAM;(wParam的類型,w表示WORD)
            typedef LONG LPARAM;(lParam的類型,l表示LONG)

            posted on 2008-09-02 19:59 Dragon 閱讀(531) 評論(0)  編輯 收藏 引用 所屬分類: VC
             
            Copyright © Dragon Powered by: 博客園 模板提供:滬江博客
            99久久国产精品免费一区二区| 久久久久人妻精品一区二区三区 | 久久91亚洲人成电影网站| 亚洲国产成人久久综合碰碰动漫3d| 久久99精品免费一区二区 | 久久婷婷五月综合成人D啪| 久久er99热精品一区二区| 久久久久国产精品| 精品一区二区久久| 2021国内久久精品| 久久久精品日本一区二区三区| 精品人妻久久久久久888| 久久99这里只有精品国产| 蜜臀久久99精品久久久久久小说| 久久久久亚洲AV无码专区网站| 亚洲乱亚洲乱淫久久| av色综合久久天堂av色综合在 | 97久久国产综合精品女不卡| 国产精品99久久久久久www| 狠狠色丁香婷综合久久| 婷婷久久精品国产| 久久精品国产99国产精品导航| 欧美激情精品久久久久| 九九久久自然熟的香蕉图片| 伊人伊成久久人综合网777| 亚洲欧洲久久久精品| 久久AⅤ人妻少妇嫩草影院| 久久99久久99小草精品免视看 | 久久99精品久久久久久秒播| 久久精品黄AA片一区二区三区| 亚洲国产成人精品女人久久久 | 无码人妻久久一区二区三区免费| 久久久噜噜噜久久| 精品久久久久中文字| 国产精品嫩草影院久久| AA级片免费看视频久久| 91精品日韩人妻无码久久不卡 | 97精品依人久久久大香线蕉97| 久久久亚洲精品蜜桃臀| 91久久精品国产91性色也| 色综合久久综合网观看|