WinCE下用资源RC添加菜单的方法

 

 

转:http://niuniug.spaces.live.com/blog/cns!2C71306A5C538D8C!443.entry#trackback

有很多方法添加菜单的.
今天尝试了用RC资源添加菜单的方法,比HMENU CreateMenu (void);用起来方便多了.
首先要添加RC文件。也许用惯了.net,用EVC不怎么顺手,大概不是中文界面的关系吧。
选择 文件(File) ---> 新建(New) --> 文件(Files)Resourse Script. 别的就不多说了,给文件起个名字。OK
现在在EVC左边的导航栏里面,我们可以看到刚才新建的RC文件了。双击,就同VS6一样了,可以添加各种资源。
但貌似EVC不带RC编辑器,我试了老半天,索性,直接到工程空间里面找到刚才新建的RC文件,选择打开方式,简单点用TXT打开就可以了。当然愿意有语法修饰什么的,用.NET打开也可以。
在RC文件末尾追加下面的代码:
ID_MENU MENU DISCARDABLE
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM "&Open...",                    100
        MENUITEM "&Save...",                    101
        MENUITEM SEPARATOR
        MENUITEM "E&xit",                       120
    END
    POPUP "&Help"
    BEGIN
        MENUITEM "&About",                      200
    END
END
解释一点小细节,懒的翻译原版的了:
1  The initial ID_MENU is the ID value for the resource.
2  The next word, MENU, identifies the type of resource
3  The ampersand (&) character tells Windows that the next character should be the key assignment for that menu item.
4  MENUITEM SEPARATOR会在菜单里添加一条分割线
好了,现在保存一下,退出。
在切换到EVC,这时EVC会提示RC文件在外部被修改过了,是否重新加载,选OK
现在要让你刚才写的菜单有个自己的 名字,我们可以这样:
#define    ID_MENU         10
加在某个. h文件里.当然在这个.h中,你会用到ID_MENU
 
我们在什么时候显示该菜单呢,比如在WM_LBUTTONDOWN的时候,好!
那么我们在 case WM_LBUTTONDOWN:消息循环里这样做,加入下面代码。
注意!SHRGINFO是要包含#include <aygshell.h>这个头文件的。
    HMENU hMenuMain, hMenu;
    POINT pt;
    int rc;
  
    // Display the menu at the point of the tap
    pt.x = LOWORD (lParam);
    pt.y = HIWORD (lParam);
  
    SHRGINFO sri;
    sri.cbSize = sizeof (sri);
    sri.dwFlags = 1;
    sri.hwndClient = hWnd;
    sri.ptDown = pt;
  
    // See if tap and hold
    rc = SHRecognizeGesture (&sri);
    if (rc == 0) return 0;
  
    // Display the menu at the point of the tap
    // First, convert to desktop coordinates
    MapWindowPoints (hWnd, HWND_DESKTOP, &pt, 1);
    pt.x += 5;
    hMenuMain = LoadMenu (hInst, MAKEINTRESOURCE (ID_MENU));
    hMenu = GetSubMenu (hMenuMain, 0);
    TPMPARAMS tpm;
    tpm.cbSize = sizeof (tpm);
    GetClientRect (hWnd, &tpm.rcExclude);
    TrackPopupMenuEx (hMenu, TPM_LEFTALIGN | TPM_TOPALIGN,
                      pt.x, pt.y, hWnd, &tpm);
    DestroyMenu (hMenuMain);
    DestroyMenu (hMenu);
好了,现在用模拟器跑一下,长时间按住屏幕,怎么样,看到你刚才添加的菜单了吧?

 

你可能感兴趣的:(.net,windows,File,character,WinCE,menu)