• <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>

            Sleeping

            Note Book

            DialogBox的若干問題

            今天繼續折騰那個List Box控件,發現一個問題,當對話框出來之后,被主窗體給刷屏了,不能得到子窗體的句柄。后經仔細調試,發現一些端倪。首先在調用 DialogBox函數時 ,所生成的Dialog(我這里的Dialog面板里有一個Edit控件 兩個按鈕控件 和一個List Box控件)依次產生的消息隊列如下所示:
            WM_SETFONT    0x0030                 設置字體
            WM_INITDIALOG 0x0110                 初始化Dialog
            WM_WINDOWPOSCHANGING            0x0046                窗體大小 位置等轉變的消息
            WM_NCACTIVATE   0x0086          改變一個非工作區域 sent to a window when its nonclient area needs to be changed to indicate an active or inactive state.
            WM_ACTIVATE     0x0006   讓你窗體無效 并激活子窗體
            WM_COMMAND   0x0111 (HIWORD(WPARAM))->LBN_SETFOCUS(4) ->LBN_KILLFOCUS(5) 消息命令 ListBox
            WM_USER     0x0400    用戶自定義消息
            WM_NCACTIVATE  0x0086
            WM_SHOWWINDOW   0x0018   顯示窗體
            WM_WINDOWPOSCHANGING 0x0046
            WM_NCPAINT 0x0085    The WM_NCPAINT message is sent to a window when its frame must be painted.
            WM_ERASEBKGND 0x0014   清楚窗口背景
            WM_WINDOWPOSCHANGED 0x0047  
            WM_GETICON 0x007F  3次   The WM_GETICON message is sent to a window to retrieve a handle to the large or small icon associated with a window
            WM_NCCALCSIZE 0x0083   計算機窗體大小尺寸
            WM_MOVE 0x0003     移動
            WM_SIZE 0x0005     改變大小
            WM_PAINT 0x000F    繪制窗體
            WM_CTLCOLORBTN 0x0135   繪制按鈕的顏色
            WM_CTLCOLORLISTBOX 0x0134  繪制Listbox的顏色
            WM_CTLCOLOREDIT 0x0133   繪制Edit的顏色
            WM_POWERBROADCAST 0x0218   broadcast to an application to notify it of power-management events
            while(1) 一直循環以下的兩個消息
            WM_NCACTIVATE  0x0086
            WM_WINDOWPOSCHANGING            0x0046

            代碼如下:
            BOOL CALLBACK  ListBoxTest(HWND hWnd,UINT message , WPARAM wParam, LPARAM lParam) 

            int wmId = LOWORD(wParam ); 
            int wmEvent = HIWORD(wParam) ; 
            int i ; 
            HDC hDc ; 
            PAINTSTRUCT ps ; 
            HWND hListBox ; 
            switch(message) 

              
            case WM_INITDIALOG: 
               hListBox 
            = GetDlgItem(hWnd,IDC_LIST_TEST) ; 
               
            for(i = 0; MyData[i].Name[0!= 0 ; i++

                SendMessage(hListBox,LB_ADDSTRING,
            0,(LPARAM)MyData[i].Name) ; 
                SendMessage(hListBox,LB_SETITEMDATA,  i ,(LPARAM)i) ; 
               }
             
               SetFocus(hListBox); 
               
            return (TRUE) ; 
              
            case WM_PAINT: 
               hDc 
            = BeginPaint(hWnd,&ps) ; 
               
            //MSGPRINT(_T("Print")) ; 
               EndPaint(hWnd,&ps); 
               
            break ; 
              
            case LB_ADDFILE: 
               
            break ; 
              
            case WM_COMMAND: 
               
            switch(wmId) 
            {
             
               
            case IDC_LIST_TEST: 
                
            switch(wmEvent) 
               {
             
                
            case LBN_SELCHANGE: 
                 
            //MSGPRINT(_T("LBN_SELCHANGE")); 
                 break ; 
                
            case LBN_DBLCLK: 
                 
            //MSGPRINT(_T("LBN_DBLCLK")); 
                 break ; 
                
            case LBN_SETFOCUS: 
                 
            //MSGPRINT(_T("LBN_SETFOCUS")) ; 
                 break ; 
                
            case LBN_KILLFOCUS: 
                 
            //MSGPRINT(_T("LBN_KILLFOCUS")) ; 
                 break ; 
                }
             
                
            return FALSE ; 
                
            break ; 
               
            case IDOK: 
                MSGPRINT(_T(
            "IDOK")); 
                EndDialog(hWnd,
            0) ; 
                
            return TRUE; 
                
            break ; 
               
            case IDCANCEL: 
                MSGPRINT(_T(
            "IDCANCEL")); 
                EndDialog(hWnd,
            0) ; 
                
            return TRUE ; 
                
            break ; 
               }
             
            }
             
            return FALSE;
            }

            如果最后返回TRUE那么窗體的著色會很有問題,Dialog的顏色和背景顏色完全一樣,導致不能看到一個窗體的存在,所以這里必須返回FALSE,
            MSDN作出的解釋如下:Typically, the dialog box procedure should return TRUE if it processed the message, and FALSE if it did not. If the dialog box procedure returns FALSE, the dialog manager performs the default dialog operation in response to the message.
            意即,如果這個窗體想處理哪個消息就返回TRUE,如果不想處理這個消息就返回FALSE,所以在最后應該返回False,即默認不處理那些消息而只算WM_INITDIALOG 和其它一些IDOK IDCANCEL的消息。
            If the dialog box procedure processes a message that requires a specific return value, the dialog box procedure should set the desired return value by calling SetWindowLong(hwndDlg, DWL_MSGRESULT, lResult) immediately before returning TRUE. Note that you must call SetWindowLong immediately before returning TRUE; doing so earlier may result in the DWL_MSGRESULT value being overwritten by a nested dialog box message.

            這個嘛   靠 英文 爛!勉勉強強
            如果窗體在處理一個消息時需要顯示地返回一個值,那這個窗體應該在返回TRUE前調用SetWindoLong(hWndDlg,DWL_MSGRESULT,lpResult)函數更改想要返回的值.切記一定要馬上調用該函數在返回TRUE之前,盡可能早地通過DWL_MSGRESULT去改寫真正的Result,by a nested dialog box message.  他媽的這句怎么翻譯?


            現在都開始懷疑弄這些消息有什么用,用MFC肯定是一個更好的選擇。在List Box里增加和刪除內容都是太煩了,都是通過SendMessage來完成的。不知道能堅持學到什么時候。

            posted on 2008-10-07 21:42 祥子_隨波逐流 閱讀(2064) 評論(0)  編輯 收藏 引用

            精品无码久久久久久尤物| 亚洲欧美成人久久综合中文网| 中文成人无码精品久久久不卡 | 久久精品毛片免费观看| 久久亚洲AV成人无码国产| 久久综合九色综合97_久久久| 久久免费观看视频| 久久久免费精品re6| 少妇久久久久久被弄到高潮| 日韩AV无码久久一区二区| 久久综合九色欧美综合狠狠| 久久精品人人槡人妻人人玩AV| 久久久久久无码国产精品中文字幕| 国产成人精品三上悠亚久久| 国产精品伦理久久久久久| 亚洲va久久久噜噜噜久久男同| 91久久精品视频| 色欲av伊人久久大香线蕉影院| 久久精品女人天堂AV麻| 国内精品久久九九国产精品| 久久精品国产99久久久古代 | Xx性欧美肥妇精品久久久久久| 久久午夜福利无码1000合集| 久久成人18免费网站| 天天爽天天爽天天片a久久网| 久久人人爽人人人人片av| 看全色黄大色大片免费久久久| 国产成人久久精品二区三区| 久久精品成人免费网站| 亚洲精品乱码久久久久久| 久久综合亚洲色HEZYO社区| 欧美午夜精品久久久久久浪潮| 99久久国产综合精品成人影院| 精品熟女少妇a∨免费久久| 久久夜色精品国产网站| 乱亲女H秽乱长久久久| 狼狼综合久久久久综合网| 色综合久久久久综合体桃花网| 亚洲精品无码久久一线| 精品国产一区二区三区久久久狼| 日韩人妻无码精品久久久不卡|