100916 中软实训
感觉今天也没有做什么。我就把那个卷烟零售系统的管理界面设计了一下。
今天,我们比昨天进步了。从配合上来说,分工更明确了。我做系统管理界面,小辉做销售前台界面,强强做打印功能,小强做数据库设计,子子做网络传输数据通信功能。
今天明白了在我之前定义的那个全局变量中,是不能够像数组定义一样,直接一步初始化的。如下为错误的方法:
G_pValue->department[20] = {"销售查询分析", "供应商管理", "商品信息",
"商品调价", "库存盘点", "盘点查询", "入库管理",
"销售报表", "进货报表", "库存报表" ,"用户信息管理", "角色管理", "退出"};
老师说,这是因为没有这种重载的方法。今天,学习了那个TreeCtrl控件的使用方法。
真菜,竟然把那个TreeCtrl控件加上去了,却没有给它定义变量,结果运行出错。调试也不太会,只会按F10,按一下F11也是一种在F10无效的时候,可以试试。
// CLeftView 消息处理程序
void CLeftView::InitTreeCtrl()
{
m_treeSearch.SetBkColor(RGB(222,232,240));
m_ImageList.Create(25,25,ILC_COLOR8 | ILC_MASK, 2, 2);
m_ImageList.SetBkColor(::GetSysColor(COLOR_BTNFACE));
m_treeSearch.SetImageList(&m_ImageList,TVSIL_NORMAL);
m_treeSearch.ModifyStyle(0L,TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS);
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
CString st[13]={"销售查询分析", "供应商管理", "商品信息",
"商品调价", "库存盘点", "盘点查询", "入库管理",
"销售报表", "进货报表", "库存报表" ,"用户信息管理", "角色管理", "退出"};
CGlobalValue* g_pValue = CGlobalValue::GetInstance();
// g_pValue->Departments department[14];
for (int i=0; i<13; i++)
{
// g_pValue->Departments[i].department = str[i];
//这里又遇到问题了,不知道怎么在类中定义这个结构体全局变量。
}
HTREEITEM item;
m_treeSearch.DeleteAllItems();
//销售管理
item = m_treeSearch.InsertItem(_T("销售管理"),0,0,TVI_ROOT);
m_treeSearch.InsertItem(_T("销售查询分析"),1,2,item);
m_treeSearch.InsertItem(_T("供应商管理"),1,2,item);
//商品信息管理
item = m_treeSearch.InsertItem(_T("商品信息管理"),0,0,TVI_ROOT);
m_treeSearch.InsertItem(_T("商品信息"),1,2,item);
m_treeSearch.InsertItem(_T("商品调价"),1,2,item);
//仓库管理
item=m_treeSearch.InsertItem(_T("仓库管理"),0,0,TVI_ROOT);
m_treeSearch.InsertItem(_T("库存盘点"),1,2,item);
m_treeSearch.InsertItem(_T("盘点查询"),1,2,item);
m_treeSearch.InsertItem(_T("入库管理"),1,2,item);
//进存销报表
item = m_treeSearch.InsertItem(_T("进存销报表"),0,0,TVI_ROOT);
m_treeSearch.InsertItem(_T("销售报表"),1,2,item);
m_treeSearch.InsertItem(_T("进货报表"),1,2,item);
m_treeSearch.InsertItem(_T("库存报表"),1,2,item);
//人事信息管理
item = m_treeSearch.InsertItem(_T("人事信息管理"),0,0,TVI_ROOT);
m_treeSearch.InsertItem(_T("用户信息管理"),1,2,item);
m_treeSearch.InsertItem(_T("角色管理"),1,2,item);
//系统
item = m_treeSearch.InsertItem(_T("系统") ,0 ,0 ,TVI_ROOT);
m_treeSearch.InsertItem(_T("退出") ,1 ,2 ,item);
//设置OutlookView的布局
this->MoveWindow(0 ,0 ,270, 605 ,TRUE);
m_treeSearch.SetWindowPos(NULL ,0 ,0 ,270, 605 ,SWP_SHOWWINDOW);
}
void CLeftView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// TODO: 在此添加专用代码和/或调用基类
InitTreeCtrl();
}
void CLeftView::OnNMClickTreeadmin(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
HTREEITEM hTreeItem = m_treeSearch.GetSelectedItem();
CString str = m_treeSearch.GetItemText(hTreeItem);
*pResult = 0;
}
还有给TreeCtrl增加数据结构的方法,这是一个小技巧。
/*
HTREEITEM hRoot, hCur; //树形控件项目句柄
TV_INSERTSTRUCT TCItem; //插入数据项数据结构
TCItem.hParent = TVI_ROOT; //增加根项
TCItem.hInsertAfter = TVI_LAST; //在最后项之后
TCItem.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
//设屏蔽
TCItem.item.pszText = "数据选择";
TCItem.item.lParam = 0; //序号
TCItem.item.iImage = 0; //正常图标
TCItem.item.iSelectedImage = 1; //选中时的图标
hRoot = m_treeSearch.InsertItem(&TCItem);
char *strRoot[6] = {"销售管理", "商品信息管理", "仓库管理", "进存销报表", "人事信息管理", "系统"};
char *
for (int i=0; i<5; i++)
{
TCItem.hParent = hRoot;
// TCItem.item.pszText=
}
*/
下面这两个函数的用法值得积累一下。Wsprintf、MessageBox
/*
// LONG IDs = m_treeSearch.GetItemData(hTreeItem);
char temp[100];
wsprintf(temp, "%s", s1);//
MessageBox(temp, "选择信息");
*/
做软件还是要多动脑筋呀。那个子子,真的挺会动脑筋的,他一看到我那个对话框中有一个颜色范围显示窄了,他就说,你知道哪个函数是调宽度的吗?我一想,恩,还真有道理。一查一改,就对了。真强,我还没有这种找错的想法。我当时只想到去一个函数一个函数地查。。。。还想问老师。后来,子子来了,就问他了。他一下子就把那个登录框弹出,点击登录后进入侵害界面的对话框做出来了。解决了小辉一直埋怨苦恼的问题。还真行。