酒店点餐系统开发详解(六)

——疑难解决

在本系统的详细设计过程中遇到了很多的麻烦,经过分析、思考和网上搜索等方式将所有问题均给一一化解了,现与大家分享以共勉。

1、CDataGrid的使用

之所以使用CDataGrid完全是为了偷懒,不过它却让我差点崩溃,因为它并没有想象中的那么方便,关键是网上或书上关于它的资料都少得可怜。幸运的是本系统对其要求不高,因而被我巧妙地化解了。

我看中CDataGrid在使用时可以根据所查询属性的不同而自动更换表中的列名,因为本系统涉及不同的查询条件返回的是不同的属性列(列名称不同)。

1)得到某单元格值

//获取所选项信息

VARIANT index;

CColumns columns;

CColumn column;

index.vt = VT_INT;

columns = grid.GetColumns();  //得到当前选中行的列集

long nCount = columns.GetCount(); //列数

index.lVal = 0; //dishid所在位置

column = columns.GetItem(index);//顺序得到单元格的值

CString dishid = column.GetText();

index.lVal = 2; //cookid所在位置

column = columns.GetItem(index);

CString cookid = column.GetText();

2)在使用中我发现当单击CDataGrid控件的某一行然后用CDataGrid table.GetRow()获取所选行时,并不能得到正确的行号,然而双击所选行时能够得到正确的行号,所以我采取单击变双击的方式解决了这个问题。

添加单击CDataGrid控件消息ON_EVENT(CClientTerminalDlg, IDC_MENU_DATAGRID, -600 /* Click */, OnClickMenuDatagrid, VTS_NONE)和双击CDataGrid控件消息ON_EVENT(CClientTerminalDlg, IDC_MENU_DATAGRID, -601 /* DblClick */, OnDblClickMenuDatagrid, VTS_NONE),函数实现如下:

//需双击才能获取到所选行号,显示图片

void CClientTerminalDlg::OnDblClickMenuDatagrid()

{

DisplayDishPicture(m_MenuDataGrid); //显示图片

}

//在单击事件中模拟双击事件,以实现图片的正确更新

void CClientTerminalDlg::OnClickMenuDatagrid()

{

//m_ClickCount是为了防止不断地发送单击消息

if(m_MenuClickCount == 0){

m_MenuClickCount = 1; //立即阻止下次单击事件发送单击消息

//发送点击消息

mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);

mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

//开启定时器10ms后恢复该操作

SetTimer(1,10,NULL);

}

}

2、CListCtrl中加入CComboBox控件

1)添加类成员变量CComboBox m_EditComboBox; 和 CListCtrl m_ScoreList;然后在初始化函数中加入如下函数:

m_EditComboBox.SetParent(&m_ScoreList);确保CComboBox的坐标是相对于列表控件而言的

2)添加单击CListCtrl消息,单击消息对应函数实现如下:

void CScoreDlg::OnClickScoreList(NMHDR* pNMHDR, LRESULT* pResult)

{

// TODO: Add your control notification handler code here

POINT PT;

GetCursorPos(&PT);

m_ScoreList.ScreenToClient(&PT);

LVHITTESTINFO hitInfo;

hitInfo.pt = PT;

m_ScoreList.SubItemHitTest(&hitInfo);

if(hitInfo.flags & LVHT_ONITEMLABEL){ //判断是否单击在文本上

CRect rect;

m_ScoreList.GetSubItemRect(hitInfo.iItem,hitInfo.iSubItem,LVIR_BOUNDS,rect);

if (hitInfo.iSubItem == 0){

rect.right=rect.left+m_ScoreList.GetColumnWidth(0);

}

else if(hitInfo.iSubItem == 4){ //若选中的为评分项则显示下拉列表框

m_SelectedCol = hitInfo.iSubItem;

m_SelectedRow = hitInfo.iItem;

m_EditComboBox.MoveWindow(&rect,TRUE);

m_EditComboBox.ShowWindow(SW_NORMAL);

m_EditComboBox.BringWindowToTop();

m_EditComboBox.SetFocus(); //使组合框聚焦

m_EditComboBox.SetCurSel(0); //默认选项

}

}

*pResult = 0;

}

3)添加控件CComboBox失去焦点时的处理函数如下:

void CScoreDlg::OnKillfocusEditCombo()

{

POINT pt;

GetCursorPos(&pt);

m_ScoreList.ScreenToClient(&pt);

CRect rect;

m_ScoreList.GetSubItemRect(m_SelectedRow,m_SelectedCol,LVIR_BOUNDS,rect);

if(!rect.PtInRect(pt)){ //如果单击在一个节点文本区域内

CString score;

m_EditComboBox.GetWindowText(score);

m_ScoreList.SetItemText(m_SelectedRow,m_SelectedCol,score);

m_EditComboBox.ShowWindow(SW_HIDE);//将组合框隐藏

}

}

3、设置Static控件背景透明

添加消息ON_WM_CTLCOLOR,在函数中添加如下代码:

HBRUSH CScoreDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: Change any attributes of the DC here

if(nCtlColor == CTLCOLOR_STATIC){ //设置静态文本框背景为透明

pDC->SetBkMode(TRANSPARENT);

return (HBRUSH)::GetStockObject(NULL_BRUSH);

}

// TODO: Return a different brush if the default is not desired

return hbr;

}

4、CEdit中将光标定位到字符串结尾

//将光标移动到编辑框中字符结尾处

((CEdit*)GetDlgItem(IDC_COOKID))->SetSel(-1);

((CEdit*)GetDlgItem(IDC_COOKID))->SetFocus();

5、远程连接数据库设置

1)SQL Server 2005设置

http://www.webjx.com/database/sqlserver-7123.htm

2)SQL Server 2000 设置

http://soft.zdnet.com.cn/software_zone/2008/0922/1144458.shtml

6、数据库连接字符串设置

http://blog.csdn.net/jyh_jack/archive/2008/04/07/2257512.aspx

http://www.connectionstrings.com/sqlserver

7、位图的无损伸缩

http://www.codeguru.com/cpp/g-m/bitmap/specialeffects/article.php/c4897/Accelerated-Smooth-Bitmap-Resizing.htm

8、对话框中添加背景图片

添加ON_WM_ERASEBKGND消息,函数实现如下:

BOOL CXXDlg::OnEraseBkgnd(CDC* pDC)

{

//背景图片

//获得客户区尺寸

CRect rect;

GetClientRect(&rect);

//加载背景位图

CBitmap bitmap;

bitmap.LoadBitmap(IDB_BMP_SCORE_BG);//图片ID

BITMAP bmp;

bitmap.GetBitmap(&bmp);

//创建内存DC

CDC dc;

dc.CreateCompatibleDC(pDC);

//选择位图

CBitmap* pOldBitmap = dc.SelectObject(&bitmap);

//绘制位图

// pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);

pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);

//恢复原有位图

dc.SelectObject(pOldBitmap);

return TRUE;

}

9、在VC中实现淡入淡出的启动画面

http://group.qqread.com/thread-45110-1-1.html

10、添加背景音乐

http://topic.csdn.net/u/20080524/16/36c1f481-a266-4c68-8cc7-816b1594e585.html

11、同一时间仅显示一个非模态对话框

1)添加类成员变量CXXDlg *m_dlg;

2)如下进行调用

if(m_dlg->GetSafeHwnd() == NULL){

m_dlg->Create(IDD_ACCOUNT_MANAGE);

m_dlg->ShowWindow(SW_SHOW);

}

12、在Dialog中使用Menu和Toolbar

http://www.vckbase.com/document/viewdoc/?id=265

好了,就先总结到这儿吧!接下来将进入酒店点餐系统2.0版的开发,敬请期待!!!

源代码下载地址:http://download.csdn.net/source/2406335 标题有误,请见谅...

酒店点餐系统开发详解(六)相关推荐

  1. 酒店点餐系统开发详解(三)

    酒店点餐系统开发详解(三) --通信模块设计 注:本系统通信实现采用CSocket类 在上一节的数据流图中可以看到顾客(点餐)终端和厨师(任务分配)终端之间有数据的流动,这看起来好像二者是直接进行的通 ...

  2. 酒店点餐系统开发详解(一)

    酒店点餐系统开发详解 --前言 信息管理系统老师让我们分组做一个信息管理系统,以让我们熟悉一下项目开发的过程,并以此锻炼自己的能力.说实话,刚开始做的时候也感觉很没底,因为我不知道这个项目最终能否成功 ...

  3. 酒店点餐系统开发详解(二)

    酒店点餐系统开发详解 --系统分析 一个好的系统,必须要进行完善而且全面的系统分析.系统分析做好了,那就能够指导项目良好地发展下去.当然,系统分析需要以需求分析为基础,不过,在本项目中并未做仔细的需求 ...

  4. 酒店点餐系统开发详解(五)

    酒店点餐系统开发详解(五) --任务分配设计 本系统从公平的角度,采取"先来先服务"原则为厨师分配做菜任务,但是顾客在点菜时可能出现指定了某个厨师做某道菜的情况,所以本系统针对未指 ...

  5. 酒店点餐系统开发详解(四)

    酒店点餐系统开发详解(四) --数据库模块设计 在本系统中每个模块与数据库的一系列查询.插入.删除等操作是通过类CDatabaseOperation进行的,所有的数据库操作都封装在这个类中.数据库功能 ...

  6. EasyPR中文开源车牌识别系统 开发详解

     在上篇文档中作者已经简单的介绍了EasyPR,现在在本文档中详细的介绍EasyPR的开发过程. 正如淘宝诞生于一个购买来的LAMP系统,EasyPR也有它诞生的原型,起源于CSDN的taotao ...

  7. EasyPR--中文车牌识别系统 开发详解(开源)

    人工智能AI与大数据技术实战  公众号: weic2c 一个开源的中文车牌识别系统, Git地址为:https://github.com/liuruoze/EasyPR. 我给它取的名字为EasyPR ...

  8. 酒店预约APP软件开发详解

    酒店预约APP软件开发主要是对于用户的需求来出示方便快捷服务项目,完成用户在手机端操纵方式,达到用户在操纵端.管理方法端.营销推广端这些平台的多样化更新扩展. 1.新闻资讯信息消息推送 根据剖析用户针 ...

  9. [编程思想]中控系统开发详解

    1.开发目的:多计算机.多投影机或者其他网络设备的开启关闭控制 2.开发目标:单台设备控制及状态显示:多台设备控制:分区域控制等等 3.开发硬件需求:基于本地局域网,电脑,投影机,交换机,网络继电器, ...

最新文章

  1. 通用权限管理系统组件 中集成多个子系统的单点登录(网站入口方式)附源码
  2. uvalive5090(三维凸包)
  3. VTK:可视化之TextureMapImageData
  4. 【内核驱动】 内核驱动中添加系统调用
  5. java中的工厂模式_深入理解Java的三种工厂模式
  6. 命令 启动顺序_笔记一: 启动选项与系统变量
  7. 拖动滑块拼图背景图没显示_计划B? 那是计划N…没什么。 拼图于2015年问世
  8. 自学成才翁_仅因为您是自学成才,并不意味着您必须独自学习。
  9. 人才盘点最佳实践:45页人才盘点的流程与方法,管理梯队模型
  10. 动态执行javascript代码
  11. 金蝶K3系统BOM批量导入操作指南
  12. EDI 公开课:EDI 系统集成之数据库方案
  13. 用usbserver实现加密狗共享
  14. 阿里云ECS云服务器快照
  15. dhcp服务器怎样自动,dhcp服务器设置教程【图文教程】
  16. 坐飞机时为什么不能说一路顺风
  17. uniapp中页面白屏问题
  18. lzx: ssh: connect to host lzx port 22: Connection timed out-------hadoop
  19. 如何用PDF编辑器将PDF文件拆分
  20. 引入微信支付Java SDK WxPayAPI_JAVA.zip

热门文章

  1. 指代消解or共指消解任务主要论文
  2. JAVA安全编码规范
  3. 专利申请显示:苹果正在开发自动驾驶汽车无线充电技术
  4. 米家的扫地机器人是灰色_米家扫地机器人怎么清理灰尘盒
  5. 将C语言宏定义转换成字符串!
  6. python零基础入门教程百度云-小甲鱼零基础入门学习Python百度云下载 | 宅男君
  7. Linux三剑客与管道及正则
  8. 基于射频CC2520 实现的ZigBee 通信设计
  9. hdu2520 我是菜鸟,我怕谁
  10. Python之turtl库-玫瑰花