| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3088 人关注过本帖
标题:VC里怎么添加菜单啊,急 啊
只看楼主 加入收藏
小跳蚤
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:437
专家分:1623
注 册:2011-4-9
收藏
得分:0 
你要指定你的菜单是POPUP类型的。。。才能显示出来。

怎么指定啊,不懂唉
2012-05-25 13:08
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
另外,看了一下你的程序代码,变量命名不规范,hwndlist hwndbut1,这些。
你可以取一些有意义的命名。如hLst,btn_play, btn_stop。
一般你可以定义一个全局的g_hInstance,把WinMain那个实例保存下来,就不必在创建按钮的时候,写一堆密密的获取实例的代码了。
把播放函数单独提出来,用头文件和实现文件进行分离。
使用数据结构设计你的播放列表,用上你自己学过的知识。注意写好程序注释。

我们都在路上。。。。。
2012-05-25 13:12
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
回复 11楼 小跳蚤
在菜单上点右键,选最后一个属性,你可以在弹出的对话框指定是哪种类型的菜单。

我们都在路上。。。。。
2012-05-25 13:15
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
simple code 一些示例
struct music
{
    char * cur_file_name;    //长文件名
    char * shot_file_name;    //短文件名
    char status_mode[10];    //播放状态
    int hours;        //小时
    int minutes;        //分钟
    int seconds;        //秒
    int milliseconds;    //毫秒
}MusicFile;

/// 程序流程函数
void prog_init();
void prog_close();
void print_func_info();

/// 辅助函数
void gotoxy(int x, int y);
void get_console_position(int &x, int &y);
void get_open_file();
void get_time_format(long time);

/// 音乐播放控制简化函数
BOOL music_open();
BOOL music_play();
BOOL music_close();
BOOL music_stop();
BOOL music_pause();
BOOL music_resume();
BOOL music_get_mode();
BOOL music_get_length();
BOOL music_get_position();


///
/// 程序初始化模块,完成一些变量的初始化
///
void prog_init()
{
    MusicFile.cur_file_name = NULL;
    MusicFile.shot_file_name = NULL;
    MusicFile.hours = 0;
    MusicFile.minutes = 0;
    MusicFile.seconds = 0;
    MusicFile.milliseconds = 0;
}

///
/// 程序结束模块,主要完成一些变量的释放
///
void prog_close()
{
    if(MusicFile.cur_file_name != NULL)
    {
        free(MusicFile.cur_file_name);
    }

    if(MusicFile.shot_file_name != NULL)
    {
        free(MusicFile.shot_file_name);
    }

    return ;
}

//
/// 函数music_open功能:通过mci设备打开音乐文件
/// 返回值: bool类型,为真表示成功打开, 为假表示打开失败,或是用户没有选择文件
///
BOOL music_open()
{
    int ret = -1;
    char command[256];

    if(MusicFile.shot_file_name != NULL){
        wsprintf(command, "open %s alias mysound", MusicFile.shot_file_name);
        ret = mciSendString(command, "", 0, NULL);
    }

    return ret == 0 ? TRUE : FALSE;
}

///
/// 函数music_play功能:播放打开的音乐文件
/// 返回值:bool类型,为真表示播放成功,为假表示播放失败
///
BOOL music_play()
{
    int ret = -1;
   
    ret = mciSendString("play mysound", "", 0, NULL);

    return ret == 0 ? TRUE : FALSE;
}

///
/// 函数music_close功能:关闭音乐文件,正在播放的文件可以不调用stop
/// 返回值:bool类型,为真表示关闭成功,为假表示关闭失败
///
BOOL music_close()
{
    int ret = -1;
   
    ret = mciSendString("close mysound", "", 0, NULL);

    return ret == 0 ? TRUE : FALSE;
}

///
/// 函数music_pause功能:暂停播放音乐文件
/// 返回值:bool类型,为真表示成功,为假表示失败
///
BOOL music_pause()
{
    int ret = -1;
   
    ret = mciSendString("pause mysound", "", 0, NULL);

    return ret == 0 ? TRUE : FALSE;
}

///
/// 函数music_resume功能:恢复暂停音乐文件
/// 返回值:bool类型,为真表示成功,为假表示失败
///
BOOL music_resume()
{
    int ret = -1;
   
    ret = mciSendString("resume mysound", "", 0, NULL);

    return ret == 0 ? TRUE : FALSE;
}

///
/// 函数music_stop功能:停止播放音乐文件
/// 返回值:bool类型,为真表示成功,为假表示失败
///
BOOL music_stop()
{
    int ret = -1;
   
    ret = mciSendString("stop mysound", "", 0, NULL);

    return ret == 0 ? TRUE : FALSE;
}

///
/// 函数music_get_mode功能:取得音乐文件播放状态
/// 返回值:bool类型,为真表示成功,为假表示失败
///
BOOL music_get_mode()
{
    int ret = -1;
    char buffer[256];

    ret = mciSendString("status mysound mode", buffer, sizeof(buffer), NULL);
    if(strcmp(MusicFile.status_mode, buffer) != 0){
        strcpy(MusicFile.status_mode, buffer);
    }

    return ret == 0 ? TRUE : FALSE;
}

///
/// 函数music_get_length功能:取得音乐文件总长度
/// 返回值:bool类型,为真表示成功,为假表示失败
///
BOOL music_get_length()
{
    int ret = -1;
    char buffer[256];

    ret = mciSendString("status mysound length", buffer, sizeof(buffer), NULL);
    get_time_format(atol(buffer));

    return ret == 0 ? TRUE : FALSE;
}

///
/// 函数music_get_position功能:取得音乐文件播放位置
/// 返回值:bool类型,为真表示成功,为假表示失败
///
BOOL music_get_position()
{
    int ret = -1;
    char buffer[256];

    ret = mciSendString("status mysound position", buffer, sizeof(buffer), NULL);
    get_time_format(atol(buffer));
   
    return ret == 0 ? TRUE : FALSE;
}

///
/// 函数get_time_format功能: 将以ms制式格式的歌曲位置转换成对应的hh:mm:ss.ms整数
/// 参数:time 为long型,ms制式格式
/// 无返回值
///
void get_time_format(long time)
{
    MusicFile.hours   = time / 3600000;
    MusicFile.minutes = time / 60000;
    MusicFile.seconds = time % 60000 / 1000;
    MusicFile.milliseconds = time % 60000 % 1000;
}

///
/// 函数get_open_file功能:打开一个对话框获取用户选择的文件
/// 同时把选择的文件名保存在music结构中
///
void get_open_file()
{
    char file_name[256];    //至少256个字符以上
    OPENFILENAME ofn;
   
    ZeroMemory(&ofn, sizeof(OPENFILENAME));
    file_name[0] = NULL;    //文件缓冲区第一个字符必须是NULL,没有这句是不会出对话框的
    ofn.lStructSize = sizeof(OPENFILENAME);
    ofn.lpstrFile = file_name;
    ofn.nMaxFile = sizeof(file_name);
    ofn.hwndOwner = GetForegroundWindow();
    ofn.lpstrFilter = "All\0*.*\0MP3\0*.mp3\0";
    ofn.nFilterIndex = 2;
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
   
     if(GetOpenFileName(&ofn))
    {
        printf("you select file is %s\n", ofn.lpstrFile);
        //如果字符串已分配内存,就释放,避免拷入长字符串到小空间的bug。
        if(MusicFile.cur_file_name != NULL){
            free(MusicFile.cur_file_name);
        }
        MusicFile.cur_file_name = (char *)malloc(strlen(ofn.lpstrFile) + 1);
        strcpy(MusicFile.cur_file_name, ofn.lpstrFile);

        //获取相应的短文件名,播放时用
        GetShortPathName(ofn.lpstrFile, file_name, sizeof(file_name));
        if(MusicFile.shot_file_name != NULL){
            free(MusicFile.shot_file_name);
        }
        MusicFile.shot_file_name = (char *)malloc(strlen(file_name) + 1);
        strcpy(MusicFile.shot_file_name, file_name);
    }
}

我们都在路上。。。。。
2012-05-25 13:22
小跳蚤
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:437
专家分:1623
注 册:2011-4-9
收藏
得分:0 
回复 12楼 hellovfp
嗯,多会好好改改的
2012-05-25 13:30
小跳蚤
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:437
专家分:1623
注 册:2011-4-9
收藏
得分:0 
回复 13楼 hellovfp
我改成了弹出的形势,为什么还是不显示啊
2012-05-25 13:31
小跳蚤
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:437
专家分:1623
注 册:2011-4-9
收藏
得分:0 
回复 14楼 hellovfp
太有用了,很好很强大
2012-05-25 13:33
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
回复 16楼 小跳蚤
偶这里都显示了:
给你最后的修改吧,子菜单没有定义ID,你自己修改吧。

Player.rar (12.75 KB)

我们都在路上。。。。。
2012-05-25 13:40
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
仔细查看里面菜单的属性设置,分清那些是弹出式(popup)菜单,哪些是菜单项,菜单项是没有popup属性的。

我们都在路上。。。。。
2012-05-25 13:45
小跳蚤
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:437
专家分:1623
注 册:2011-4-9
收藏
得分:0 
回复 18楼 hellovfp
嗯,太麻烦你了,多谢了,
2012-05-25 13:48
快速回复:VC里怎么添加菜单啊,急 啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013572 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved