VC实现动态菜单的创建方法

本文简述了在程序不支持MFC,CMenu不可用的情况下,动态创建系统托盘菜单的方法。由于菜单项是不确定的,因而就需要用 sdk 创建一个动态弹出菜单。

主要实现代码如下:

//------------------ code begin ----------------

//在类中定义的变量:
// 双击托盘图标时对应的菜单项 id.
UINT m_nDClickMenuItemId;
// 弹出菜单句柄.
m_hMenu m_hMenu;

///动态创建右键菜单项.
///@param item_text 菜单项文本字符串,以逗号分隔.
///@param dbclick_id 双击托盘图标对应的菜单项id.
// 调用示例:
// create_menu("显示/隐藏,退出", 40001);
BOOL CTrayIconMenu::create_menu(char* item_text, unsigned int dbclick_id)
{
  m_nDClickMenuItemId = dbclick_id;

  // 动态创建弹出菜单
  m_hMenu = ::CreatePopupMenu();
  if (m_hMenu == NULL) {
    return 0;
  }

  int i=0;
  int msgid=40001;  // 第一项菜单项的消息id.
  BOOL ret = 0;
  char * pText = ::strtok(item_text, ",");
  while( pText != NULL )  {
    ret = ::AppendMenu(m_hMenu, MF_ENABLED | MF_STRING, msgid + i, pText);
    pText = ::strtok( NULL, "," );
    i++;
  }

  return 1;
}

///响应消息显示菜单.
LRESULT CTrayIconMenu::on_msg(WPARAM wid, LPARAM event)
{
  // 一些其他处理代码...

  POINT mouse;
  ::GetCursorPos(&mouse);

  // hWnd 为应用程序主窗口句柄.
  if (event == WM_RBUTTONUP)  {
    ::SetForegroundWindow(hWnd);
    ::TrackPopupMenu(m_hMenu, 0, mouse.x, mouse.y, 0, hWnd, NULL);
  }
  return 1;
}

//------------------ code end ----------------
(0)

相关推荐

  • 解析VC中创建DLL,导出全局变量,函数和类的深入分析

    一.创建DLL1.在VC中新建一个Win32空项目MathLib:2.添加预编译头文件stdafx.h,定义导入导出控制符号: 复制代码 代码如下: //stdafx.h#pragma once#define MATHLIB_EXPORT 3.添加包含要导出的全局变量,函数和类的头文件MathLib.h: 复制代码 代码如下: //MathLib.h #pragma once #ifdef MATHLIB_EXPORT #define MATHLIBAPI __declspec(dllexpor

  • VC创建DLL动态链接库的方法

    本文实例讲述了VC创建DLL动态链接库的方法.分享给大家供大家参考.具体实现方法如下: 头文件中声明 t.h #ifdef DLL_API #else #define DLL_API extern "C" _declspec(dllimport) #endif DLL_API int a(int cnt); DLL_API int b(int cnt); .h文件引入 #define DLL_API extern "C" _declspec(dllexport) #

  • VC创建进程CreateProcess的方法

    本文实例讲述了VC创建进程CreateProcess的方法.分享给大家供大家参考.具体实现方法如下: #include "stdafx.h" #include <windows.h> #include <stdio.h> int main (int argc,char* argv[]) { char szCommandLine[]="cmd"; STARTUPINFO si={sizeof(si)}; PROCESS_INFORMATION

  • VC创建圆角dialog的实现方法

    本文实例讲述了VC创建圆角dialog的实现方法.分享给大家供大家参考,具体如下: 我们有时候需要圆角的对话框,要实现这样的效果,一般包括两步工作,第一步:将原有对话框的直角裁剪掉,第二步:为对话框画上圆角或者为对话框贴上一个圆角的图片. 第一步:我们在OnCreate函数中来实现,代码量也不多. int CTestDialog::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) ==

  • VC6.0如何创建以及调用动态链接库实例详解

    小弟在公司的职责,在上篇博客中已经简约介绍.这边博客主要介绍技术的应用而不在细究原理.因为公司项目着急,出结果要紧,并且咱也不是专注搞研究的,所以,基本懂了原理后,直接上手工作,搞出demo来最好. 至于公司工作情况,今天暂且略过,当然也不是一两句能够表达清楚的.后面会有相应的工作总结,敬请期待-- 现在,废话少说,直奔主题--VC6.0中创建动态链接库. 作为客户与后台的中介,为了更好的调节两方的关系,我明智滴选择了webservice以及动态链接库.在与客户c++使动态链接库方式,而与后台j

  • MVC 5 第一章 创建MVC 5 web应用程序

    1. MVC 5 应用程序环境配置(参考本人机器配置) Win7 x64 Enterprise Visual Studio Express 2013 for Web or Visual Studio 2013 2. 创建一个简单的MVC 5应用程序 启动VS2013(以Administrator权限,防止权限访问错误) 点击File->New->Project创建Web Project 选择Web项目模板,点击ASP.NET Web Application,输入项目名称及解决方案名称,选择项目

  • c#创建vc可调用的com组件方法分享

    开发工具:VS2008 VS2008命令提示符(呵呵,这个你应该可以找到在什么地方吧) 附:本文适用任何VS系列工具. 在用C#创建COM时,一定要记住以下几点: 1:所要导出的类必须为公有: 2:所有属性.方法也必须为公有: 3:要导出的属性.方法必须用接口方式:如果没有在接口中声明,即使该方法(属性)为公有,也不能正常导出到COM.但他们可以被别的.NET程序所使用: 4:所有的事件也必须用接口方式: 现在我们开始正题: 一.新建一个Visual C#工程(习惯这种叫法了,现在应该叫解决方案

  • VC++创建msi文件的方法

    采用VC++可以编写自己软件的安装程序.这里只是创建安装程序类型的msi文件,用orca打开是正确的文件格式,值得自己记录一下了,msi数据库里面的各种表关系复杂,不是一时半刻能研究清楚的.本文仅作一浅析,实现写一个程序附到软件程序的后面,这样可以在编译完成后直接会有安装程序msi文件.就像平常下载的软件,可以写注册表,创建桌面快捷方式,注册各种软件用到的组件和功能. 具体示例程序如下: #pragma once //CRT headers. #include <TCHAR.H> //wind

  • MVC后台创建Json(List)前台接受并循环读取实例

    ---------------------------后台------------------- 复制代码 代码如下: [HttpPost] public JsonResult CheckStock(IEnumerable<pvIdsCount> pvIds) { var resultList = new List<pvIdsCount>(); if (pvIds != null) { foreach (var pvIdsCount in pvIds) { var pvId = p

  • VC实现动态菜单的创建方法

    本文简述了在程序不支持MFC,CMenu不可用的情况下,动态创建系统托盘菜单的方法.由于菜单项是不确定的,因而就需要用 sdk 创建一个动态弹出菜单. 主要实现代码如下: //------------------ code begin ---------------- //在类中定义的变量: // 双击托盘图标时对应的菜单项 id. UINT m_nDClickMenuItemId; // 弹出菜单句柄. m_hMenu m_hMenu; ///动态创建右键菜单项. ///@param item

  • Java实现微信公众号自定义菜单的创建方法示例

    本文实例讲述了Java实现微信公众号自定义菜单的创建方法.分享给大家供大家参考,具体如下: 开发公众号的时候可能需要给一些自定义菜单添加事件,比如点击某菜单然后服务端给用户推送信息. 我们也可以使用微信提供的网页调试工具直接生成菜单,不过需要考虑是否影响用户问题. 注意:使用代码自定义菜单事件,手动添加的菜单会失效!谨慎使用! 官方文档 httpClientUtil工具类需要的话可以在前面微信公众号获取access_token中获取 public class WechatDIYMenuTest

  • 微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例

    微信开发公众平台自定义菜单需要花钱认证才能实现,不想花钱只能玩测试账号了,不过这并不影响开发.我的开发都是基于柳峰老师的微信公众平台应用开发做的. 只要我们使用公众平台测试账号就可以开发自定义菜单了,比较方便,测试账号开放了很多接口,很方便. 在开发自定义菜单的时候可以参考微信公众平台开发者文档的自定义菜单创建. 一.自定义菜单 1.自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单. 2.一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以"..."代替. 3

  • Android中选项菜单(OptionMenu)的创建方法

    使用OptionMenu 只要重写两个方法 public boolean onCreateOptionsMenu(Menu menu):菜单的初始化 public boolean onOptionsItemSelected(MenuItem item):菜单响应事件 除此之外,还有三个方法可以重写 public void onOptionsMenuClosed(Menu menu):菜单关闭时调用 public boolean onPrepareOptionsMenu(Menu menu):选项

  • Android使用onCreateOptionsMenu()创建菜单Menu的方法详解

    本文实例讲述了Android使用onCreateOptionsMenu()创建菜单Menu的方法.分享给大家供大家参考,具体如下: Android一共有三种形式的菜单: 1.选项菜单(optinosMenu) 2.上下文菜单(ContextMenu) 3.子菜单(subMenu) 其中最常用的就是选项菜单(optionsMenu), 该菜单在点击 menu 按键 后会在对应的Activity底部显示出来. 1.Activity菜单机制 (与dialog类似) Activity有一套机制来实现对菜

  • Java 创建动态类和查看方法列表信息的实例

     Java 创建动态类和查看方法列表信息的实例 Sample code : import java.lang.reflect.Constructor; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.lang.reflect.Type; import java.util.ArrayList; import

  • 用Android MenuInflater创建菜单项的方法步骤

    之前在一篇文章中已经讲过了菜单项的创建方法,但是那种方法效率较低,维护不易,现在实现另一种方法创建菜单. MenuInflater,通过此类我们可以轻松的创建菜单项,具体步骤如下: 1.在res/menu/文件夹下,找到main.xml文件,此文件就是我们定义菜单项的地方,在些文件中添加如下菜单项: 复制代码 代码如下: <item android:id="@+id/menu1" android:icon="@android:drawable/alert_dark_fr

  • Android编程之菜单Menu的创建方法示例

    本文实例讲述了Android编程之菜单Menu的创建方法.分享给大家供大家参考,具体如下: 在res目录下的menu文件夹下创建一个main.xml文件,内容如下: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="

  • Android编程实现为ListView创建上下文菜单(ContextMenu)的方法

    本文实例讲述了Android编程实现为ListView创建上下文菜单(ContextMenu)的方法.分享给大家供大家参考,具体如下: ContextMenu称为上下文菜单,一般在控件上长按时弹出.今天我们学习ContextMenu的用法,这里与listview相结合,先在ListView显示几个Item,然后在Item上长按,弹出一个菜单(就是ContextMenu),点击菜单上的项目,提示刚才长按的Item的Position. main.xml文件 <?xml version="1.0

  • javascript创建动态表单的方法

    本文实例讲述了javascript创建动态表单的方法.分享给大家供大家参考.具体实现方法如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>

随机推荐