vc c++项目开发全程实录 第5章 餐饮管理系统中这段函数是什么功能
发表在C语言图书答疑 2010-07-18
是否精华
版块置顶:
CTime Time;
Time = CTime::GetCurrentTime();
CString Str = Time.Format("%Y-%m-%d");
m_Imagelist.Create(32,32,ILC_COLOR24|ILC_MASK,1,1);
m_Imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_login));
m_Imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_open));
m_Imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_add));
m_Imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_pay));
m_Imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_rishouru));
m_Imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_reg));
m_Imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_cancel));
UINT Array[7];
for(int i=0;i<7;i++)
{
Array[i]=9000+i;------------------------------------------1
}
m_Toolbar.Create(this);
m_Toolbar.SetButtons(Array,7);
m_Toolbar.SetButtonText(0,"系统登录");
m_Toolbar.SetButtonText(1,"开台");
m_Toolbar.SetButtonText(2,"加减菜");
m_Toolbar.SetButtonText(3,"顾客买单");
m_Toolbar.SetButtonText(4,"本日收入");
m_Toolbar.SetButtonText(5,"员工注册");
m_Toolbar.SetButtonText(6,"退出系统");
m_Toolbar.GetToolBarCtrl().SetButtonWidth(60,120);
m_Toolbar.GetToolBarCtrl().SetImageList(&m_Imagelist);
m_Toolbar.SetSizes(CSize(70,60),CSize(28,40));

for(i=0;i<4;i++)
{
Array[i]=10000+1;--------------------------------------2
}
m_Statusbar.Create(this);
m_Statusbar.SetIndicators(Array,4);
for(int n=0;n<3;n++)
{
m_Statusbar.SetPaneInfo(n,Array[n],0,80);
}
m_Statusbar.SetPaneInfo(1,Array[1],0,200);
m_Statusbar.SetPaneInfo(2,Array[2],0,800);
m_Statusbar.SetPaneText(2,"当前时间"+Str);
m_Statusbar.SetPaneText(0,"餐饮管理系统");
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

m_Toolbar.GetToolBarCtrl().EnableButton(IDB_kaitai,false);
m_Toolbar.GetToolBarCtrl().EnableButton(IDB_pay,false);
m_Toolbar.GetToolBarCtrl().EnableButton(IDB_rishouru,false);
m_Toolbar.GetToolBarCtrl().EnableButton(IDB_reg,false);
m_Toolbar.GetToolBarCtrl().EnableButton(IDB_add,false);
CMenu* pMenu=GetMenu();
pMenu->GetSubMenu(1)->EnableMenuItem(0,MF_BYPOSITION | MF_GRAYED);
pMenu->GetSubMenu(1)->EnableMenuItem(1,MF_BYPOSITION | MF_GRAYED);
pMenu->GetSubMenu(2)->EnableMenuItem(0,MF_BYPOSITION | MF_GRAYED);
pMenu->GetSubMenu(2)->EnableMenuItem(1,MF_BYPOSITION | MF_GRAYED);
pMenu->GetSubMenu(2)->EnableMenuItem(2,MF_BYPOSITION | MF_GRAYED);
pMenu->GetSubMenu(3)->EnableMenuItem(0,MF_BYPOSITION | MF_GRAYED);
pMenu->GetSubMenu(3)->EnableMenuItem(1,MF_BYPOSITION | MF_GRAYED);
CString Sql;
Sql="select * from shouru where 时间='"+Str+"'";
m_pRs=theApp.m_pCon->Execute((_bstr_t)Sql,NULL,adCmdText);
if(m_pRs->adoEOF)
{

theApp.m_pCon->Execute((_bstr_t)("insert into shouru(时间)values('"+Str+"')"),NULL,adCmdText);
}

 1@          1处的消息响应能在resoure.h中查到、
请问这里的消息响应是人为添加的还是编译后生成的。

#define IDB_login                       9000
#define IDB_kaitai                      9001
#define IDB_add                         9002
#define IDB_pay                         9003
#define IDB_rishouru                    9004
#define IDB_reg                         9005
#define IDB_cancel                      9006

2@        但是2处的10001---10004是起什么作用的啊??

3@        这里的消息响应函数怎么不用classwizard添加,而且这里的消息映射没有标号(数字的列入1001.。。等等)
           ON_COMMAND(ID_MENU_login, OnMENUlogin)
ON_COMMAND(ID_MENU_kaitai, OnMENUkaitai)
ON_COMMAND(ID_MENU_jiezhang, OnMENUjiezhang)
ON_COMMAND(IDB_kaitai, OnBUTTONkaitai)
ON_COMMAND(IDB_pay, OnBUTTONjiezhang)
ON_COMMAND(ID_MENU_jiesuan, OnMENUjiesuan)
ON_COMMAND(IDB_rishouru, OnBUTTONrishouru)
ON_COMMAND(ID_MENU_yuangong, OnMENUyuangong)
ON_COMMAND(IDB_reg, OnBUTTONzhuce)
ON_COMMAND(ID_MENU_about, OnMENUabout)
分享到:
精彩评论 8
mhnh101
学分:0 LV1
TA的每日心情
开心
2023-04-30 07:49:16
2010-07-18
沙发
           CMenu* pMenu=GetMenu();
pMenu->GetSubMenu(1)->EnableMenuItem(0,MF_BYPOSITION | MF_GRAYED);---------------1
pMenu->GetSubMenu(1)->EnableMenuItem(1,MF_BYPOSITION | MF_GRAYED);
pMenu->GetSubMenu(2)->EnableMenuItem(0,MF_BYPOSITION | MF_GRAYED);
pMenu->GetSubMenu(2)->EnableMenuItem(1,MF_BYPOSITION | MF_GRAYED);
pMenu->GetSubMenu(2)->EnableMenuItem(2,MF_BYPOSITION | MF_GRAYED);
pMenu->GetSubMenu(3)->EnableMenuItem(0,MF_BYPOSITION | MF_GRAYED);
pMenu->GetSubMenu(3)->EnableMenuItem(1,MF_BYPOSITION | MF_GRAYED);
为什么程序执行到这里会出现错误------------单步执行(1处);这理的函数是干什么的GetSubMenu(1)。。   EnableMenuItem??
8031
学分:0 LV1
2010-07-19
板凳
Array[i]=9000+i;------------------------------------------1

Array[i]=10000+1;--------------------------------------2

如果是系统生成的,就说明,你添加了相应的菜单项或一些命令控件,这些ID值是控件或菜单的ID值,
因为工具栏所执行的命令都能通过菜单(或控件)执行
也可以是开发人员自己定义,然后针对您所添加的这个ID添加实现函数,函数的声明和实现,以及宏的映射都需要手动添加

10001---10004 只是命令ID值,系统根据该ID指来执行相应的函数

3@ 都有编号的,如果没有是编译不过去的,你可以通过在ID_MENU...上右键菜单->查看声明,来查看
从词面上可以看出ID_MENU_login是菜单的ID值,你可以看看有没有相应的宏定义 #define
EnableMenuItem是修改菜单属性的,可以将菜单设置为灰色,就是不可用的那种状态
GetSubMenu是获取子菜单,0是获取第一个子菜单,1是第二个 
GetMenu获取的是没有命令ID的那个菜单,你可以看一下菜单资源,也就是最顶层的菜单项
然后用GetSubMenu分别获取下面的子菜单
mhnh101
学分:0 LV1
TA的每日心情
开心
2023-04-30 07:49:16
2010-07-20
地板
我在调试程序时

CMenu* pMenu=GetMenu();
pMenu->GetSubMenu(1)->EnableMenuItem(0,MF_BYPOSITION | MF_GRAYED);---------------1
pMenu->GetSubMenu(1)->EnableMenuItem(1,MF_BYPOSITION | MF_GRAYED);
pMenu->GetSubMenu(2)->EnableMenuItem(0,MF_BYPOSITION | MF_GRAYED);
pMenu->GetSubMenu(2)->EnableMenuItem(1,MF_BYPOSITION | MF_GRAYED);
pMenu->GetSubMenu(2)->EnableMenuItem(2,MF_BYPOSITION | MF_GRAYED);
pMenu->GetSubMenu(3)->EnableMenuItem(0,MF_BYPOSITION | MF_GRAYED);
pMenu->GetSubMenu(3)->EnableMenuItem(1,MF_BYPOSITION | MF_GRAYED);
为什么程序执行到这里会出现错误------------单步执行(1处);

菜单不能加载到主界面上?   请指教
mhnh101
学分:0 LV1
TA的每日心情
开心
2023-04-30 07:49:16
2010-07-20
4L
在消息响应中
           ON_COMMAND(IDB_kaitai, OnBUTTONkaitai)
ON_COMMAND(IDB_pay, OnBUTTONjiezhang)
怎么在点击工具栏  加减菜对应的类为 IDD_kaitaidlg-----(1)怎么在消息响应中变为IDB_kaitai??,对应的的消息为OnBUTTONkaitai---问的是对应关系的确定,为什么相对应??。
 顾客买单对应的类为IDD_jiezhangdlg-----(2)怎么在消息响应中变为IDB_pay??
消息映射的另外定义为::
           afx_msg void OnBUTTONkaitai();-----(3)对应一个函数对吗??
afx_msg void OnBUTTONjiezhang();

希望给与解答
8031
学分:0 LV1
2010-07-21
5L
为什么程序执行到这里会出现错误--请问您修改过代码吗?工程类型是否为debug
debug模式才可以调试
对话框工程加载菜单用setmenu 你搜索一下该函数,或查看一下对话框的属性是否设置了菜单
-----(1)怎么在消息响应中变为IDB_kaitai??,对应的的消息为
ON_COMMAND是MFC的消息宏,对应关系由MFC负责处理,可以参考MFC提供的伪代码,MFC最终
也会将对应关系转换为回调函数wndproc的形式
-----(2)怎么在消息响应中变为IDB_pay
这个问题没明白什么意思
“顾客买单对应的类为IDD_jiezhangdlg”这句话描述有错误,IDD_jiezhangdlg是资源ID不是类,希望对您理解有帮助
-----(3)对应一个函数对吗??
afx_msg void OnBUTTONkaitai(); 这是MFC声明函数的格式,说明可以调用该函数
mhnh101
学分:0 LV1
TA的每日心情
开心
2023-04-30 07:49:16
2010-07-21
6L
        消息响应中变为IDB_pay-------------对应的resource.h中的资源ID为9001;是不是IDB_pay对应的ID为9001,对应的消息函数为OnBUTTONjiezhang,所以调用ON_COMMAND(IDB_pay, OnBUTTONjiezhang)时点击IDB_pay调用OnBUTTONjiezhang函数,
能不能理解为
afx_msg void OnBUTTONjiezhang();定义一个函数;ON_COMMAND(9001, OnBUTTONjiezhang)调用这个函数。-----------(1)


        例如ON_COMMAND(ID_MENU_yuangong, OnMENUyuangong)指用ID_MENU_yuangong对应的resource.h中的资源ID调用函数OnMENUyuangong()-------------------------------------(2)

        怎么在点击工具栏 加减菜对应的类为 IDD_kaitaidlg怎么在消息响应中变为IDB_kaitai??----------我的意思是IDB_kaitai没有在函数中定义,只是在resource.h中有定义,怎么把IDB_kaitai和工具栏的图标绑定在一起的。----------(3)即点击工具栏的图标,传递出IDB_kaitai对应的resource.h中的ID号码,调用ON_COMMAND(IDB_kaitai, OnBUTTONkaitai)中的函数OnBUTTONkaitai。

在对话框的属性是设置了菜单后程序正常运行了。
期望能指教
stabber
学分:0 LV1
2010-07-22
7L
我觉得你还是先找一本基础入门的书简单的学习一下比较好,这样阅读代码的时候才能够知道实现的是什么功能
mhnh101
学分:0 LV1
TA的每日心情
开心
2023-04-30 07:49:16
2010-07-22
8L
IDB_kaitai是不是在工具栏导入图标icon时自动产生的,它产生的浅规则是什么
首页上一页 1 下一页尾页 8 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照