VS2005開發本地代碼Smartphone程序,菜單編輯器有嚴重Bug

<script type="text/javascript"> </script> <script src="http://ggmm.csdn.net/AD/Show_JavaScript_AD.js" type="text/javascript"></script> <script src="http://ggmm.csdn.net/AD/ShowJavaScriptAD.aspx?show=true&position=%7Be025b96b-2fda-4e82-84ef-3e0772838ed3%7D&CharSet=gb2312" language="JavaScript1.1" type="text/javascript"></script>
<script src="http://news.csdn.net/ad/news_textlink.js" type="text/javascript"></script>
無論怎麼編輯,編譯出來的菜單都是默認的。因爲RES目錄的rc2資源文件VS2005沒有改。總是這樣的:
IDR_MAINFRAME SHMENUBAR DISCARDABLE
BEGIN
 IDR_MAINFRAME,
 1,
 
 I_IMAGENONE, IDOK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,
 IDS_OK, 0, NOMENU,
END
 
所以,無論怎麼編輯都不行。
 
解決方法:
先改一下這個文件再編輯菜單。
 
比如說,改成這樣:
IDR_MAINFRAME SHMENUBAR DISCARDABLE
BEGIN
 IDM_MENU,
 2,
 
 I_IMAGENONE, IDOK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,
 IDS_OK, 0, NOMENU,
 I_IMAGENONE, IDM_MENU, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_MENU, 0, 0,
END
 
那麼,需要在編輯器中創建一個ID爲IDM_MENU的菜單條,再建立一個IDS_MENU的字符串資源,改字符串就是顯示出來的菜單的名字。
 
經過後續查證,VS2005針對Smartphone的菜單編輯器就是這樣設計的,也就是在菜單編輯器中編輯的只是菜單的內容,這些內容是保存在rc文件中的,而菜單條是作爲RCDATA保存在rc2資源文件中。
 
其思路應該源於WM5.0對與菜單的全新設計。在WM5.0中,無論是ppc中的菜單還是sp中的菜單,都是一樣的,即支持左右軟鍵,左右軟鍵 分別可以彈出一個菜單。所以,微軟認爲這個東西不是菜單,是工具條,而真正的菜單是左右軟鍵彈出的那個東西。所以,在菜單編輯器中編輯的是左右軟鍵彈出的 菜單,而在rc2文件中保存的是工具條的定義。
 
也就是說,我們把編輯菜單的問題稱爲Bug也好,稱爲其他也好,但是總而言之,現在基於Smpartphone和wm5.0的本地代碼開發,對於“工具條”的定義需要我們自己手動完成了。
 
針對RCDATA的定義,有一些說明:
IDR_MAINFRAME SHMENUBAR DISCARDABLE
IDR_MAINFRAME是在程序中load工具條的ID,在resources.h中定義一個ID就可以了。
SHMENUBAR DISCARDABLE不清楚,照抄就可以了。
BEGIN
 IDM_MENU,
IDM_MENU是在菜單編輯中編輯菜單的ID,此菜單對於smartphone2003來說,橫向的定義只能有一項(且文字內容是什麼無關緊要),因爲smartphone2003只支持左右鍵中一個是彈出菜單。對於wm5.0來說,可以有兩項(尚未驗證)。
 2,
 1或者2,取決於要左鍵還是左右都要。
 I_IMAGENONE, IDOK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,
 IDS_OK, 0, NOMENU,
如果是button性質的,要定義爲TBSTYLE_BUTTON,並且最後是NOMENU。IDOK爲在資源頭文件中隨便定義的ID就可以,IDS_OK對應的字符串資源是將來顯示的內容。
 I_IMAGENONE, IDM_MENU, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_MENU, 0, 0,
如果是彈出式菜單,定義爲TBSTYLE_DROPDOWN,且最後一位爲0。IDM_MENU爲在資源頭文件中隨便定義的ID就可以。
END
END之後一定要加一個回車,否則編譯報fatal error RC1004的錯誤。
 
更詳細的內容,可以看一下這個網址:
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章