`

[置顶] 菜单和其他资源(3)之创建自己的浮动菜单

阅读更多

即使没有顶级菜单栏,也可以使用菜单,你可以让弹出菜单出现在屏幕的任何位置。一种途径是作为对鼠标右键单击响应来激活相应的弹出菜单,这就是浮动菜单。

注意比较一下普通菜单和浮动菜单的区别,普通菜单可以看我的上一篇博客。

下面来讲讲步骤,步骤跟普通菜单的步骤基本一直,不过有一点值得注意,在编辑菜单选项的时候,应该...,还是截图吧,一目了然

也就是说,把普通菜单的popmenu当成了子菜单选项

如果你像下面这样编辑的话:制作浮动菜单的时候,只能选取某一个子菜单。

效果则会变成这样:

 

下面小牛试刀:

先看看代码:

#include<windows.h>#include"resource.h"LRESULT CALLBACK WindowProc(  HWND hwnd,      // handle to window  UINT uMsg,      // message identifier  WPARAM wParam,  // first message parameter  LPARAM lParam   // second message parameter);HINSTANCE hInst;int WINAPI WinMain(  HINSTANCE hInstance,      // handle to current instance  HINSTANCE hPrevInstance,  // handle to previous instance  LPSTR lpCmdLine,          // command line  int nCmdShow              // show state){	static TCHAR szAppName[]=TEXT("sample");	HWND hwnd;	MSG msg;	WNDCLASS wndclass;	hInst=hInstance;	wndclass.cbClsExtra=0;	wndclass.cbWndExtra=0;	wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);	wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);	wndclass.hIcon=LoadIcon(NULL,IDI_ERROR);	wndclass.hInstance=hInstance;	wndclass.lpfnWndProc=WindowProc;	wndclass.lpszClassName=szAppName;	wndclass.lpszMenuName=NULL;	wndclass.style=CS_HREDRAW|CS_VREDRAW;	if(!RegisterClass(&wndclass))	{		MessageBox(NULL,TEXT("the program require the window nt"),TEXT("tips"),MB_ICONERROR);		return 0;	}	hwnd=CreateWindow(	  szAppName,  // registered class name	  TEXT("this is title"), // window name	  WS_OVERLAPPEDWINDOW,        // window style	  CW_USEDEFAULT,                // horizontal position of window	  CW_USEDEFAULT,                // vertical position of window	  CW_USEDEFAULT,           // window width	  CW_USEDEFAULT,          // window height	  NULL,      // handle to parent or owner window	  NULL,          // menu handle or child identifier	  hInstance,  // handle to application instance	  NULL        // window-creation data);	ShowWindow(hwnd,nCmdShow);	UpdateWindow(hwnd);	while(GetMessage(&msg,NULL,0,0))	{		TranslateMessage(&msg);		DispatchMessage(&msg);	}	return msg.wParam;}LRESULT CALLBACK WindowProc(  HWND hwnd,      // handle to window  UINT uMsg,      // message identifier  WPARAM wParam,  // first message parameter  LPARAM lParam   // second message parameter){	static HMENU hMenu1;	HDC hdc;	PAINTSTRUCT ps;	static POINT point;	static HBRUSH hbrush=CreateSolidBrush(RGB(0,255,0));//默认画刷是绿色的	static RECT rect;	switch(uMsg)	{	case WM_CREATE:		hMenu1=LoadMenu(hInst,MAKEINTRESOURCE(MENUIID));//在这里加载喔,跟普通菜单有点不一样		hMenu1=GetSubMenu(hMenu1,0);//选择子菜单,这里添加资源的时候,有一点技巧		return 0;	case WM_RBUTTONUP:		GetCursorPos(&point);//获取鼠标当前位置		TrackPopupMenu(hMenu1,TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x,point.y,0,hwnd,NULL);//浮动菜单				return 0;	case WM_COMMAND:		switch(LOWORD(wParam))		{			case ID_FILE_NEW:			case ID_FILE_OPEN:			case ID_FILE_SAVE:			case ID_FILE_SAVEAS:				MessageBox(NULL,TEXT("你选择了File中的选项"),TEXT("别紧张,提示而已"),MB_OK);//弹出一个提示				return 0;			case ID_EDIT_CUT:			case ID_EDIT_COPY:			case ID_EDIT_PASTE:				MessageBeep(MB_ICONEXCLAMATION);//发出系统清脆的声音				return 0;			case ID_BACKGROUND_RED:				hbrush=CreateSolidBrush(RGB(255,0,0));				//SetClassLong(hwnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(1));//这个画刷只能画灰色和黑色				InvalidateRect(hwnd,&rect,TRUE);//使得客户区无效,从而传递WM_PAINT消息				return 0;			case ID_BACKGROUND_GREEN:				hbrush=CreateSolidBrush(RGB(0,255,0));//绿色的画刷				InvalidateRect(hwnd,&rect,TRUE);//使得客户区无效,从而传递WM_PAINT消息				return 0;			case ID_BACKGROUND_BLUE:				hbrush=CreateSolidBrush(RGB(0,0,255));//蓝色的画刷				InvalidateRect(hwnd,&rect,TRUE);//使得客户区无效,从而传递WM_PAINT消息				return 0;		}		return 0;			case WM_PAINT:		GetClientRect(hwnd,&rect);		hdc=BeginPaint(hwnd,&ps);		FillRect(hdc,&rect,hbrush);				EndPaint(hwnd,&ps);		return 0;	case WM_DESTROY:		PostQuitMessage(0);		return 0;	}	return DefWindowProc(hwnd,uMsg,wParam,lParam);}


效果图不截,你们也应该知道是怎样了的吧。

 

 

分享到:
评论

相关推荐

    VC++ 窗口置顶程序及源代码

    通过学习和理解这段源代码,开发者可以了解如何在自己的应用程序中实现窗口置顶功能,这对于创建工具栏、浮动面板或其他需要始终保持可见的窗口组件特别有用。 此外,了解这些基础知识不仅有助于实现窗口置顶,还有...

    悬浮小球悬浮窗口置顶可拖拽可点击(Qt c++)

    这段代码将禁用窗口边框(FramelessWindowHint)并确保窗口始终位于其他窗口之上(WindowStaysOnTopHint)。 **拖拽功能** 实现窗口拖拽通常需要捕获鼠标事件。当鼠标按下时,记录当前鼠标位置,然后在鼠标移动时...

    基于jQuery实现的网站漂浮置顶和置底特效源码.zip

    【标题】中的“基于jQuery实现的网站漂浮置顶和置底特效源码”表明了这是一个使用JavaScript库jQuery创建的网页交互效果。这种效果通常应用于网站的侧边栏广告、固定导航菜单或浮动按钮,使其在用户滚动页面时始终...

    react-native-floating-action-menu:简单的浮动操作菜单,可用于本机操作

    React本机浮动动作菜单BYOI(带有您自己的图标)javascript组件,用于react-native。 没有依赖关系。 受到材料设计的“浮动动作按钮”的启发。 请自定义您的需求并享受。 欢迎公关!安装 npm install --save react-...

    mac截图软件,可以贴图,非常好用

    这种置顶功能通常可以通过快捷键或软件菜单激活和关闭。 Snipaste还支持截图标注,用户可以直接在截图上添加文字、箭头、高亮等标记,快速进行注解。这对于远程协作、教学演示或问题反馈非常实用。此外,它还有延迟...

    jQuery页面滚动置顶导航特效代码

    为了实现这些,我们需要熟悉CSS3的过渡和动画效果,以及媒体查询来处理响应式设计。 总的来说,"jQuery页面滚动置顶导航特效代码"是一个提高网站交互性的实用工具,它利用jQuery的强大功能和灵活性,实现了导航栏在...

    python入门到高级全栈工程师培训 第3期 附课件代码

    11 FTP之创建文件夹及MD5校验思路 第33章 01 操作系统历史 02 进程的概念 03 线程的概念 04 线程的调用以及join方法 05 setDaemon方法和继承式调用.baiduyun.downloading 05 setDaemon方法和继承式调用 第34章 ...

    CnPack IDE 专家包 v0.7.1.23 Build 2004.12.11

    专家包以 DLL 的方式集成到 IDE 中,包括一组以菜单和快捷键调用的工具、扩展的属性编辑器、组件编辑器及代码、窗体资源模板等。当前支持的编译器有 Borland Delphi 5/6/7 和 C++ Builder 5/6,可以在 Windows 98/SE...

    生活分类信息网带手机微信2019版 v4.0

    支持置顶功能7、图片广告管理功能生活分类信息港电脑加手机加微信2019新版4.0更新1、增加手机版底部浮动导航菜单2、优化手机版信息发布页面,搜索页面3、PC首页添加置顶分类,修复通栏广告在首页显示4、优化PC信息...

    WordPress博客主题Yusi1.0(扁平化+响应式)

    自带7 小工具,可随意设置侧栏分类和浮动块。 基本SEO:首页、分类、文章等页面都可以设置关键词和描述 内置实用功能:Ajax加载分页、垃圾广告拦截、缓存头像、社交账户图标等 短代码包括dm和dl、gt等,可自主选择。 ...

    网钛文章管理系统 v2.2 build 20110930_ASP

    3.纠正首页最新消息置顶文章和首页栏目more链接,当为外部链接时没采用外部链接bug 4.去掉生成首页静态页失败时用跳转语句替代 5.增加后台生成首页静态页错误的原因提示种类 提供低价域名注册,网站空间 淘宝旗舰...

    C#400例子.pdf

    - **实例说明**:某些情况下,希望窗体始终保持在其他所有窗口之上。 - **技术要点**: - 设置窗体的顶级属性。 - 实现窗体始终置顶功能。 **实例040 限制窗体大小** - **实例说明**:为了避免窗体过大或过小...

    导航跟随滚动条置顶移动示例代码

    ` 设置层叠顺序,数值越大,元素越靠前,确保导航栏在其他元素之上。 - `left: 0;` 导航栏距离左边的距离为0,保持在屏幕左侧。 2. **JavaScript 部分**: - 使用 `jQuery(document).ready()` 函数确保在DOM加载...

    ppt计时器永远浮于ppt上方

    2. **自定义设计**: 用户可以根据自己的需求调整计时器的样式和颜色,以匹配PPT的主题或个人喜好,使计时器与演示文稿融为一体。 3. **时间设定**: 支持设置计时的起始时间,可以预设特定的时间段,例如5分钟、10...

    文章管理系统

    3.[纠正]纠正栏目编辑时模式选择外部链接,导航菜单和首页栏目开关项没显示的BUG 4.[纠正]纠正sitemap生成把隐藏状态的文章也显示出来的bug 5.全站验证码默认选择传统数字型 6.修复其他小细节 2013年03月18日 V2.72...

    Qt 仿VS2010的Dock样式,出现Dock方向标签

    要将某个QDockWidget Dock 到四周的某边上,如顶上,可以右键单击QDockWidget的标题栏,在弹出的菜单中选择 置顶. 或者拖动此QDockWidget到红色箭头标记的地方并释放鼠标,也可完成Dock 因为默认,当顶部只有一个...

    香香企业管理系统 v5.0.rar

    香香企业文章管理系统是全站采用主流DIV CSS框架布局,功能强大,操作人性化,有五种不同模式,可以适用于广泛的新闻发布型网站,让不懂代码但又想建立自己网站的朋友,通过后台简单的配置,就能拥有一个个性化的...

    网钛文章管理系统

    3、可在后台文章管理列表页直接设置推荐、置顶、幻灯、滚动图片、缩略图、滚动信息等属性,减少操作步骤; 4、支持设置文章标题的颜色、作者、来源、外部连接; 5、集成在线编辑器,编辑文章更加方便; 6、支持...

    网钛文章管理系统 V2.91最新版

    3、可在文章管理列表中直接设置推荐、置顶、幻灯、滚动图片、缩略图、滚动信息等属性,减少操作; 4、集成在线编辑=,编辑文章更加方便; 5、支持文章内容分页设置。 6、支持把远程图片自动保存到本地; 7、从...

    discuz x3 测试版

    新增 浏览帖子的时候,右下角增加快速跟帖、快速返回列表、快速置顶的操作菜单 新增 使用免费的道具,不再需要购买后才可使用。诸如如果设置涂鸦板为免费道具,无需折腾,直接就可以使用 新增 发布主题的时候,可以...

Global site tag (gtag.js) - Google Analytics