c++ winapi菜单函数示例
/*
=========================================================================
主要功能:c++ winapi菜单函数示例
(c++、win32 api) 张国鹏, 2021
编辑工具:notepad++v7.8.2
编译工具:tdm-gcc-5.1.0-3(32位)
编译指令:
Notepad++快速运行代码:按F5,输入以下指令,即可编译并运行C++ WIN32程序:
方式一:cmd /k cd /d "$(CURRENT_DIRECTORY)" & g++ -std=gnu++11 "$(FILE_NAME)" -o "$(NAME_PART)" & "$(NAME_PART).exe
方式二:cmd /k cd /d "$(CURRENT_DIRECTORY)" & g++ -std=gnu++11 "$(FILE_NAME)" -o "$(NAME_PART)" -static-libgcc -lcomctl32 -lgdi32 -lcomdlg32 -lgdiplus -lwininet -lwinmm -lwinspool & "$(NAME_PART).exe
如果程序含有windows.h以外的库,则用方式二编译即可。
如果不需要CMD窗口出现,编译指令加上这句:-mwindows
编译指令加上这句:-std=gnu++11,即采用c++11编译
注意事项:本书所载代码均为ANSI格式,切勿转为UTF-8格式,否则可能造成不可预料的结果!
=========================================================================
*/
#include <windows.h>
#include <stdio.h>
using namespace std;//注意一定要写这句
HMENU hRoot;
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_LBUTTONDOWN://点击鼠标左键弹出指定菜单
{
HMENU pop=GetSubMenu(hRoot,0);//取得被指定菜单激活的下拉式菜单或子菜单的句柄
POINT point;
::GetCursorPos(&point);//得到鼠标的当前位置
TrackPopupMenu (pop, TPM_RIGHTBUTTON, point.x, point.y,0, hwnd, NULL) ;//在指定位置显示快捷菜单
//DestroyMenu (pop);//销毁指定的菜单,并释放此菜单占用的存储器
break;//不写这句会继续往下执行
}
case WM_COMMAND: //maincommand
{
int wmId = LOWORD(wParam);
switch (wmId)
{
case 1:
{
ModifyMenu(hRoot,30011,MF_BYCOMMAND,30011,"修改后的菜单"); //修改已存在的菜单
InsertMenu(hRoot,30011,MF_BYCOMMAND,30010,"插入的菜单");//插入一个新菜单项到菜单里,并使菜单里其他项下移
char temp[MAX_PATH];
GetMenuString(hRoot,1,temp,MAX_PATH,MF_BYPOSITION);//得到指定菜单项的正文字符串至指定缓冲区
MessageBox(NULL,temp,0,0);
int state=GetMenuState(hRoot,30013,MF_BYCOMMAND);//该函数取得与指定菜单项相联系的菜单标志
if (state==MF_DISABLED)
{
sprintf(temp,"state:%d\n",state);
MessageBox(NULL,temp,0,0);
}
DWORD mc=CheckMenuItem(hRoot,30014,MF_BYCOMMAND);//获取指定菜单的CHECKED状态
if (mc==MF_CHECKED)
{
MessageBox(NULL,"为选中状态",0,0);
}else
{
MessageBox(NULL,"未选中状态",0,0);
}
mc=CheckMenuItem(hRoot,30014,MF_BYCOMMAND|MF_UNCHECKED);//将指定菜单设置为UNCHECKED
//RemoveMenu(hRoot,30014,MF_BYCOMMAND);//删除指定菜单项
DeleteMenu(hRoot,30014,MF_BYCOMMAND);//删除指定菜单项
HiliteMenuItem(hwnd,hRoot,30011,MF_BYCOMMAND|MF_HILITE);//对菜单条中的菜单项加亮或清除亮度
break;
}
}
break;
}
case WM_CONTEXTMENU://右键菜单//cd
{
//Win32创建弹出菜单
POINT point;
::GetCursorPos(&point);//得到鼠标的当前位置
HMENU hMenuPopup = CreatePopupMenu () ;
HMENU hMenuPopup1 = CreatePopupMenu () ;
AppendMenu(hMenuPopup1, MF_STRING, 101, "MF_STRING");
AppendMenu(hMenuPopup1, MF_SEPARATOR, 0, NULL) ;
AppendMenu(hMenuPopup1, MF_CHECKED, 102, "MF_CHECKED");
AppendMenu(hMenuPopup, MF_STRING, 1, "MF_STRING");
AppendMenu(hMenuPopup, MF_SEPARATOR, 0, NULL) ;
AppendMenu(hMenuPopup, MF_CHECKED, 2, "MF_CHECKED");
AppendMenu(hMenuPopup, MF_DISABLED, 3, "MF_DISABLED");
AppendMenu(hMenuPopup, MF_ENABLED, 4, "MF_ENABLED");
AppendMenu(hMenuPopup, MF_GRAYED, 5, "MF_GRAYED");
AppendMenu(hMenuPopup, MF_MENUBARBREAK, 6, "MF_MENUBARBREAK");
AppendMenu(hMenuPopup, MF_STRING, 7, "MF_STRING");
AppendMenu(hMenuPopup, MF_STRING, 8, "MF_STRING");
AppendMenu(hMenuPopup, MF_MENUBREAK, 9, "MF_MENUBREAK");
AppendMenu(hMenuPopup, MF_POPUP,(LONG)hMenuPopup1, "MF_POPUP");
TrackPopupMenu (hMenuPopup, TPM_RIGHTBUTTON, point.x, point.y, 0, hwnd, NULL) ;//在指定位置显示快捷菜单
DestroyMenu (hMenuPopup1);
DestroyMenu (hMenuPopup);
return 0;
}
case WM_DESTROY:
{
PostQuitMessage (0) ;
return 0 ;
}
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static char szAppName[] = "HelloWin" ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName= szAppName ;
wndclass.lpfnWndProc = WndProc ;
if (!RegisterClass (&wndclass))
{
MessageBox ( NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
//WIN32 API建立主菜单==========================================
hRoot = CreateMenu();
if(!hRoot)
return 0;
HMENU pop1 = CreatePopupMenu();
AppendMenu(hRoot,MF_POPUP,(UINT_PTR)pop1,"文件");
// 一种方法是使用AppendMenu函数
AppendMenu(pop1,MF_STRING,30011,"新建");
AppendMenu(pop1,MF_STRING,30012,"打开");
AppendMenu(pop1, MF_DISABLED, 30013, "MF_DISABLED");
AppendMenu(pop1, MF_CHECKED, 30014, "MF_CHECKED");
HMENU pop2 = CreatePopupMenu();
AppendMenu(hRoot,MF_POPUP,(UINT_PTR)pop2,"编辑");
AppendMenu(pop2,MF_STRING,30021,"撤消");
AppendMenu(pop2,MF_STRING,30022,"恢复");
//WIN32 API建立主菜==========================================
hwnd = CreateWindow( szAppName, // window class name
"菜单函数示例", // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
hRoot, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
c++ winapi菜单函数示例相关推荐
- python中主函数循环,带有菜单函数的Python主函数循环不起作用?
我现在是一名大学生,正在上python课程.我们的任务是用函数创建这个程序.main函数调用菜单,然后在main函数中编写一个循环,根据菜单函数中的用户响应访问其他函数.在 我好像不能让我的循环工作. ...
- python绘图实例-Python matplotlib基础绘图函数示例
原标题:Python matplotlib基础绘图函数示例 Pyplot基础图标函数: 函数 说明 plt.plot(x,y,fmt,-) 绘制一个坐标图 plt.boxplot(data,notch ...
- js动态改变下拉菜单内容示例 .
<HTML><HEAD><TITLE>动态改变下拉菜单内容示例</TITLE></HEAD><SCRIPT LANGUAGE=java ...
- MySQL存储过程和函数示例
存储过程和函数是在数据库中定义的一些SQL语句的集合,然后直接调用这些存储过程和函数来执行定义好的SQL语句.存储过程和函数可以避免开发人员重复的编写相同的SQL语句,而且存储过程和函数是在MySQL ...
- python中延时函数_python中实现延时回调普通函数示例代码
python中实现延时回调普通函数示例代码 这篇文章主要给大家介绍了关于python中实现延时回调普通函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的 ...
- Mysql函数示例(如何定义输入变量与返回值)
Mysql 函数示例 简介 基于mysql实现函数的编写,如何定义输入变量,如何定义和使用返回值等. 获取男女信息 --1 获取男女信息 CREATE FUNCTION getGender(idcar ...
- 【Python】自定义排序函数 - 示例
自定义排序函数 - 示例 自定义排序规则: def cmp_value_p_code_big(o1, o2):"""排序规则: value大,排前面"" ...
- python函数示例_PHP closeir()函数与示例
python函数示例 PHP Closedir()函数 (PHP closedir() function) The full form of closedir is "Close Direc ...
- python函数示例_带Python示例的complex()函数
python函数示例 Python complex()函数 (Python complex() function) complex() function is a library function i ...
最新文章
- 如何用Map、Filter和Reduce替换Python For循环?
- windbg-!process显示进程
- 基于jsp的教师科研工作量_基于jsp+mysql的JSP教师科研信息管理系统
- 设计模式(创建型)之原型模式
- 业务库负载翻了百倍,我做了什么来拯救MySQL架构
- oracle+行换列,Oracle的数据表中行转列与列转行的操作实例讲解
- 针对文字加密的简单 JS 加密算法 --进制乱序法改良版
- Linux内存映射私有对象,Linux访问内存映射的对象
- 【笔记】VUE学习笔记
- python 数据去重 max()_荐 用 Python 对 Excel 表格内数据进行去重、分类,标记异常及分析...
- 等比数列求和推导及优化
- php 开源企业网站,TayCMS 免费开源企业网站建站系统 For PHP v1.8
- win7,win10系统安装时硬盘格式转换(MBR,GPT)
- 电脑开机没反应的排除方法
- BGA封装焊盘的过孔设计
- 怎么把ofd转换成PDF文件?分享给你个好用的方法。
- 数据库常见的安全问题有哪些?
- python透视变换原理_python cv2中的透视变换
- 【AI测试】人工智能测试整体介绍——第三部分
- 1278_FreeRTOS_借助prvAddCurrentTaskToDelayedList接口理解delayed task
热门文章
- SpringBoot中无法用@Value获取yml中的配置值的原因
- uber关于go语言规范
- 【SDCC 2016现场】互联网应用架构实战峰会(上):蚂蚁金服、宅米、携程、腾讯平台架构演变与实践...
- 职场性别报告,男女薪酬仍有差距,男性平均薪酬比女性高29.7%
- Android Q : 安卓源码、水滴屏适配状态栏图标(图标过多时显示一个点)
- 创业未成功人士讲述未成功经验
- 程序员的自我修养——作者:陈泽宣
- 2020寻找你的朋友圈认证,限时领取【2020 认证勋章】,千万不要错过!!
- Salesforce落地中国,意味着什么
- nagios网页监控check_http