| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 574 人关注过本帖
标题:C开发Windows--菜单和快捷键
只看楼主 加入收藏
tsjoy
Rank: 1
等 级:禁止访问
帖 子:13
专家分:0
注 册:2008-8-5
收藏
 问题点数:0 回复次数:0 
C开发Windows--菜单和快捷键
作 者: xcode
网 站: http://edu.


1。 菜单中的每一项都有三个特性:
  1)菜单的显示特性,可以是位图,可以是字符串
  2)WM_COMMAND消息中windows发送给程序的菜单id
  3)菜单的属性,包括是否被禁用,灰化或被选中。

2。菜单的定义
  1)使用菜单编辑器。
  2)通过编程来实现。
     CreateMenu, CreatePopupMenu

3。在程序中引用菜单
  1)在WNDCLASSEX 结构项里面wndclass.lpszMenuName = szMenuName;
  2) 使用LoadMenu将菜单加载到内存,然后在CreateWindowEx中,将这个菜单句柄作为CreateWindowEx的一个参数。例如:
   HMENU hMenu = LoadMenu(hInstance, MAKEINTRESOURCE(ID_MENU));
   HWND  hWnd = CreateWindowEx(WS_EX_CLIENTEDGE,"myclass","window caption",
                                  WS_OVERLAPPEDWINDOW,100,100,600,400,NULL,
                                  hMenu,hInstance,NULL);

3). 在窗口类中指定为NULL,在CreateWindowEx中也指定菜单项参数为空,在窗口创建后使用SetMenu(hWnd,hMenu);的方式给窗口设置菜单。 这种方式可以动态的修改窗口菜单。

4。菜单和消息
  当用户选择一个菜单项时,windwos通常向窗口过程发送几个不同的消息。在大多数情况下,你的程序可以忽略大部分的消息,只需要把他们传递给DefWindowProc即可。

  1)WM_INITMENU 消息,wParam :主菜单句柄, lParam : 0
    这个消息是当一个菜单将要激活时发出。当用户点击菜单栏上的项或者使用菜单键选择。这个消息允许应用程序在显示之前修改菜单。可以在这时修改顶层菜单。

  2)WM_MENUSELECT: LOWORD(wParam): 选中项:菜单id或者弹出式菜单句柄。
                     HIWORD(wParam): 选择标志
                     lParam:         包含选中项的菜单句柄。

   当用户选择某个菜单项时,这个消息就会被发送到菜单所属的窗口。
   这个消息是一个菜单跟踪消息,wParam告诉你当前选中的是菜单中的哪一项,wParam的高位字中的“选择标志”可以是下列这些标志的组合:MF_GRAYED、MF_DISABLED、MF_CHECKED、MF_BITMAP、MF_POPUP、MF_HELP、MF_SYSMENU和MF_MOUSESELECT.
如果你需要根据菜单项的选择来改变窗口客户区的内容,那么可以你可以使用这个消息。

 3)WM_INITMENUPOPUP: wParam:  弹出式菜单句柄
                    LOWORD(lParam):弹出式菜单索引
                    HIWORD(lParam):系统菜单为1,其他为0
如果要在弹出式菜单显示之前启用或者禁用菜单项,那么这个消息就很重要。

4)WM_COMMAND: LOWORD(wParam): 菜单id
               HIWOED(wParam): 0
               lParam:         0

如果这个消息是由子窗口控制产生,如button产生则:
             LOWORD(wParam): 控制ID
             HIWORD(lParam): 通知码
             lParam:         子窗口句柄。

如果这个消息是由子窗口或者快捷键产生,则通知码为1,由菜单产生,通知码为0。

通过参数,可以区分这个消息的来源是来自于控件,快捷键还是菜单。

5)WM_SYSCOMMAND: 类似于WM_COMMAND消息,只是WM_SYSCOMMAND表示用户从系统菜单中选择一个启动菜单项或者用户选择最大化,最小化,关闭按钮。  
               LOWORD(wParam): 菜单id
               HIWOED(wParam): 0
               lParam:         0
如果消息是由按鼠标产生的,LOWORD(wParam)和HIWORD(lParam)将包含鼠标光标的位置x,y屏幕坐标。
对于windows预先定义的系统菜单项,用wParam表示。
SC_CLOSE,SC_MAXIMIZE,SC_MINIMIZE,SC_MOVE等等。

5。更改菜单:
  AppendMenu, DeleteMenu,InsertMenu,ModifyMenu,RemoveMenu等等。

6。键盘加速键
  1) 定义
     A)资源编辑器
     B)编程实现:CreateAcceleratorTable

2)加载
   LoadAccelerators
3)转换
   TranslateAccelerator 把键盘讯息转换为WM_COMMAND或WM_SYSCOMMAND讯息。
4)消息处理



相关网站:http://edu.
搜索更多相关主题的帖子: 菜单 Windows 开发 
2008-08-26 10:58
快速回复:C开发Windows--菜单和快捷键
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015737 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved