5Windows_system_right_menu右键菜单

  1. // 5Windows_system_right_menu右键菜单.cpp : 定义应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include "5Windows_system_right_menu右键菜单.h"
  5. // 4Windows_System_menu.cpp : 定义应用程序的入口点。
  6. //
  7. #include <iostream>
  8. #define PrintLog(x) WriteConsole(g_hStdout, x, strlen(x), NULL, NULL)
  9. HINSTANCE g_hInst = NULL; //窗口句柄
  10. HANDLE g_hStdout = NULL; //控制台句柄
  11. CHAR szText[256] = { 0 };
  12. void OnRButtonUp(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
  13. {
  14. //获取菜单句柄(建立菜单)
  15. HMENU hPopMenu = CreatePopupMenu();
  16. //增加菜单
  17. AppendMenu(hPopMenu, MF_STRING, 1001, "复制");
  18. AppendMenu(hPopMenu, MF_STRING, 1002, "粘贴");
  19. AppendMenu(hPopMenu, MF_STRING, 1003, "剪切");
  20. AppendMenu(hPopMenu, MF_SEPARATOR, 1004, NULL);
  21. AppendMenu(hPopMenu, MF_STRING, 1005, "退出");
  22. //显示菜单
  23. POINT point = { 0 }; //转换时需要POINT数据结构
  24. point.x = LOWORD(lParam); //客户区坐标
  25. point.y = HIWORD(lParam);
  26. //转换成屏幕坐标
  27. ClientToScreen(hWnd, &point);
  28. TrackPopupMenu(hPopMenu, TPM_LEFTALIGN, point.x, point.y, 0, hWnd, NULL);
  29. }
  30. //OnCommand
  31. void OnCommand(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
  32. {
  33. int CMDId = LOWORD(wParam);
  34. switch (CMDId)
  35. {
  36. case 1001:
  37. //TD//...
  38. PrintLog("复制已完成\n");
  39. break;
  40. case 1002:
  41. //TD//...
  42. PrintLog("粘贴已完成\n");
  43. break;
  44. case 1003:
  45. //TD//...
  46. PrintLog("剪切已完成\n");
  47. break;
  48. case 1005:
  49. //TD//...
  50. PostQuitMessage(0);
  51. break;
  52. }
  53. //打印日志
  54. sprintf_s(szText, 256, "OnCommand ID:%d\n", CMDId);
  55. PrintLog(szText);
  56. }
  57. //OnConTextMenu,右键菜单专用函数
  58. void OnConTextMenu(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
  59. {
  60. //获取菜单句柄(建立菜单)
  61. HMENU hPopMenu = CreatePopupMenu();
  62. //增加菜单
  63. AppendMenu(hPopMenu, MF_STRING, 1006, "一式");
  64. AppendMenu(hPopMenu, MF_STRING, 1007, "二式");
  65. AppendMenu(hPopMenu, MF_STRING, 1008, "三式");
  66. AppendMenu(hPopMenu, MF_SEPARATOR, 1009, NULL);
  67. AppendMenu(hPopMenu, MF_STRING, 1010, "极招");
  68. //显示菜单
  69. //POINT point = { 0 }; //转换时需要POINT数据结构
  70. //point.x = LOWORD(lParam); //客户区坐标
  71. //point.y = HIWORD(lParam);
  72. ////转换成屏幕坐标
  73. //ClientToScreen(hWnd, &point);
  74. int nX = LOWORD(lParam);
  75. int nY = HIWORD(lParam);
  76. TrackPopupMenu(hPopMenu, TPM_LEFTALIGN, nX, nY, 0, hWnd, NULL);
  77. //删除菜单
  78. DestroyMenu(hPopMenu);
  79. }
  80. LRESULT CALLBACK WndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
  81. {
  82. switch (nMsg)
  83. {
  84. case WM_RBUTTONUP:
  85. //OnRButtonUp(hWnd, nMsg, wParam, lParam);
  86. break;
  87. case WM_CONTEXTMENU:
  88. OnConTextMenu(hWnd, nMsg, wParam, lParam);
  89. break;
  90. case WM_COMMAND:
  91. OnCommand(hWnd, nMsg, wParam, lParam);
  92. break;
  93. case WM_DESTROY:
  94. PostQuitMessage(0);
  95. break;
  96. }
  97. return DefWindowProc(hWnd, nMsg, wParam, lParam);
  98. }
  99. BOOL RegisterWnd(LPSTR pszClassName)
  100. {
  101. WNDCLASSEX wce = { 0 };
  102. wce.cbSize = sizeof(wce);
  103. wce.cbClsExtra = 0;
  104. wce.cbWndExtra = 0;
  105. wce.hbrBackground = HBRUSH(COLOR_BTNFACE + 1);
  106. wce.hCursor = NULL;
  107. wce.hIcon = NULL;
  108. wce.hIconSm = NULL;
  109. wce.hInstance = g_hInst;
  110. wce.lpfnWndProc = WndProc;
  111. wce.lpszClassName = pszClassName;
  112. wce.lpszMenuName = NULL;
  113. wce.style = CS_HREDRAW | CS_VREDRAW;
  114. ATOM atom = RegisterClassEx(&wce);
  115. if (atom == NULL)
  116. {
  117. return FALSE;
  118. }
  119. else
  120. {
  121. return TRUE;
  122. }
  123. }
  124. HWND CreateWnd(LPSTR pszClassName)
  125. {
  126. HWND hWnd = CreateWindowEx(0, pszClassName, "灭天", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  127. CW_USEDEFAULT, NULL, NULL, g_hInst, 0);
  128. return hWnd;
  129. }
  130. void ShowWnd(HWND hWnd)
  131. {
  132. ShowWindow(hWnd, SW_SHOW);
  133. UpdateWindow(hWnd);
  134. }
  135. void Msg()
  136. {
  137. MSG msg = { 0 };
  138. while (GetMessage(&msg, NULL, 0, 0))
  139. {
  140. TranslateMessage(&msg);
  141. DispatchMessage(&msg);
  142. }
  143. }
  144. void ConsoleWnd()
  145. {
  146. AllocConsole();
  147. g_hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  148. CHAR szText[] = "Debug start:\n";
  149. WriteConsole(g_hStdout, szText, strlen(szText), NULL, NULL);
  150. }
  151. int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd)
  152. {
  153. g_hInst = hInstance;
  154. ConsoleWnd();
  155. RegisterWnd("oooo");
  156. HWND hWnd = CreateWnd("oooo");
  157. ShowWnd(hWnd);
  158. Msg();
  159. return 0;
  160. }

来自为知笔记(Wiz)

时间: 2024-08-07 21:20:23

5Windows_system_right_menu右键菜单的相关文章

添加右键菜单

有时我们安装绿色版的软件常常是没有右键菜单的,但是对于一些常用的软件,我们需要添加右键菜单,添加方法,打开记事本,复制以下内容,按照自己的需要修改下所在软件的路径将txt另存为bat格式,双击即可: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\PotPlayer] @="Open with PotPlayer" "Icon"="E:\\Program Files (x86)

Duilib中为RichEdit\Edit控件添加自定义右键菜单

前言 Duilib中的RichEdit控件在使用中发现,基本上对复制.粘贴.剪切等快捷方式都是支持的,不过唯一缺点是没有右键菜单,感觉不够好,于是就想着加上右键菜单. 右键菜单基本思路是,在RichEdit的消息处理函数中对鼠标的右键消息处理,发送一个自定义的Notify消息出来,主窗口中受到这个消息后弹出自己的右键菜单. 实现方法 第一步:把鼠标右键消息转发出来 MessageHandler中修改原有代码 bool bWasHandled = true; if( (uMsg >= WM_MOU

使用arcengine开发程序右键菜单

ArcGIS Engine是ESRI在ArcGIS9版本才开始推出的新产品,它是一套完备的嵌入式GIS 组件库和工具库,使用ArcGIS Engine开发的GIS应用程序可以脱离ArcGIS Desktop而运行.让我们一起来看,右键菜单的设计与实现. 利用ArcGIS Engine开发自定义GIS应用程序中,一般有两种方式来建立右键菜单. 一是利用开发工具自带的右键菜单控件,如Visual Studio中的ContextMenuStrip控件: 二是利用ArcGIS Engine封装好的ITo

electron 创建右键菜单

1.引入模块 const Electron = require('electron'); const remote = Electron.remote; const Menu = remote.Menu; const MenuItem = remote.MenuItem; 2. data() { return { isShowMember:false, menu:null, } }, created() { this.targetId = this.id; notificationCenter.

Extjs 4.2 树结点右键菜单(全选,反选,撤销)

自己写的最新版本extjs4.2的树结点的操作,记录一下,以后可能会用到. var tree = new Ext.tree.TreePanel({ flex: 1, animate: true, autoScroll: true, anchor: '100% 93%', store: new Ext.data.TreeStore({ root:{ expanded: true, text:'A', children:[{ expanded: true, text:'1', children:[{

Arcengine 二次开发添加右键菜单

最近在搞arcengine 二次开发,遇到了好多问题,也通过网上查资料试着慢慢解决了,把解决的步骤记录下来,有需要帮助的可以看一下,也欢迎各位来批评指正. 想给自己的map application在图层上添加右键菜单,谷歌了一下,找到了解决的方法,原文的地址edndoc.esri.com/arcobjects/9.2/NET/1ED14BF2-A0E3-4e56-A70D-B9A7F7EC7880.htm.然后我根据这个添加了自己的右键菜单,又有一些改动. 效果如图所示(有点简陋),仅仅是简单的

Delphi中无边框窗体应用程序使任务栏右键菜单有效的方法

最近在Delphi开发中用到了无边框窗体显示时,无法在任务栏使用右键弹出菜单的情况,经过整理,通过以下方法可以使右键菜单出现: procedure Tfrm_Base.InitSysMenu;var  WindowStyle: Integer;begin  WindowStyle := GetWindowLong(Handle, -16);  WindowStyle := WindowStyle or WS_SYSMENU or WS_MINIMIZEBOX;  WindowStyle:=Win

自定义右键菜单

自定义右键菜单 技术一般水平有限,有什么错的地方,望大家指正. 自定义右键菜单,对于一些ERP系统,功能操作比较多,所以我们通常把常用的几个功能放在自定义的右键菜单里方便用户使用. 实现自定义菜单很简单,首先我们要屏蔽原始的右键菜单,自定义菜单出现在鼠标的位置,点击隐藏自定义菜单,过程就是这样的. *{margin:0;padding:0} a{text-decoration:none} ul li{list-style:none} .menu{border:1px solid black;bo

将Sublime Text2 加入右键菜单

原文地址:http://luyuwww.iteye.com/blog/1442328 将Sublime Text2 加入右键菜单方法: 1.  运行中输入 regedit 打开注册表 2.  在HKEY_CLASSES_ROOT/*/shell/ 下新建’项’ ,名称可修改,例如:Sublime Text 3.  在 Sublime Text 下 新建’项’ 名字:command (这个应该不可以修改) 4.  点击  command ,在右边的(默认),双击填入下面的值: D:\Program