Windows 编程基础

七、创建菜单 返回

 

 Windows窗口一般都带有一个菜单栏,包含了许多操作命令,这种菜单称为下拉式菜单,单击一个菜单会弹出一个下拉列表菜单项,单击菜单项就可以选择这个命令;

 

 菜单栏中第一个一般是“文件”最后一个是“帮助”,我们通过一个例子来学习如何在自己的窗口中添加菜单;

 

 1、菜单属于一种资源,因此在资源文件中定义,同时菜单是分级的,如果菜单项右侧带有一个小黒三角按钮,就表示包含下一级菜单;

 

 2、启动VC,新建一个名为MenuWin32 Application工程,再新建一个相同名称的头文件源程序文件,

 

 在头文件中输入函数的申明,在源程序中输入窗口框架代码(输好多遍了吧?)Menu.h代码如下:

 

//函数原型申明
LRESULT
APIENTRY MainWndProc(HWND,UINT,WPARAM,LPARAM);
BOOL InitApplication(HINST
ANCE);
BOOL InitInstance(HINST
ANCE,int);

//菜单标识符
#define IDM_NEW       201//新建
#define IDM_EXIT      202//退出
//"编辑菜单"
#define IDM_EDITCOPY  211//复制
#define IDM_EDITPASTE 212//粘贴
//帮助菜单
#define IDM_ABOUT     221//关于

 

 在源程序Menu.cpp里的InitApplication函数中加入使用菜单代码,修改其中一句,加入资源文件中定义的菜单标识符wcexMenuApp.lpszMenuName ="MenuAppMenu";

 

 3、启动记事本,单击保存命令,保存在Menu文件夹中,文件名为Menu.rc类型为“所有文件”,即新建一个资源文件,输入菜单的代码,菜单由一对BEGINEND定义一个菜单列表,菜单列表的表头用POPUP定义,代码如下:

 

#include "Menu.h"//要用头文件中申明的标识符

// 下面定义菜单资源
MENUAPPMENU MENU DISCARDABLE //菜单标识符
BEGIN
    POPUP "文件(&F)"
    BEGIN
       
MENUITEM "新建(&N)", IDM_NEW
       
MENUITEM SEPARATOR
//分隔条
       
MENUITEM "退出(&X)", IDM_EXIT
    END
    POPUP "编辑(&E)"
    BEGIN
       
MENUITEM "复制(&C)", IDM_EDITCOPY
       
MENUITEM SEPARATOR
       
MENUITEM "粘贴(&P)", IDM_EDITPASTE, GRAYED

        //开始是灰色的,不可用
    END
    POPUP "帮助(&H)"
    BEGIN
       
MENUITEM "关于(&A)...\tF1", IDM_ABOUT
    END
END

 

 保存一下文件,然后关闭记事本,在VC窗口中单击“工程”菜单选择“添加工程”-“Files...”,选择其中的资源文件Menu.rc单击“确定”,把资源文件加入工程当中;

 

 4、单击菜单时会发送一个命令消息,下面再加入消息处理过程的代码(绿色双斜杠部分是注释),有的一行太长会自动折到下一行,代码如下:

 

LRESULT APIENTRY MainWndProc(
    HWND hWnd,UINT message,WP
ARAM wParam,LPARAM lParam)
{
   
static CHAR szBuf[20];
//标题文字字符串
    HDC hdc;
//设备描述表
    PAINTSTRUCT ps;
//绘图对象
   
static BOOL bNew=TRUE;//新建菜单的切换

   
switch(message)
    {
       
case WM_PAINT:
//封面显示
        {
            CH
AR szText[]="请选择一个菜单项。";
            hdc=BeginPaint(hWnd,&ps);
            TextOut(hdc,80,40,szText,lstrlen(szText));
            TextOut(hdc,100,60,"美丽心情! ",lstrlen("美丽心情! "));
            EndPaint(hWnd,&ps);
        }
       
break;
       
case WM_COMMAND:
//处理菜单命令的消息
           
switch(LOWORD(wParam))//取低位字节判断
            {
             
case IDM_NEW://新建命令
                InvalidateRect(hWnd,NULL,TRUE);
//更新整个屏幕区域
                hdc=BeginPaint(hWnd,&ps);
                SetTextColor(hdc, RGB(255,255,0));
                SetBk
Mode(hdc,TRANSPARENT);//背景模式为透明背景;
               
if (bNew)//输出一句话
                    TextOut(hdc,80,60,"千山万水,在哪儿??",lstrlen("千山万水,在哪儿??"));
                else
                    TextOut(hdc,80,60,"万水千山,在这里!!",lstrlen("万水千山,在这里!!"));
                EndPaint(hWnd,&ps);
                bNew=!bNew;
//新建换一句话
               
break;
           
case IDM_EXIT:
//退出命令
                DestroyWindow(hWnd);
               
break;
           
case IDM_EDITCOPY:
//复制命令
                Enable
MenuItem(GetMenu(hWnd),
                ID
M_EDITPASTE,MF_BYCOMMAND|MF_ENABLED);
               
break;
           
case IDM_EDITPASTE:
//粘贴命令
               
MessageBox(NULL,"“粘贴”命令的演示。" , "提示" , MB_OK|MB_ICONINFORMATION);
               
break;
           
case IDM_ABOUT:
//关于命令
               
MessageBox(hWnd,"\n创建菜单的示范程序! \n\n编写:刘桂明 2004.8",
"关于",
MB_OK|MB_ICONINFORMATION);
//\n是输入一个回车
               
break;
           
default:
               
return(DefWindowProc(hWnd,message,wParam,lParam));
            }
           
break;
       
case WM_DESTROY:
                PostQuit
Message(0);
               
break;
       
default:
           
return (DefWindowProc(hWnd,message,wParam,lParam));
    }
   
return(0);
}


 
保存一下文件,单击编译条上的“构建”按钮,如果出现错误就仔细检查一下,然后单击“执行”按钮,看看前进中的的程序窗口;

 

 本节学习了在程序窗口中加入菜单栏的代码设计,如果你成功地完成了练习,请继续学习下一课内容;

返回

 

 弹指一挥 (在弹出的对话框中选择“运行”、“运行”)

本教程由86团学校TeliuTe制作|著作权所有

基础教程网:http://teliute.org/

美丽的校园……



转载和引用本站内容,请保留作者和本站链接。