MFC中ClistCtrl控件的insertIterm()函数不显示数据
VC MFC列表框(CListBox)控件
列表框控件简单应用重复性的过程我就不详细讲明了,只给出类里面函数的解释。
int CListBox::AddString( LPCTSTR lpszItem );//添加一个项,lpszItem是项文本内容int CListBox::InsertString( int nIndex, LPCTSTR lpszItem );//同上,只不过这个可以指定项位置(索引),由参数nIndex指定int CListBox::GetCurSel( ) const;//获取当前选中项的索引,函数返回索引值int CListBox::GetText( int nIndex,CString &rString ) const;//根据索引获得项文本int CListBox::GetCount( ) const;//获取项数量void CListBox::ResetContent( );//删除列表框所有的项int CListBox::DeleteString( UINT nIndex );//根据项索引从列表框删除一个项int CListBox::SetItemHeight( int nIndex, UINT cyItemHeight );//设置一个项的高度,注意:列表框具有//LBS_OWNERDRAWVARIABLE风格才可以单独设置一个项的高度,否则是所有项的高度自绘列表框这里自绘要达到的效果,就是简单模仿一下QQ界面里类似列表框控件的那种效果,先往对话框里添加列表框控件.然后再改一下列表框的属性,所有者绘制项选择固定,有字符串前面打上勾.接着准备两张位图,一张用于列表框的背景,一张用于项选中时的背景,ID号分别为:IDB_BK、IDB_SELECTED如下两张位图:再导入五张位图(QQ头像),ID号保持默认不变。
从CListBox派生出子类CNewListBox,往CNewListBox添加一个函数,用于画位图,函数如下:void CNewListBox::DrawBK(CDC *pDC, CRect rect, UINT uIDBK){CDC memDC;memDC.CreateCompatibleDC(pDC);//兼容DCCBitmap bmp;bmp.LoadBitmap(uIDBK);//加载位图BITMAP bmpInfo;bmp.GetBitmap(&bmpInfo);//获取位图信息memDC.SelectObject(&bmp);//选入位图pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&memDC,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,SRCCOPY);bmp.DeleteObject();memDC.DeleteDC();}然后给CNewListBox添加WM_ERASEBKGND消息处理函数,这个消息是系统擦除背景时产生。
mfc中listbox控件的addstring -回复
mfc中listbox控件的addstring -回复【MFC中ListBox控件的AddString——一步一步回答】引言:在MFC中,ListBox控件是一种常用的用于显示文本列表的控件。
可以通过向ListBox中添加字符串,实现对列表的动态更新。
本文将一步一步回答关于MFC中ListBox控件的AddString的相关问题,帮助读者更好地理解和应用该功能。
第一步:创建ListBox控件在使用ListBox控件的AddString功能前,首先需要在MFC应用程序的对话框中创建一个ListBox控件。
具体步骤如下:1. 打开MFC应用程序,在资源视图中找到需要添加ListBox控件的对话框。
2. 双击对话框,进入对话框编辑模式。
3. 在工具箱中选择ListBox控件,并在对话框上拖动鼠标,绘制一个适当大小的ListBox控件。
第二步:添加AddString功能在ListBox控件创建完成后,我们需要在代码中添加AddString功能,以实现向ListBox中添加字符串的功能。
具体步骤如下:1. 在对话框的头文件中添加ListBox控件的成员变量,例如`CListBoxm_ListBox`。
2. 打开对话框的源文件,并在OnInitDialog()函数中添加以下代码:m_ListBox.AddString(_T("String 1"));m_ListBox.AddString(_T("String 2"));m_ListBox.AddString(_T("String 3"));在这段代码中,我们通过调用ListBox控件的AddString函数,向ListBox 控件中添加了三个字符串。
其中,"_T()"用于将字符串转换为宽字符字符串。
第三步:运行应用程序完成以上步骤后,我们可以运行应用程序,查看添加AddString功能后的效果。
VCMFC之ListCtrl控件使用经验总结(转)
VCMFC之ListCtrl控件使用经验总结(转)以下未经说明,listctrl默认view 风格为report相关类及处理函数MFC:CListCtrl类SDK:以“ListView_”开头的一些宏。
如ListView_InsertColumn--------------------------------------------------------------------------------1. CListCtrl 风格LVS_ICON: 为每个item显示大图标LVS_SMALLICON: 为每个item显示小图标LVS_LIST: 显示一列带有小图标的itemLVS_REPORT: 显示item详细资料直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”--------------------------------------------------------------------------------2. 设置listctrl 风格及扩展风格LONG lStyle;lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前窗口stylelStyle &= ~LVS_TYPEMASK; //清除显示方式位lStyle |= LVS_REPORT; //设置styleSetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//设置styleDWORD dwStyle = m_list.GetExtendedStyle();dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件m_list.SetExtendedStyle(dwStyle); //设置扩展风格注:listview的style请查阅msdn/library/default.asp?url=/library/ en-us/wceshellui5/html/wce50lrflistviewstyles.asp--------------------------------------------------------------------------------3. 插入数据m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//插入列m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );int nRow = m_list.InsertItem(0, “11”);//插入行m_list.SetItemText(nRow, 1, “jacky”);//设置数据--------------------------------------------------------------------------------4. 一直选中item选中style中的Show selection always,或者在上面第2点中设置LVS_SHOWSELALWAYS--------------------------------------------------------------------------------5. 选中和取消选中一行int nIndex = 0;//选中m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);//取消选中m_list.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);--------------------------------------------------------------------------------6. 得到listctrl中所有行的checkbox的状态m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);CString str;for(int i=0; i<m_list.GetItemCount(); i++){if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i)){str.Format(_T("第%d行的checkbox为选中状态"), i);AfxMessageBox(str);}}--------------------------------------------------------------------------------7. 得到listctrl中所有选中行的序号方法一:CString str;for(int i=0; i<m_list.GetItemCount(); i++){if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED ) {str.Format(_T("选中了第%d行"), i);AfxMessageBox(str);}}方法二:POSITION pos = m_list.GetFirstSelectedItemPosition();if (pos == NULL)TRACE0("No items were selected!\n");else{while (pos){int nItem = m_list.GetNextSelectedItem(pos);TRACE1("Item %d was selected!\n", nItem);// you could do your own processing on nItem here}}--------------------------------------------------------------------------------8. 得到item的信息TCHAR szBuf[1024];LVITEM lvi;lvi.iItem = nItemIndex;lvi.iSubItem = 0;lvi.mask = LVIF_TEXT;lvi.pszText = szBuf;hTextMax = 1024;m_list.GetItem(&lvi);关于得到设置item的状态,还可以参考msdn文章Q173242: Use Masks to Set/Get Item States in CListCtrl/kb/173242/en-us--------------------------------------------------------------------------------9. 得到listctrl的所有列的header字符串内容LVCOLUMN lvcol;char str[256];int nColNum;CString strColumnName[4];//假如有4列nColNum = 0;lvcol.mask = LVCF_TEXT;lvcol.pszText = str;hTextMax = 256;while(m_list.GetColumn(nColNum, &lvcol)){strColumnName[nColNum] = lvcol.pszText;nColNum++;}--------------------------------------------------------------------------------10. 使listctrl中一项可见,即滚动滚动条m_list.EnsureVisible(i, FALSE);--------------------------------------------------------------------------------11. 得到listctrl列数int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();--------------------------------------------------------------------------------12. 删除所有列方法一:while ( m_list.DeleteColumn (0))因为你删除了第一列后,后面的列会依次向上移动。
MFC中ListControl控件的使用及实时显示系统时间的方法
MFC 中 List Control控件的使用及实时显示系统时间的方法 .(一) List Control控件的使用新近开发了一个摄像机标定的MFC 程序,标定完成后期望将求得的摄像机参数直观地显示到应用程序的界面上来。
起初的方案是为每一个参数都建立一个Edit 控件,并对每一个控件设定一个控制变量,将该变量与相应参数对应起来。
这样做是可行的,但当参数众多时比较繁琐。
鉴于此,决定在程序中使用List Control控件,将参数以List 的形式呈现在界面上。
以下是我在基于对话框的MFC 程序中添加List Control 控件的步骤。
1.新加ListControl控件,属性中的style属性页下的View 选择 Report 。
并设置其对应的控制变量如:m_ListCtrl 。
2.初始化,即设置列。
m_ListCtrl.InsertColumn(0," 参数名 "); // 插入列m_ListCtrl.InsertColumn(1," 参数值 ");m_ListCtrl.InsertColumn(2," 备注 "); CRect rect3;m_ListCtrl.GetClientRect(rect3); //获得当前客户区信息m_ListCtrl.SetColumnWidth(0,rect3.Width()/4); //设置列的宽度。
m_ListCtrl.SetColumnWidth(1,rect3.Width()*2/4);m_ListCtrl.SetColumnWidth(2,rect3.Width()/4);这部分初始化操作,最好放在对话框类的OnInitDialog()函数里,自动初始化。
3.插入数据m_ListCtrl.InsertItem(0,"参数1"); //插入第一个数据,即第 0 条数据。
先插入,然后在修改其他的信息。
关于EXCEL插入函数不显示数值解决方法
关于EXCEL插入函数不显示数值解决方法
1. 有时插入函数,显示的不是计算后的数值,而是公式本身。
解决:
1)首先确定所选区域数值及结果将保存区域所在单元格式为“常规”或“数值”
方法:选中单元格,右键-》设置单元格式-》常规或数值
2)再随便选一个空单元格,在该空单元格内输入“1", 注意该空单元格未在数值区,在其它地方选,且单元格式为常规或数值,
3)复制copy该单元格
4)选中所需计算的数值区域(全选),再在菜单-》编辑-》选择性粘贴,弹出”选择性粘贴“窗口,在该窗口中,”运算“一项,选”乘“,再选确定。
5)ok, 再插入函数,如sum 或avg,都没有问题。
6)计算一个结果,选中该结果,按住ctrl键,顺延拖到其它区域,相应计算将被重复。
MFC入门系列ClistCtrl列表控件操作
InsertColumn 插入新列列表视图控件,函数原型如下
int InsertColumn( int nCol,//列从 0 开始 LPCTSTR lpszColumnHeading,//显示的字符串指针 int nFormat = LVCFMT_LEFT,//对齐方式可选 LVCFMT_LEFT、 LVCFMT_RIGHT 或 LVCFMT_CENTER,第一列必须左对齐 int nWidth = -1,//列宽,-1 表示未设置 int nSubItem = -1 );
10、列表排序
11、将关于添加到菜单栏目。
二、项目创建和主页面的布局
1、点击文件>新建>项目
2、选择 MFC 应用程序>修改名称>存储位置
3、选择基于对话框,后面一直下一步或者完成。
4、选择资源视图>My.rc>Dialog>IDD_XXX_DIALOG,双击,弹出右边的对话框
5、选择默认的三个控件,右键删除或者 delete 删除。
11、给列表添加控件名称 在列表控件中右键>添加变量>填入控件名称(我命名为 m_List) ,这样就可以在 程序中引用这个控件了
12、显示第一行的标题这个可以在窗口初始化的过程中实现(图片有误)
还是像 2.10 中一样,在 XXXDlg.cpp>CXXXDlg>OnInitDialog()下,添加程序如下 CRect rect;//实例化 CRect 类 m_List.GetClientRect(rect);//获取列表的工作区间 m_List.InsertColumn(0, L"比赛时间", LVCFMT_LEFT, rect.Width() / 5); m_List.InsertColumn(1, L"主队", LVCFMT_LEFT, rect.Width() / 5);
MFC中CList类使用注意
初学mfc者,往往对CList等mfc的Collect类的使用感到迷惑,在使用中经常会遇到许多问题,导致对vc中的Collect类的使用产生了惧怕。
以下,就个人经历而言,告诉大家如何使用CList。
CList是一个双向链表类。
1、头文件名不可少Clist类定义在Afxtempl.h 头文件中,因此在使用该类时,需要加这个头文件名。
2、理解CList的声明和构造方法CList的声明如下:template< class TYPE, class ARG_TYPE >class CList : public CObject由此,我们知道CList是一个模版类,那么他的两个class是什么意思呢?下面看一个例子:CList<CString ,CString&> list;//链表对象1CList<CString,CString> list2;//链表对象2这里的第一个参数CString是实例化的类型,第二个参数是类的成员函数的参数的调用形式,通常是类型引用,当然也可以是对象,而不是引用。
对象和引用的区别,可以看一下C++基础知识方面的书。
3、使用CList的迭代器迭代器是近年在链表使用中的一个常用技术。
如果大家学过java,就会知道,在java 中,会有专门的一个迭代器类,这个迭代器类用来访问Collect中的数据元素。
在mfc中,在CList中,定义了几个迭代器的函数。
他们方便了我们去访问数据元素。
GetHeadPosition Returns the position of the head element of the list.GetTailPosition Returns the position of the tail element of the list.GetNext Gets the next element for iterating.GetPrev Gets the previous element for iterating.以上是四个迭代器函数。
clist
1。
先来介绍REPORT类型的CListCtrl:首先使用下面的语句设置CListCtrl的style:DWORD SetExtendedStyle( DWORD dwNewStyle );其中LVS_EX_CHECKBOXES 表示添加CheckBoxLVS_EX_FULLROWSELECT 表示选择整行LVS_EX_GRIDLINES 表示添加表格线如果设置了LVS_EX_CHECKBOXES属性,则可以用BOOL GetCheck( int nItem ) const;来得到某一行是否Checked。
可以先用下面的语句来删除以前的东西:for(int k=2;k>=0;k--) //注意要从后往前删,否则出错m_ListCtrl.DeleteColumn(k);m_ListCtrl.DeleteAllItems();用下面的语句新建列:m_ListCtrl.InsertColumn(0,_T("文件名"),LVCFMT_IMAGE|LVCFMT_LEFT);m_ListCtrl.InsertColumn(1,_T("仪器类别"));m_ListCtrl.InsertColumn(2,_T("项目类别"));其中LVCFMT_IMAGE表示可以在第一列加入图标。
如果不要图标可以删去。
然后设置列宽:for(j=0;j<3;j++)m_ListCtrl.SetColumnWidth(j ,100);以下为列表加入图标,如果不需要图标,可以跳过这一步。
注意只在第一次加入,如果多次加入会出错!先在头文件中加入声明:CImageList m_ImageList;这是必要的,如果在cpp的某个函数中加入由于生命期结束,CImageList自动释放,则效果是列表中看不到图标,只看到一个白方块。
下面生成CImageList,并将其绑定到CListCtrl中,这是CImageList中还没有图标,只是一个容器:static int flag=2;if(flag==2){//只调用一次SetImageList,否则出错m_ImageList.Create(128, 128, ILC_COLORDDB|ILC_MASK, 20, 1);m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);}flag=(flag+1)%2;如果CListCtrl已经用过,曾经加过图标进去,这时就要删除上次放进m_ImageList 中的Imagefor(int kk=0;kk<m_ImageList.GetImageCount();kk++)m_ImageList.Remove(k);下面介绍如何向CListCtrl里面加入行,并同时为每一行动态加入图标:假设m_listRowCount为要加入的行数。
afxoleterm()函数用法
afxoleterm()函数用法========一、概述----AFXOLETERM是一个用于处理OLE自动化对象(例如MicrosoftOffice文档)的函数,它提供了一种方便的方法来操作这些对象。
这个函数在MicrosoftFoundationClass(MFC)库中定义,常用于C++应用程序中。
二、函数原型------AFXOLETERM函数的原型如下:```cppvoidAFXAPIAFX_APIAFX_OLETERM(LPUNKNOWNpUnk);```其中,`pUnk`参数是一个指向要终止的OLE自动化对象的指针。
三、用法示例------以下是一个使用AFXOLETERM函数的简单示例:```cpp//假设已经有一个指向OLE自动化对象的指针pDocCOleAutomationObjectpDoc;//...执行一些操作...//终止OLE自动化对象```在上述示例中,首先创建了一个指向OLE自动化对象的指针`pDoc`。
然后,当需要终止该对象时,使用`AFXOLETERM`函数进行操作。
四、注意事项------在使用AFXOLETERM函数时,需要注意以下几点:1.确保传递给函数的`LPUNKNOWN`指针是指向有效的OLE自动化对象的指针。
如果传递了一个无效的指针,可能会导致程序崩溃或出现其他异常。
2.当使用AFXOLETERM函数后,传递给该函数的OLE自动化对象将不再受应用程序的控制。
请确保在调用该函数之前没有任何需要保留的对象或资源。
3.AFXOLETERM函数只会终止当前的OLE自动化对象。
如果你需要停止整个进程中的所有对象,你可能需要使用更高级的技术,如通过控制进程或进程环境。
4.不要在函数中使用保留的宏名称,例如AFX_OLETERM宏可能已被编译器识别为特殊的宏或指令。
确保使用正确的函数名称和参数类型。
5.在使用AFXOLETERM函数之前,确保已经正确初始化了OLE库和相关的COM 组件。
mfc listctrl单元格颜色
mfc listctrl单元格颜色mfc listctrl是一种用于显示列表和图标的控件,常用于Windows应用程序开发中。
其中一个常见的需求是根据数据的值为列表的单元格设置不同的颜色。
在本文中,我们将一步一步地讲解如何使用mfc listctrl控件来设置单元格的颜色。
首先,我们需要创建一个MFC窗口应用程序。
接下来,在资源视图中,找到并双击“Dialog”文件夹中的“Dialog”文件,来创建一个对话框。
在对话框设计器中,右键单击对话框并选择“添加类”,然后在“类名”字段中输入“CMyDlg”,点击“确定”按钮创建一个对话框类。
接下来,打开CMyDlg类的头文件,在其中添加以下成员变量和函数声明:cppclass CMyDlg : public CDialog{...CListCtrl m_listCtrl;void SetCellColor(int row, int col, COLORREF color);};在CMyDlg类的实现文件中,添加下面的代码来创建mfc listctrl控件和设置单元格的默认背景颜色:cppBOOL CMyDlg::OnInitDialog(){CDialog::OnInitDialog();创建mfc listctrl控件m_listCtrl.Create(WS_VISIBLE WS_CHILD LVS_REPORT, CRect(10, 10, 400, 300), this, IDC_LISTCTRL);设置表头m_listCtrl.InsertColumn(0, _T("序号"), LVCFMT_LEFT, 100);m_listCtrl.InsertColumn(1, _T("姓名"), LVCFMT_LEFT, 100);m_listCtrl.InsertColumn(2, _T("成绩"), LVCFMT_LEFT, 100);插入数据m_listCtrl.InsertItem(0, _T("1"));m_listCtrl.SetItemText(0, 1, _T("张三"));m_listCtrl.SetItemText(0, 2, _T("90"));m_listCtrl.InsertItem(1, _T("2"));m_listCtrl.SetItemText(1, 1, _T("李四"));m_listCtrl.SetItemText(1, 2, _T("80"));设置单元格默认背景颜色for (int row = 0; row < m_listCtrl.GetItemCount(); row++) {for (int col = 0; col <m_listCtrl.GetHeaderCtrl()->GetItemCount(); col++){SetCellColor(row, col, RGB(255, 255, 255));}}return TRUE;}void CMyDlg::SetCellColor(int row, int col, COLORREF color) {LVITEM lvItem;lvItem.mask = LVIF_BACKGROUND LVIF_STATE;lvItem.iItem = row;lvItem.iSubItem = col;lvItem.state = 0;lvItem.stateMask = LVIS_SELECTED LVIS_FOCUSED;lvItem.pszText = nullptr;hTextMax = 0;lvItem.iImage = 0;lvItem.lParam = 0;lvItem.crBkCol = color;m_listCtrl.SetItem(&lvItem);}以上代码中,OnInitDialog()函数用于初始化对话框,在其中创建listctrl 控件、设置表头和插入数据。
setitemdata用法
setitemdata用法SetItemData是在MFC中常用的一个函数,可以用来在CListCtrl中储存额外的数据信息。
在开发中,我们常常需要在列表控件中存储一些自定义数据,比如说一个序号、一个字符串、一个颜色等等,并在之后需要使用这些数据。
在这种情况下,我们可以使用SetItemData函数来实现。
下面就让我们来详细的了解一下SetItemData函数的使用方法:一、函数定义BOOL SetItemData(int nItem, DWORD_PTR dwData);该函数的参数含义如下:nItem:CListCtrl控件中的行号,从0开始。
dwData:需要储存的DWORD_PTR类型的数据。
二、功能描述SetItemData函数的作用是为CListCtrl控件中的一行,储存一个DWORD_PTR类型的数据。
这个数据就可以在之后的程序运行中被取出,用于其他用途。
该函数的返回值为TRUE和FALSE,表示是否设置成功。
三、使用方法下面是使用SetItemData函数的具体步骤:1)准备好需要存储的数据,比如说序号、字符串、颜色等等。
2)获取需要存储的项的行号(nItem);3)调用SetItemData函数,将数据存储到该项中。
例如,我们可以在对CListCtrl控件进行初始化的代码中添加如下语句:m_listCtrl.InsertColumn(0, _T("序号"), LVCFMT_LEFT, 50); m_listCtrl.InsertColumn(1, _T("姓名"), LVCFMT_LEFT, 100);m_listCtrl.InsertColumn(2, _T("成绩"), LVCFMT_LEFT, 100);m_listCtrl.InsertItem(0, _T("张三"));m_listCtrl.SetItemData(0, (DWORD_PTR) 1);上面的代码向CListCtrl添加了三个列,并向第一行添加了“张三”这个字符串,同时在该行中存储了一个序号“1”。
关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法【转】
关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法【转】关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法2011-05-29 19:32:06| 分类:默认分类|字号订阅程序需要从数据库某一个活动表中,定时取数据,更新界面的列表显示,比如有20条数据(变化),则这20数据不停的变化,(通过其他程序实现)方案(1),先在列表中查找,后插入比如每条记录都有一个唯一的编号,查询的时候,首先查找该编号的记录在列表中是否存在,如果存在则找到Item后,直接更新各个列的数据,如LVFINDINFO lv;lv.flags=LVFI_STRING;lv.psz=“关键字”;int nItem=m_list.FindItem(&lv,-1);如果Item>0则直接更新数据,用SetItemText(nItem,0,“值1”),。
如果Item<0,则插入一条Item,InsertItem(),然后SetItemText(nItem,0,“”);。
方案2:每次查询之前,把当前的记录全部删掉,然后在依次插入到列表框中。
/////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////其他方法//方法1:采用禁止重绘的方法SetWindowRedraw(hwnd, FALSE);... add the items ...SetWindowRedraw(hwnd, TRUE);方法2:采用锁定窗口,禁止刷新的方法m_list.LockWindowUpdate()m_list.SetItemText()//修改后m_list.UnlockWindowUpdate()方法3:采用虚拟列表技术。
MFCListControl控件添加单元格编辑和单元格下拉列表项以适用于数据库相关操作
MFCListControl控件添加单元格编辑和单元格下拉列表项以适用于数据库相关操作voidCNephoVisionDatabaseDlg::createEdit(NM_LISTVIEW *pEditCtrl, CEdit *createdit, int &Item, int &SubItem, bool &havecreat)//创建单元格编辑框函数//pEditCtrl为列表对象指针,createdit为编辑框指针对象,//Item为创建单元格在列表中的行,SubItem则为列,havecreat为对象创建标准{Item = pEditCtrl->iItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理SubItem = pEditCtrl->iSubItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理createdit->Create(ES_AUTOHSCROLL | WS_CHILD | ES_LEFT | ES_WANTRETURN,CRect(0, 0, 0, 0), this, IDC_EDIT_CREATEID);//创建编辑框对象,IDC_EDIT_CREATEID为控件ID号3000,在文章开头定义havecreat = true;createdit->SetFont(this->GetFont(), FALSE);//设置字体,不设置这里的话上面的字会很突兀的感觉createdit->SetParent(&m_list);//将list control设置为父窗口,生成的Edit才能正确定位,这个也很重要CRect EditRect;m_list.GetSubItemRect(e_Item, e_SubItem, LVIR_LABEL, EditRect);//获取单元格的空间位置信息EditRect.SetRect(EditRect.left+1, EditRect.top+1, EditRect.left + m_list.GetColumnWidth(e_SubItem)-1, EditRect.bottom-1);//+1和-1可以让编辑框不至于挡住列表框中的网格线CString strItem = m_list.GetItemT ext(e_Item, e_SubItem);//获得相应单元格字符createdit->SetWindowText(strItem);//将单元格字符显示在编辑框上createdit->MoveWindow(&EditRect);//将编辑框位置放在相应单元格上createdit->ShowWindow(SW_SHOW);//显示编辑框在单元格上面createdit->SetFocus();//设置为焦点createdit->SetSel(-1);//设置光标在文本框文字的最后}void CNephoVisionDatabaseDlg::distroyEdit(CListCtrl *list,CEdit* distroyedit, int &Item, int &SubItem){CString meditdata;distroyedit->GetWindowT extW(meditdata);list->SetItemText(Item, SubItem, meditdata);//获得相应单元格字符distroyedit->DestroyWindow();//销毁对象,有创建就要有销毁,不然会报错}voidCNephoVisionDatabaseDlg::createCcombobox(NM_LISTVIEW * pEditCtrl, CComboBox *createccomboboxobj, int &Item, int &SubItem, bool &havecreat)//创建单元格下拉列表框函数//pEditCtrl为列表对象指针,createccombobox为下拉列表框指针对象,//Item为创建单元格在列表中的行,SubItem则为列,havecreat为对象创建标准{Item = pEditCtrl->iItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理SubItem = pEditCtrl->iSubItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理havecreat = true;createccomboboxobj->Create(WS_CHILD | WS_VISIBLE | CBS_DROPDOWN | CBS_OEMCONVERT, CRect(0, 0, 0, 0), this, IDC_COMBOX_CREATEID);createccomboboxobj->SetFont(this->GetFont(), FALSE);//设置字体,不设置这里的话上面的字会很突兀的感觉createccomboboxobj->SetParent(&m_list);//将list control设置为父窗口,生成的Ccombobox才能正确定位,这个也很重要CRect EditRect;m_list.GetSubItemRect(e_Item, e_SubItem, LVIR_LABEL, EditRect);//获取单元格的空间位置信息EditRect.SetRect(EditRect.left + 1, EditRect.top + 1, EditRect.left + m_list.GetColumnWidth(e_SubItem) - 1, EditRect.bottom - 1);//+1和-1可以让编辑框不至于挡住列表框中的网格线CString strItem = m_list.GetItemT ext(e_Item, e_SubItem);//获得相应单元格字符createccomboboxobj->SetWindowT ext(strItem);//将单元格字符显示在编辑框上createccomboboxobj->MoveWindow(&EditRect);//将编辑框位置放在相应单元格上createccomboboxobj->ShowWindow(SW_SHOW);//显示编辑框在单元格上面}voidCNephoVisionDatabaseDlg::distroyCcombobox(CListCtrl *list, CComboBox* distroyccomboboxobj, int &Item, int &SubItem) {CString meditdata;distroyccomboboxobj->GetWindowT extW(meditdata);list->SetItemText(Item, SubItem, meditdata);//更新相应单元格字符distroyccomboboxobj->DestroyWindow();//销毁对象,有创建就要有销毁,不然会报错}。
MFC隐藏和显示一个控件的方法
图片点击picture控件响应:
把Picture Control的Notify属性,改为true就行了.
如何使用
比如在对话框上添加定时器
1.添加WM_TIMER消息,会在cpp文件生成
void C***Dlg::OnTimer(UINT nIDEvent)
第一、先获得控件对象。这里用一个EditBox控件为例。
CEdit *edit = (CEdit*)GetDlgItem(IDC_EDIT_XXXX);
其中,IDC_EDIT_XXXX是EditBox的ID,每个控件应该设一个不同且容易辨别的ID。
第二、调用ShowWindow()函数。
edit->ShowWindow(FALSE); //隐藏该控件
{
//其中nIDEvent用来区分定时器
//添加定时器处理函数。
CDialog::OnTimer(nIDEvent);
}
2.在要用的地方设置定时器,SetTimer( 100, 1000, NULL);
其中100为定时器的ID值,1000为定时器的间隔时间。
mfc隐藏和显示一个控件的方法通常我们在用mfc做界面的时候控制控件的出现和隐藏很重要同时这也体现出界面的友好和灵活性
MFC隐藏和显示一个控件的方法
通常,我们在用MFC做界面的时候,控制控件的出现和隐藏很重要,同时也体现出界面的友好和灵活性。
那么,怎样在MFC中实现一个控件的隐藏和显示呢?这里,我就说一个我知道的简单方法。
edit->ShowWindow(TRUE)://显示该控件
另外,还可以利用EnableWindow()函数控制控件的可用与否,但必须要在控件显示了前提下才有效:
关于对话框中显示数据的问题-VC-MFC-界面
本文由faki ne贡献d oc文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
我现在做了一个对话框(包含一个按钮),还写好了一个 TXT文本(有 300行数据,各行均显示5 个数字),我的想法是按下对话框按钮之后,开始读取文本数据,并且一行一行的显示在对话框中,当然,后显示的一行不能覆盖前面显示的一行,要提行显示,并且在显示完之后,通过滚动条查看之前现实的所有数据~ 有大侠建议用r iched it~我还是不太清楚,能详细解释一下吗?10 回复于:2010-08-02 14:35:22往 li stbox(或类似)控件中加一行 10 回复于:2010-08-02 14:39:32 Edi t Box控件(拉的尽量大),选择Multi line, Aut oHScr oll,AutoV Scrol l 风格插数据就O K 10 回复于:2010-08-02 14:42:44 回复于:据要修改不?如果不修改,就可以。
如果要修改,就麻烦点,据要修改不?如果不修改,C listC trl 就可以。
如果要修改,C listC trl 就麻烦点,可以使用C RichE dit。
。
可以满足你的要求。
可以满足你的要求。
现上,的对象。
现上,画一个 List Ctrl,然后给你的 Dial og 榜定一个 Cl istCt rl 的对象。
,取文件,每读取一条记录,就可以了。
取文件,每读取一条记录,给 Cli stCtr l Ins ertIt em 就可以了。
10回复于:2010-08-02 14:46:35主 wang jix 的回复:了一篇求助帖,可能自己没有说清楚,让很多好心解答的大侠都无语了,这次要讲清楚了,请教各位~做了一个对话框(包含一个按钮),还写好了一个 TXT文本(有300 行数据,各行均显示5个数字),我的想法是按下对话框按钮之后,开始读取文本数据,并且一行一行的显示在对显示的一行不能覆盖前面显示的一行,要提行显示,并且在显示完之后,通过滚动条查看之前……i le 类ReadS tring一行一行的读,伪代码 ilefile;n(……,……);s trLin e(_T(""));strTe xt(_T("")); e.Re adStr ing(s trLin e)) += strL ine + _T("\r\n"); e(); emTe xt(ID C_EDI T1, s trTex t); // 编辑框勾上 Mu ltili ne,Au to HS croll/VScr oll 等熟悉 10回复于:2010-08-0214:48:46以实现。
组态王使用常遇到问题
组态王使用常遇到问题1 关于Microsoft Date and Time Picker控件,我按你说的做。
在大部分情况下可以查到数据了。
但是如果是小于10的时间数,就又不对了。
比如在“Microsoft Date and Time Picker"控件中输入 08:15:10 则按钮下命令语言执行完报警查询起始时间=hour1+"时"+minute1+"分"+second1+"秒"; 后得到的是 8时15分10秒而不是所需要的 08时15分10秒。
少了一个0字就又查不到数据了。
请赐教,该如何解决之。
用IF语句做一下判断若小于10时在前面加“0”3 兰精灵关于设置模拟量参数输出不稳定的问题?急!关于设置模拟量参数输出不稳定的问题?我的一段程序使用6.02开发的前端使用的是三菱fx2n,通讯和采集数据都正常,但是我设置一个地址比如“d120”为最大值时,模拟量输出时是最大值但很快就掉到零,然后又恢复到最大值。
输出就不停这样变换,我要的是一个稳定输出最大值,未何会掉到零。
(去掉组态王后,只看plc输出是对的)。
最大值和最大原始值要一样最小值和最小原始值要一样请检查具体设置4 为什么VIEW的时候会提示:“创建协议组件失败”??我从别人这COPY了一个工程,但VIEW的时候会提示:“创建协议组件失败”是的工程不能在线运行!请问有什么方法可以解决这问题?!请安装组态王提供的硬件驱动程序5 怎么不能驱动呀[求助] 我问下啊,下载的驱动程序是哪个版本的呀?我现在用的是6.01版的,我怎么驱动不上啊如果驱动程序不分版本,请问怎么驱动呀?我是双机后,点搜索,可是怎么装不上呢?先把组态王提供的驱动程序包(至少应该包括以下几个文件:××.Dll,DEVLST.DAT,××.REG)拷入除组态王路径外的任一路径下安装驱动程序:“搜索亚控产品”选中搜索到的再安装驱动程序最好安装网站上提供的最新驱动6 如何使用KVDBGrid实现数据查询?当要查询数据库的AlarmDate,输入为:grid.Where=“AlarmDate=”+\\本站点\查询日期7 组态王6.03"创建协议组件失败",是何错误,如何处理!您查看一下您所用的设备的驱动程序是否安装,如果没有安装的话,可能会出现这种情况8 再问一个关于实时报表的问题我按着组态王提供的example自己做的例子,语句和例子里的差不多,但是在运行的时候实时报表无法显示当前时间段里的变量变化情况。
MFC双击List消息响应
MFC双击List消息响应很多时候,我们在用CListCtrl创建一个列表时,需要一个双击列表中某一项的操作响应函数,这时候就需要响应List控件的NM_DBLCLK消息,响应这个消息有两种方法,一种是通过向导添加消息响应函数,另外一种是手动添加消息响应函数。
首先说明通过向导添加消息响应函数。
对于基于对话框的应用程序,或者基类是CListView的类,可以打开类向导,在打开的类向导中的消息一栏即可找到NM_DBLCLK这样一个消息,双击添加消息响应函数,向导会自动为我们建立消息映射,我们只需在对应的消息响应函数OnNMDblclk中添加我们所需要的操作代码即可。
对于继承于CListView的视图类,可在函数操作中定义CListCtrl& m_ListCtrl= GetListCtrl()来获取List控件对象引用,其余操作方法跟基于对话框的List控件操作一样。
DWORD dwStyle = listctr.GetExtendedStyle();dwStyle |= LVS_EX_FULLROWSELECT;// 选?中D某3行D使o1整?行D高?亮¢¨¢(ê?§只?适o¨o 用??与??report 风¤?格?的ì?listctrl)ê?dwStyle |= LVS_EX_GRIDLINES;dwStyle |=LVS_EX_UNDERLINEHOT;dwStyle |= LVS_EX_TWOCLICKACTIVATE;listctr.SetExtendedStyle(dwStyle); //设|¨¨置?列¢D表à¨a风¤?格?通过以上六行代码,即可将列表的风格设置为选中时为高亮状态。
NM_LISTVIEW *pNMListCtrl = (NM_LISTVIEW *)pNMHDR;if(pNMListCtrl->iItem != -1){CListCtrl& m_ListCtrl= GetListCtrl(); // 获?取¨?列¢D表à¨a的ì?控?件tCString str;str = m_ListCtrl.GetItemText(pNMListCtrl->iItem, 0);CMotorDlg dlg(str);dlg.DoModal();}以上语句可判断双击是否在有数据的列表上,并获得被双击的行数iItem和这一行的第几个子项号iSubItem,这样即可快速定位到被选中的地方并可以获得对应的数据。
CImageList使用之CListCtrl中图标选中消失
CImageList使用之CListCtrl中图标选中消失
这两天在CListCtrl中显示图标时正常,但一选中一行该行图标就消失,设置所有state都没用,经朋友小狼帮忙,百度到下文(来自,谢谢作者)
=======================================================
代码如下:
m_lstImg.Create(IMG_WIDTH,IMG_HEIGHT,ILC_COLO RDDB,0,10);
我用CPicture转换过的图像,添加到m_lstImg中,在CListCtrl中显示正常,但在选中的时候就会变成白的,和背景一样,苦苦搜索才发现机关所在
BOOL CImageList::Create( int cx, int cy, UINT nFlags, i nt nInitial, int nGrow );
中的nFlags参数指定要创建的列表中的图像类型,可选项有
ILC_COLOR
ILC_COLOR4
ILC_COLOR8
ILC_COLOR16
ILC_COLOR24
ILC_COLOR32
ILC_COLORDDB
ILC_MASK
我在这里设置成ILC_COLORDDB和ILC_COLOR24都可以
调试会发现用转换过的CBitmap对象调用GetBitmap()返回的BITMAP结构中bmBitsPixel就是24
==========================================================
后记:我使用的是if (m_ImgList.Create(16, 16, ILC_COLOR32, 1, 1) == FALSE) ,难怪!改为ILC_COLOR24就ok了。