MENUITEMINFO结构体说明

本文详细介绍了用于描述菜单项属性的MENUITEMINFO结构。包括各字段的含义、使用方法及注意事项,有助于理解如何管理和定制菜单项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 声明:转载此文档时请注意转载来源和我的名字,本人水平有限翻译有误处请指出

 

MENUITEMINFO结构包含关于一个菜单项信息

typedef struct tagMENUITEMINFO {
    UINT    cbSize;
    UINT    fMask;
    UINT    fType;
    UINT    fState;
    UINT    wID;
    HMENU   hSubMenu;
    HBITMAP hbmpChecked;
    HBITMAP hbmpUnchecked;
    DWORD   dwItemData;
    LPTSTR  dwTypeData;
    UINT    cch;
} MENUITEMINFO, FAR *LPMENUITEMINFO;

 

成员
cbSize

        结构的大小,字节


fMask
        重新获取或设置成员,这个成员可以使用一个或多个这些值


         MIIM_CHECKMARKS 重新获取或设置hbmpChecked和hbmpUnchecked成员


         MIIM_DATA 重新获取或设置dwItemData成员 


         MIIM_ID 重新获取或设置wID成员


         MIIM_STATE 重新获取或设置fState成员


         MIIM_SUBMENU 重新获取或设置hSubMenu成员


         MIIM_TYPE 重新获取或设置fType和dwTypeData成员

 

fType 
       菜单项类型.这个成员可以使用一个或多个这些值
 
     MFT_BITMAP  使用一个位图显示菜单项.dwTypeData低次序的字是成员的位图句柄.cch是忽视的.

 

     MFT_MENUBARBREAK  菜单项位置在新行上(适用于菜单栏)或在新列内(适用于下拉菜单,子菜单,

                                                    快捷菜单).适用于下拉菜单,子菜单,或快捷菜单,垂直线以前的列中隔离新的列

 

     MFT_MENUBREAK   菜单项位置在新行上(适用于菜单栏)或在新列内(适用于下拉菜单,子菜单,快

                                             捷菜单).适用于下拉菜单,子菜单,或快捷菜单,这个列不被垂直线分开  

 

     MFT_OWNERDRAW  分配责任到那个窗体菜单绘制自己的菜单项.在菜单显示之前第一时间窗体收到

                                                一条WM_MEASUREITEM消息,和一条无论何时菜单项的外观都必须更新的WM_DRAWITEM消息

     

    MFT_RADIOCHECK  如果hbmpChecked成员是NULL 显示选中的菜单项使用一个单选按钮来代替一个复选标记

 

     MFT_RIGHTJUSTIFY  权利证明菜单项和所有后来的项,如果菜单项在菜单栏内这个值才是唯一有效的

 

     MFT_RIGHTORDER Windows 95, Windows NT 5.0,和随后的:指定那个层叠菜单右至左(默认的是左

                                            至右).这是支持习惯右至左的语言,这样的人是阿拉伯的和希伯来人

 

     MFT_SEPARATOR 指定那个菜单项是一个隔离物(线条).一个菜单隔离物看起来是水平分划的线条.

                                        dwTypeDate和cch成员忽视. 这个值在一个下拉菜单,子菜单,或快捷菜单才是唯一有效的

 

     MFT_STRING     显示使用菜单项的一个文本字符串.dwTypeData成员指示一个空终止的字符串,和cch

                                       成员是字符串的长度

 

 MFT_BITMAP, MFT_SEPARATOR, and MFT_STRING 任何一个值都不能相互组合使用

 

fState
         菜单项的状态.这个成员可以是一个或多个的这些值:
 
         MFS_CHECKED 复选的菜单项.至于更多关于菜单项选中的信息,看hbmpChecked成员.
 
         MFS_DEFAULT  指定那个是默认的菜单项。一个菜单仅仅只可以包含一个默认的菜单项,粗体显示那个。
 
         MFS_DISABLED 禁止菜单项所以它不能被选择.但是不使它变灰.
 
         MFS_ENABLED  激活菜单项所以它可以被选择。这是默认的状态.

 

         MFS_GRAYED 禁止菜单项和变灰它,所以它不可以被选择.
 
         MFS_HILITE 加亮菜单项
 
         MFS_UNCHECKED 取消复选菜单项.至于更多关于菜单项unchecked信息,看hbmpUnchecked成员变量

 

         MFS_UNHILITE 移除来自菜单项的加亮区.这是默认状态.

 

wID
           应用程序定义16位的值来识别那个菜单项.
 
hSubMenu
          下拉菜单或相关联的子菜单的菜单项的句柄。如果菜单项不是一个打开的下拉菜单或子菜单,那这个成员是NULL

 

hbmpChecked
         如果条目被选中,这个显示项是位图的句柄.如果这个成员是NULL,使用一个默认的位图.如查

          MFT_RADIOCHECK类型值是被指定的.这个默认的图片是子弹一样的图片。否则它是复选标记

          hbmpUnchecked 如果条目没有被选中,这个显示项是位图的句柄,如果成员是NULL,不能使用位图

 

dwItemData 
             应用程序定义的菜单项相关联的值

 

dwTypeData 
             菜单项的内容.如果fMask成员设置了MIIM_TYPE标记这个成员才能被使用;
 
         在调用GetMenuItemInfo之前.应用程序必须为这个成员设置一个指定的缓冲区.长度是cch成员指

        定.如果取回的菜单项的类型是MFT_STRING,那么GetMenuItemInfo 拷贝菜单项的文本到缓冲区.如果取回

        的菜单项是其它类型,那么GetMenuItemInfo设置dwTypeDate一个值,是fType成员指定的

        在使用SetMenuItemInfo函数的时候,谁包含这个成员类型的一个值,是fType成员指定.

 

cch
         菜单项文本的长度息,就在一个菜单项的类型是MFT_STRING信息时.如果fMask成员设置

        MIIM_TYPE标记和没有其它方面的这个成员是唯一可以使用的.在调用SetMenuItemInfo设置菜单项的内容

        时这个成员忽略.在调用GetMenuItemInfo前,应用程序必须为dwTypeDate成员设置一个指定长度的缓冲区.如果取回的菜单

        项类型是MFT_STRING(fType成员被指定),那么GetMenuItemInfo设置cch为取回字符串的长度.如果取回的菜单项

        是其它类型,GetMenuItemInfo把cch设置为0

 

说明
        MENUITEMINFO 结构体可以被GetMenuItemInfo, InsertMenuItem, and SetMenuItemInfo 函数使用

<think>首先,用户要求使用中文回答问题。所以,我的整个响应必须是中文的。 用户的问题是:"c语言结构体说明一下",意思是"解释一下C语言结构体"。 我需要提供一个关于C语言结构体的解释。结构体是C语言中一种复合数据类型,允许用户组合不同类型的数据项。 关键点包括: - 结构体使用`struct`关键字定义。 - 它可以包含多个成员,每个成员可以是不同的数据类型。 - 结构体用于创建自定义数据类型。 - 示例:定义一个学生结构体,包含姓名、年龄等。 我应该给出一个简单的代码示例来展示结构体的定义和使用。 在回答完问题后,我必须根据用户的问题和我的回答提出3-5个相关问题。这些相关问题必须以"§§相关问题§§"开头,并且不能换行分散;它必须是一行完整的输出。 从示例格式中: - 回答部分包括解释和代码块。 - 然后,直接输出"§§相关问题§§",后跟1. 2. 3. 等编号的问题。 相关问题必须基于用户的问题和我的回答。所以,既然问题是关于C语言结构体的,问题应该涉及结构体的相关方面,比如初始化、访问成员、指针等。 列出可能的3-5个相关问题: 1. 如何初始化一个结构体变量? 2. 结构体和数组有什么区别? 3. 如何在函数中使用结构体指针? 4. 结构体可以包含其他结构体吗? 5. 如何访问结构体的成员? 确保问题数量在3到5个之间。 现在,构建我的响应: 1. 先用中文解释结构体。 2. 提供一个简单的代码示例。 3. 然后,输出"§§相关问题§§",后跟编号的问题列表。 代码示例应该用Markdown代码块表示,如示例中所示。 完整响应结构: - 解释部分。 - 代码示例。 - "§§相关问题§§" - 相关问题列表。 写响应: 解释:C语言结构体是一种用户自定义的数据类型,它允许你将不同类型的数据组合成一个单一的实体。结构体使用`struct`关键字定义,可以包含多个成员变量。 代码示例:定义一个学生结构体,并创建一个实例。 ```c #include <stdio.h> // 定义结构体 struct Student { char name[50]; int age; float score; }; int main() { // 创建结构体变量 struct Student student1; // 初始化结构体成员 strcpy(student1.name, "张三"); student1.age = 20; student1.score = 85.5; // 访问并打印结构体成员 printf("姓名: %s\n", student1.name); printf("年龄: %d\n", student1.age); printf("分数: %.1f\n", student1.score); return 0; } ``` 然后,相关问题: §§相关问题§§ 1. 如何动态分配结构体内存? 2. 结构体数组如何定义和使用? 3. 结构体与联合体有什么区别? 4. 如何在函数中传递结构体参数? 确保相关问题合理相关。</think>C语言结构体struct)是一种用户自定义的复合数据类型,允许你将多个不同类型的数据项组合成一个单一的实体。结构体使用 `struct` 关键字定义,每个数据项称为成员(member)。其主要用途是创建复杂的数据结构,例如表示学生、员工或坐标点等实体。 ### 关键特点: 1. **定义语法**:使用 `struct` 声明,后跟结构体名和成员列表。 2. **成员类型**:成员可以是基本类型(如 int、char、float)或其他结构体。 3. **访问成员**:通过点运算符 `.` 访问成员变量。 4. **内存对齐**:结构体的大小由成员大小和对齐规则决定(可通过 `sizeof` 获取)。 5. **灵活性**:支持结构体数组、指针和嵌套结构体。 ### 示例代码: 以下是一个简单的结构体定义和使用示例: ```c #include <stdio.h> // 定义结构体 struct Person { char name[50]; int age; float height; }; int main() { // 创建结构体变量 struct Person person1; // 初始化成员 strcpy(person1.name, "李四"); // 字符串赋值 person1.age = 25; person1.height = 175.5; // 访问并打印成员 printf("姓名: %s\n", person1.name); printf("年龄: %d\n", person1.age); printf("身高: %.1f cm\n", person1.height); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值