0

因此,這是一個普遍的問題,並已在一些地方解決 - 沒有具體的HTML控件在Windows Mobile 6.1專業,雖然。的Windows Mobile 6.1 - 調整大小HTMLControl時對軟鍵盤顯示窗口/隱藏

因此,這裏是我的問題

  • 一個WC_HTML HTML控件作爲一款Windows Mobile應用程序窗口的子窗口中創建。
  • HTML控制供應以可編輯的字段的HTML頁面。
  • 當整個頁面充滿了可編輯的字段和用戶使用軟鍵盤,在頁面底部的領域,軟鍵盤覆蓋了幾個領域。

我絕對錯過了基於軟鍵盤打開/隱藏事件的窗口大小。

我想已經什麼

  • 第一種方法 - 使用創建父容器窗口前,然後將其傳遞到的WndProc的WM_SETTINGCHANGE和WM_ACTIVATE方法被初始化全局聲明SHACTIVATEINFO sai;對象(如解釋here)。這沒有預期的效果。我嘗試了兩種方法 - 傳遞父HWND(推薦)以及Web控件的HWND - 沒有任何反應。

    ​​

    case WM_SETTINGCHANGE: SHHandleWMSettingChange(hWnd, wParam, lParam, &sai); break;

  • 第二種方法 - 也嘗試手動調整使用SIPINFO si;檢查事件,然後使用si.fdwFlags來確定基於鍵盤事件的窗口,如果軟鍵盤被隱藏或不

    case WM_SETTINGCHANGE: { 
         SIPINFO si; 
         switch(wParam) 
         { 
          case SPI_SETSIPINFO: { 
          memset(&si, 0, sizeof(si)); 
          si.cbSize = sizeof(si); 
          if(SHSipInfo(SPI_GETSIPINFO, 0, &si, 0)) { 
           RECT rcMenuBar; 
           // Get the size of the menu bar 
           GetWindowRect(g_hWndMenuBar, &rcMenuBar); 
           // Keyboard opens up 
           if(si.fdwFlags == 0x00000003) { 
            MoveWindow(webControlHWND, 0, 0, (si.rcVisibleDesktop.right - si.rcVisibleDesktop.left), (si.rcVisibleDesktop.bottom - si.rcVisibleDesktop.top), TRUE);   
           } else if(si.fdwFlags == SIPF_DOCKED) { 
            // keyboard closes down - weird that this msg comes when keyboard is closed instead of SIPF_OFF 
            // visible area above menu bar 
            si.rcVisibleDesktop.bottom -= (rcMenuBar.bottom - rcMenuBar.top); 
            MoveWindow(webControlHWND, 0, 0, (si.rcVisibleDesktop.right - si.rcVisibleDesktop.left), (si.rcVisibleDesktop.bottom - si.rcVisibleDesktop.top), TRUE);    
           } 
          } 
         break; 
         } 
        } 
    break; 
    } 
    

這第二種方法會導致怪異未解釋的問題 - 這是我觀察到

  1. 如果我發送的可編輯字段的一個使用JS,在Windows Mobile的SETTINGCHANGED被觸發(si.fdwFlags == 0x00000003)集中爲其MoveWindow()通話由調整窗口大小,以較小的可視區域(鍵盤來後向上),並有觸​​發(自動發生)另一條消息 - 可能是因爲MoveWindow()和軟鍵盤關閉,並且將窗口調整到全屏幕。調試後,我看到一個軟鍵盤打開時,接收到的消息是關閉第一0x00000003,然後下一個0x00000002 (SIPF_DOCKED)

  2. #1發生後,有時候該字段不能從觸摸屏上點擊(無法集中在該字段),但可以使用方向鍵或軟鍵盤箭頭鍵導航到該字段。所以這是由於問題#1引起的大問題,其中鍵盤突出顯示然後自動隱藏。雖然我可以通過使用按鈕強制拉軟鍵盤(自動切換功能似乎因爲更改而丟失)。

以前有人遇到過這個問題嗎?我希望每個使用HTMLControl for Windows Mobile 6.1專業版的人都必須經歷同樣的問題。

更新 - 22Mar2011-11:27AM 在這裏,我的父窗口不處理WM_SETFOCUS或WM_KILLFOCUS方法,而不是孩子HTML控件(WC_HTML)可能會處理它們。這裏的擔心是父窗口HWND的消息傳遞循環獲取WM_SETTINGSCHANGE消息,該消息需要被轉換到子窗口。 我也嘗試完全像HandleSIP Windows Mobile SDK樣本,它通過每次收到消息時都使用SHACTIVATEINFO對象memset()來實現 - 與先前全局存儲和memset()在窗口創建之前完成一次或在WM_CREATE

case WM_CREATE : { 
    memset(&sai, 0, sizeof(SHACTIVATEINFO)); 
    break; 
} 
case WM_ACTIVATE: 
    if (SPI_SETSIPINFO == wParam){ 
     memset(&sai, 0, sizeof(SHACTIVATEINFO)); 
     SHHandleWMActivate(webControlHWND, wParam, lParam, &sai, 0); 
    } 
    break; 
case WM_SETTINGCHANGE: { 
    if (SPI_SETSIPINFO == wParam){ 
     memset(&sai, 0, sizeof(SHACTIVATEINFO)); 
     SHHandleWMSettingChange(webControlHWND, wParam, lParam, &sai); 
    } 
    break; 
} 

對陣雙方父窗口和HTML控件HWND不工作,要麼 - 鍵盤覆蓋可編輯字段(無窗調整大小)和窗口不接受任何更多的消息(掛)

回答

0

所以我實際上找到了解決這個問題的方法。如果屏幕不包含HTML頁面,則Windows Mobile中會出現一些蹩腳的錯誤,它會掛起屏幕。所以最終的解決方案是

1)堅持處理WM_SETTINGCHANGE消息只有當手機沒有物理鍵盤。如果有,那麼我會讓我的軟鍵盤覆蓋可見區域。請注意,如果設備有物理鍵盤,該softkeyboard默認情況下不,除非提出了明確彈出,它保留後表示,這種行爲..

case WM_SETTINGCHANGE: { 
    SIPINFO si; 
    switch(wParam) 
    { 
     case SPI_SETSIPINFO: { 
     memset(&si, 0, sizeof(si)); 
     si.cbSize = sizeof(si); 
     if(SHSipInfo(SPI_GETSIPINFO, 0, &si, 0)) { 
      RECT rcMenuBar; 
      // Get the size of the menu bar 
      GetWindowRect(g_hWndMenuBar, &rcMenuBar); 
      // Keyboard opens up 
      if(si.fdwFlags == 0x00000003) { 
      } else if(si.fdwFlags == SIPF_DOCKED || si.fdwFlags==10) { 
       // keyboard closes down - weird that this msg comes when keyboard is closed instead of SIPF_OFF 
       // visible area above menu bar 
       si.rcVisibleDesktop.bottom -= (rcMenuBar.bottom - rcMenuBar.top); 
      } 
      MoveWindow(webControlHWND, 0, 0, (si.rcVisibleDesktop.right - si.rcVisibleDesktop.left), (si.rcVisibleDesktop.bottom - si.rcVisibleDesktop.top), TRUE);   

     } 
    break; 
    } 
} 
break; 
} 

2)注入1頁長的透明PNG 如果手機沒有物理鍵盤,請確保在要顯示的每個HTML末尾插入一個「透明的1頁長PNG」。我知道大多數人不能這樣做,因爲HTML源自其他地方。但這就是我所做的,現在它工作。這只是爲了擺脫其他方面正在發生的懸掛問題。這將確保所有頁面都有滾動條而不會打擾內容。缺點是用戶可以滾動底部的空白空間(儘管不會影響任何內容)。

p.s - 這是一個幸運的發現,我不知道爲什麼MS也有這樣一個跛腳的錯誤。 雖然我用更長的HTML版本測試我的應用程序,但它始終有效,而我的真實測試沒有。那時候我嘗試了最後的空PNG,它確實有效。 :)

相關問題