2960|7

64

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

EVC开发响应左右软键 [复制链接]

EVC4.0开发一个界面,却不知左右软键功能开发,用哪一个类,模拟器上没有这两个键的,也不知是VK_??啥子?望哪位仁兄不吝赐教。

最新回复

1. 下方那个叫做MenuBar,但不要理解成字面上的,实质上它上面既可以放软键,也可以放菜单。 用SHCreateMenuBar 来创建MenuBar,摘录小段代码:             SHMENUBARINFO mbi;             memset(&mbi, 0, sizeof(SHMENUBARINFO));             mbi.cbSize     = sizeof(SHMENUBARINFO);             mbi.hwndParent = hWnd;             mbi.nToolBarId = IDR_MENU;             mbi.hInstRes   = g_hInst;             if (!SHCreateMenuBar(&mbi))             {                 g_hWndMenuBar = NULL;             }             else             {                 g_hWndMenuBar = mbi.hwndMB;             } 2. 工程里有个以rc2后缀的文件,也是工程的资源文件, 用于VC++不能直接进行编辑的资源,以及被多个工程使用的资源。这个文件中的资源不能在VC的集成环境下直接进行编辑和修改, 而是由我们自己根据需要手工地编辑这个文件。 这里生成的rc2文件就是定义了SHMenuBar的资源。 // // SHMENUBAR // IDR_MENU SHMENUBAR DISCARDABLE //资源类型(实际就是RCDATA) BEGIN     IDR_MENU, //菜单资源的ID,因为不同的资源类型ID可以相同,系统这里用了与SHMENUBAR 相同的ID。     2,//MenuBar上按钮或菜单数目     I_IMAGENONE, IDM_OK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,     IDS_OK, 0, NOMENU,         I_IMAGENONE, IDM_HELP, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE,     IDS_HELP, 0, 0,//最后这个数字是对应的菜单资源的菜单项的序号(0代表一个菜单项) END 一般来说,WM建议左边键是一个常用的操作,右边键是菜单。所以默认生成的也正是这种模式。 两边都是菜单一般不会用,太不友好,如果两边都想是按钮,可以如下改: IDR_MENU SHMENUBAR DISCARDABLE BEGIN     0,     2,     I_IMAGENONE, IDM_OK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,     IDS_OK, 0, NOMENU,     I_IMAGENONE, IDM_HELP, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,     IDS_HELP, 0, NOMENU, END 在消息处理函数里,处理WM_COMMAND消息,来处理不同的按键。 switch (message)     {         case WM_COMMAND:             wmId    = LOWORD(wParam);             wmEvent = HIWORD(wParam);             // Parse the menu selections:             switch (wmId)             {                 case IDM_HELP:                     DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, About);                     break;                 case IDM_OK:                     SendMessage (hWnd, WM_CLOSE, 0, 0);                                    break;                 default:                     return DefWindowProc(hWnd, message, wParam, lParam);             }             break; 3.可以通过参数设置,来通过不同方式或者完成不同效果的MenuBar //set up menu bar structure             memset(&mbi, 0, sizeof(SHMENUBARINFO));             mbi.cbSize     = sizeof(SHMENUBARINFO);             mbi.hwndParent = hDlg;             mbi.hInstRes   = g_hInst;             switch(g_dwCreateMenuType)             {                 case ID_SHCREATEMENUBAR_RCDATA:                     mbi.nToolBarId = IDR_CMB_CMDBAR;//RCDATA资源类型,二进制                     break;                                      case ID_SHCREATEMENUBAR_HMENU:                     mbi.dwFlags = SHCMBF_HMENU;                     mbi.nToolBarId = IDM_CMB_MENU;//菜单资源                     break;                 case ID_SHCREATEMENUBAR_EMPTYBAR:                     mbi.dwFlags = SHCMBF_EMPTYBAR;                     break;                 case ID_SHCREATEMENUBAR_NOSIPBUTTON:                     mbi.dwFlags = SHCMBF_EMPTYBAR|SHCMBF_HIDESIPBUTTON;                     break;                 case ID_SHCREATEMENUBAR_HIDDENMENUBAR:                     mbi.dwFlags = SHCMBF_HMENU;//设置此单数但不设置nToolBarId,会隐藏MenuBar                     break;                 default:                     break;             }             if (FALSE == SHCreateMenuBar(&mbi))             {                 MessageBox(hDlg, _T("SHCreateMenuBar Failed"), _T("Error"), MB_OK);             }             //retain the hwnd to the toolbar to destroy it if necessary             hwndMB = mbi.hwndMB; 4. RCDATA 格式说明 ///////////////////////////////////////////////////////////////////////////// // // RCDATA // IDR_MENUOK RCDATA BEGIN 0, // menu 1, // Count of buttons I_IMAGENONE, IDC_OK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, IDS_OK, 0, NOMENU, END IDM_MAIN_MENU RCDATA BEGIN IDR_MENU, 2, I_IMAGENONE, IDM_START, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, IDS_START, 0, NOMENU, I_IMAGENONE, IDM_STOP,TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_STOP, 0, 0, END 说明: IDR_MENU 我们要用软键显示的菜单的子菜单名字 2 说明这个MenuBar上有几个菜单项 I_IMAGENONE 菜单不支持带有bitmap(0xfffe) IDM_START 用来在WM_COMMAND中处理控件的标识 TBSTATE_ENABLED 代表菜单的启用状态(0x0004) TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE 菜单的样式,具体可以查MSDN中WinCE ToolBar Sytle。 TBSTYLE_DROPDOWN 这个也是样式,如果你的菜单有子菜单,那么这里必须要用这个样式 IDS_START 菜单上显示的字,实现在字符串资源中定义 最后的0 子菜单的索引 NOMENU 代表该菜单项没有子菜单(0xffff)   详情 回复 发表于 2009-6-30 12:37
点赞 关注

回复
举报

51

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
没有什么类

需要自己定义
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
VK_LEFT和VK_RIGHT?
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
VK_LEFT
VK_RIGHT     
VK_UP   
VK_DOWN

LRESULT   CMIDView::OnKeyDown(UINT   uMsg,   WPARAM   wParam,   LPARAM   lParam,   BOOL&   bHandled)   
  {   
  int   nChar;   
  nChar   =   (int)   wParam;   
   
                    _TCHAR   VKKey[10];   
  _stprintf(VKKey,_T("0X%X"),nChar);   
  MessageBox(VKKey,_T(""),MB_OK);   
                    return   0;                 
  }   
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 
这功能我怎么看像是,显示按键的虚拟码?跟软键没什么关系啊
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

6
 
左右软键有没得虚键值,重要问题是怎么探测它们被按下?然后写事件就不是问题了。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
哦 那就和91说的那样 自己定义  
你说的探测被按下 应该和VC里的按钮相似吧
我没做过 也不好多说了
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

8
 
1. 下方那个叫做MenuBar,但不要理解成字面上的,实质上它上面既可以放软键,也可以放菜单。
用SHCreateMenuBar 来创建MenuBar,摘录小段代码:

            SHMENUBARINFO mbi;

            memset(&mbi, 0, sizeof(SHMENUBARINFO));
            mbi.cbSize     = sizeof(SHMENUBARINFO);
            mbi.hwndParent = hWnd;
            mbi.nToolBarId = IDR_MENU;
            mbi.hInstRes   = g_hInst;

            if (!SHCreateMenuBar(&mbi))
            {
                g_hWndMenuBar = NULL;
            }
            else
            {
                g_hWndMenuBar = mbi.hwndMB;
            }

2. 工程里有个以rc2后缀的文件,也是工程的资源文件, 用于VC++不能直接进行编辑的资源,以及被多个工程使用的资源。这个文件中的资源不能在VC的集成环境下直接进行编辑和修改, 而是由我们自己根据需要手工地编辑这个文件。

这里生成的rc2文件就是定义了SHMenuBar的资源。
//
// SHMENUBAR
//

IDR_MENU SHMENUBAR DISCARDABLE //资源类型(实际就是RCDATA)
BEGIN
    IDR_MENU, //菜单资源的ID,因为不同的资源类型ID可以相同,系统这里用了与SHMENUBAR 相同的ID。
    2,//MenuBar上按钮或菜单数目

    I_IMAGENONE, IDM_OK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,
    IDS_OK, 0, NOMENU,
   
    I_IMAGENONE, IDM_HELP, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE,
    IDS_HELP, 0, 0,//最后这个数字是对应的菜单资源的菜单项的序号(0代表一个菜单项)
END

一般来说,WM建议左边键是一个常用的操作,右边键是菜单。所以默认生成的也正是这种模式。
两边都是菜单一般不会用,太不友好,如果两边都想是按钮,可以如下改:

IDR_MENU SHMENUBAR DISCARDABLE
BEGIN
    0,
    2,

    I_IMAGENONE, IDM_OK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,
    IDS_OK, 0, NOMENU,

    I_IMAGENONE, IDM_HELP, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,
    IDS_HELP, 0, NOMENU,

END

在消息处理函数里,处理WM_COMMAND消息,来处理不同的按键。
switch (message)
    {
        case WM_COMMAND:
            wmId    = LOWORD(wParam);
            wmEvent = HIWORD(wParam);
            // Parse the menu selections:
            switch (wmId)
            {
                case IDM_HELP:
                    DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, About);
                    break;
                case IDM_OK:
                    SendMessage (hWnd, WM_CLOSE, 0, 0);               
                    break;
                default:
                    return DefWindowProc(hWnd, message, wParam, lParam);
            }
            break;

3.可以通过参数设置,来通过不同方式或者完成不同效果的MenuBar

//set up menu bar structure
            memset(&mbi, 0, sizeof(SHMENUBARINFO));
            mbi.cbSize     = sizeof(SHMENUBARINFO);
            mbi.hwndParent = hDlg;
            mbi.hInstRes   = g_hInst;

            switch(g_dwCreateMenuType)
            {
                case ID_SHCREATEMENUBAR_RCDATA:
                    mbi.nToolBarId = IDR_CMB_CMDBAR;//RCDATA资源类型,二进制
                    break;
                    
                case ID_SHCREATEMENUBAR_HMENU:
                    mbi.dwFlags = SHCMBF_HMENU;
                    mbi.nToolBarId = IDM_CMB_MENU;//菜单资源
                    break;

                case ID_SHCREATEMENUBAR_EMPTYBAR:
                    mbi.dwFlags = SHCMBF_EMPTYBAR;
                    break;

                case ID_SHCREATEMENUBAR_NOSIPBUTTON:
                    mbi.dwFlags = SHCMBF_EMPTYBAR|SHCMBF_HIDESIPBUTTON;
                    break;

                case ID_SHCREATEMENUBAR_HIDDENMENUBAR:
                    mbi.dwFlags = SHCMBF_HMENU;//设置此单数但不设置nToolBarId,会隐藏MenuBar
                    break;

                default:
                    break;
            }

            if (FALSE == SHCreateMenuBar(&mbi))
            {
                MessageBox(hDlg, _T("SHCreateMenuBar Failed"), _T("Error"), MB_OK);
            }
            //retain the hwnd to the toolbar to destroy it if necessary
            hwndMB = mbi.hwndMB;


4. RCDATA 格式说明

/////////////////////////////////////////////////////////////////////////////
//
// RCDATA
//
IDR_MENUOK RCDATA
BEGIN
0, // menu
1, // Count of buttons
I_IMAGENONE,
IDC_OK,
TBSTATE_ENABLED,
TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,
IDS_OK,
0,
NOMENU,
END


IDM_MAIN_MENU RCDATA
BEGIN
IDR_MENU,
2,
I_IMAGENONE, IDM_START, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, IDS_START, 0, NOMENU,
I_IMAGENONE, IDM_STOP,TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_STOP, 0, 0,
END



说明:
IDR_MENU 我们要用软键显示的菜单的子菜单名字
2 说明这个MenuBar上有几个菜单项

I_IMAGENONE 菜单不支持带有bitmap(0xfffe)
IDM_START 用来在WM_COMMAND中处理控件的标识
TBSTATE_ENABLED 代表菜单的启用状态(0x0004)
TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE

菜单的样式,具体可以查MSDN中WinCE ToolBar Sytle。
TBSTYLE_DROPDOWN 这个也是样式,如果你的菜单有子菜单,那么这里必须要用这个样式
IDS_START 菜单上显示的字,实现在字符串资源中定义
最后的0 子菜单的索引

NOMENU 代表该菜单项没有子菜单(0xffff)

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表