加载图片_Visual C++基础教程-查字典教程网
加载图片
加载图片
发布时间:2015-06-10 来源:查字典编辑
摘要:

 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创建菜单的示范程序! nn编写:刘桂明 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);
}


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


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


相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Visual C++基础入门教程学习
    热门Visual C++基础入门教程学习
    编程开发基础子分类