【轉帖】Windows CE 案頭UI修改

來源:互聯網
上載者:User
首先感謝文章的原作者。轉自http://www.ustcers.com/blogs/devzhao/pages/13027.aspx
Windows CE 案頭UI修改

案頭UI主要涉及到CDesktopView類 ,CDesktopView類繼承於CDefShellView類;如果要更改案頭的UI表現形式,只要從這個類入手即可.CDesktopView類位於
    $(_WINCEROOT)\PUBLIC\SHELL\OAK\HPC\CESHELL檔案夾中.
    
    
     1.更改右鍵快顯功能表選項
     案頭的快顯功能表有兩種:一種是在案頭按右鍵彈出的FOLDER_VIEW_MENU_OFFSET;另一種是在表徵圖上點右鍵彈出的ITEM_MENU_OFFSET.兩種菜單的完整表現如下:
    
         /******************************************************
         //FOLDER_VIEW_MENU_OFFSET菜單
        查看             (pos:FOLDER_VIEW_MENU_OFFSET)
        --------------
        表徵圖相片順序
        重新整理
        --------------
        粘貼
        粘貼捷徑
        --------------
        建立檔案夾
        --------------
        屬性
        *******************************************************/
       
        
         /******************************************************
         //ITEM_MENU_OFFSET菜單
        開啟          (pos:ITEM_MENU_OFFSET)
        ----------
        剪下
        複製
        ----------
        刪除
        重新命名
        ----------
        屬性
        *******************************************************/
       
     在快顯功能表之前,都需要調用CDesktopView::HandleInitMenuPopup()函數對菜單進行構建;所以,要更改菜單的選項,也是在此函數中進行.
     刪除菜單子項可以通過::RemoveMenu()函數進行刪除,有以位置(MF_BYPOSITION)或命令方式(MF_BYCOMMAND).
     例如:
     1.刪除"複製"子功能表:
       ::RemoveMenu(hmenu, IDC_EDIT_COPY, MF_BYCOMMAND);
     2.刪除ITEM_MENU_OFFSET菜單的第二個子功能表:
        ::RemoveMenu(hmenu, ITEM_MENU_OFFSET+1, MF_BYPOSITION); //其後的菜單子項位置會上移
       
     以下這段代碼FOLDER_VIEW_MENU_OFFSET只保留了"重新整理","屬性";ITEM_MENU_OFFSET只保留了"開啟","屬性"(夾雜在begin和end間是筆者加的代碼)
    

LRESULT CDesktopView::HandleInitMenuPopup(HMENU hmenu, PopupMenuInfo * pPopupMenuInfo)
{
 
    LRESULT result = CDefShellView::HandleInitMenuPopup(hmenu, pPopupMenuInfo);

   if ((0 == result) && (FWF_DESKTOP & m_fFlags))
   {
      if (pPopupMenuInfo && (FOLDER_MENU_OFFSET == pPopupMenuInfo->offset))
      {     
             
                
         ::RemoveMenu(hmenu, FOLDER_VIEW_MENU_OFFSET, MF_BYPOSITION); // "View" sub-menu
         ::RemoveMenu(hmenu, FOLDER_VIEW_MENU_OFFSET, MF_BYPOSITION); // "View" separator
          
         ::RemoveMenu(hmenu, FOLDER_VIEW_MENU_OFFSET, MF_BYPOSITION); //"表徵圖相片順序"
         ::RemoveMenu(hmenu, FOLDER_VIEW_MENU_OFFSET+1, MF_BYPOSITION); //separator
         ::RemoveMenu(hmenu, FOLDER_VIEW_MENU_OFFSET+1, MF_BYPOSITION); //"粘貼"
         ::RemoveMenu(hmenu, FOLDER_VIEW_MENU_OFFSET+1, MF_BYPOSITION); //"粘貼捷徑" 
         ::RemoveMenu(hmenu, FOLDER_VIEW_MENU_OFFSET+1, MF_BYPOSITION); //separator
         ::RemoveMenu(hmenu, FOLDER_VIEW_MENU_OFFSET+1, MF_BYPOSITION); //"建立檔案夾"
       }        
      
      
      else if (pPopupMenuInfo && (ITEM_MENU_OFFSET == pPopupMenuInfo->offset))
      {
                
       
        ::RemoveMenu(hmenu, IDC_EDIT_CUT, MF_BYCOMMAND);
        ::RemoveMenu(hmenu, IDC_EDIT_COPY, MF_BYCOMMAND);
        ::RemoveMenu(hmenu, IDC_FILE_DELETE, MF_BYCOMMAND);
        ::RemoveMenu(hmenu, IDC_FILE_RENAME, MF_BYCOMMAND);
        ::RemoveMenu(hmenu, ITEM_MENU_OFFSET+1, MF_BYPOSITION); //  separator
        ::RemoveMenu(hmenu, ITEM_MENU_OFFSET+1, MF_BYPOSITION); //  separator
      } 
     
      
   }

  1.    return result;
     
    }
         那麼增加功能表項目如何?呢,呵呵。。。^_^
        
    2.禁止拖拽案頭表徵圖
          CDesktopView的拖拽處理是直接採用基類CDefShellView的DoDragDrop()函數.如果要禁止案頭表徵圖拖拽,只要重載DoDragDrop()函數為空白即可.
          在desktopview.h重載,代碼如下:
          protect:
          virtual void DoDragDrop(NMLISTVIEW * pnmListView){};
              
    3.案頭表徵圖排列順序
         案頭表徵圖排列順序有按名稱,類型,日期,大小以及還有一個自動排文;預設的是按名稱排列.
         在CDesktopView中處理命令的是HandleCommand()函數,其實際是調用CDefShellView的HandleCommand()函數.為方便使用,我們可以以此方式調用:CDefShellView::HandleCommand(dwCmd);
         其中,dwCmd是命令類型,有如下宏定義命令:
         IDC_EDIT_COPY         :複製
         IDC_EDIT_CUT          :剪下
         IDC_EDIT_PASTE         :粘貼
         IDC_EDIT_PASTESHORTCUT     :粘貼捷徑
         IDC_EDIT_SELECTALL       :全選
         IDC_EDIT_UNDO         :撤銷
         IDC_FILE_DELETE        :刪除
         IDC_FILE_NEWFOLDER       :建立檔案夾
         IDC_FILE_OPEN         :開啟
         IDC_FILE_PROPERTIES      :屬性
         IDC_FILE_RENAME        :重新命名
         IDC_FILE_SENDTO_DESKTOP    :發送到案頭
         IDC_FILE_SENDTO_MYDOCUMENTS  :發送到我的文件
         IDC_HELP_TOPICS        :(無作用)
         IDC_REFRESH          :重新整理
         IDC_ARRANGE_AUTO        :自動排文
         IDC_ARRANGE_BYDATE       :按日期排列
         IDC_ARRANGE_BYNAME       :按名稱排列
         IDC_ARRANGE_BYSIZE       :按大小排列
         IDC_ARRANGE_BYTYPE       :按類型排列
         IDC_VIEW_DETAILS        :詳細資料查看
         IDC_VIEW_LIST         :列表方式查看
         IDC_VIEW_ICONS         :表徵圖方式查看
         IDC_VIEW_OPTIONS        :查看選項(?)
         IDC_VIEW_TYPE         :查看類型(?)
         IDC_GO_MYDOCUMENTS       :轉到到我的文件
         IDC_GO_FOLDERUP        :轉到上級檔案夾
         ID_ESCAPE           :ESC
         ID_CONTEXTMENU         :內容菜單(?)
        
         如果需要表徵圖以日期方式初始化排列,只要在CDesktopView::CreateViewWindow()函數最後添加此語句即可:
         CDefShellView::HandleCommand(IDC_ARRANGE_BYDATE);
        
    4.更改案頭背景
在CDesktopView::PaintBackground中修改。

修改背景顏色:

// --- Original code commented out ---// ::FillRect(hdc, &rc, ::GetSysColorBrush(COLOR_BACKGROUND));// Explicitly set the background color.::FillRect(hdc, &rc, ::GetSysColorBrush(RGB(230, 150, 230)));
修改顯示的os版本資訊(類似“windows ce.net 4.2")  
  
/* -- Original code commented out --::wsprintf(wszVersion, L"Microsoft Windows \CE v%d.%02d (Build %d on %s) ", VerInfo.dwMajorVersion,VerInfo.dwMinorVersion, VerInfo.dwBuildNumber,TEXT(__DATE__));*/// Display shell name along with Windows CE version information.::wsprintf(wszVersion, L"< Shell Name> for Microsoft Windows \CE v%d.%02d (Build %d on %s) ",VerInfo.dwMajorVersion, VerInfo.dwMinorVersion,VerInfo.dwBuildNumber, TEXT(__DATE__));

5.。。。。待續

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.