MFC使用n_Row = pNMListView->iItem;查询光标所选的行数时 反馈的是n_Row=-1?

作者&投稿:子丰皇 (若有异议请与网页底部的电邮联系)
如何获取ListView中Item的行数~

行数 int nItemNum = m_list.GetItemCount();
列数 int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();
1、 ListCtrl添加左键单击(NM_CLICK)函数(这个很重要)。
2、 ListCtrl风格设置(一般是网格)。
一般listctrl默认view风格为report,一般在OnInitDialog函数中:
LONG m_lStyle;
m_lStyle = GetWindowLong( m_list.m_hWnd , GWL_STYLE);//获取当前窗口style
m_lStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
m_lStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
//m_lStyle |= LVS_SHOWSELALWAYS;//一直选中item
m_list.SetExtendedStyle( m_lStyle );//设置扩展风格
3、 插入数据
一般在OnInitDialog函数中:
//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.InsertItem(1,"12");
m_list.SetItemText(nRow, 1, "jacky");//设置数据
m_list.SetItemText(nRow+1, 1, "James");
4、 得到listctrl中所有行的checkbox的状态
在OnNMClickList1函数中:
方法一:
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+1);
AfxMessageBox(str);
}
}
方法二:
POSITION pos = m_list.GetFirstSelectedItemPosition();
CString str;
if (pos == NULL)
TRACE0("No items were selected!/n");
else
{
while (pos)
{
int nItem = m_list.GetNextSelectedItem(pos);
str.Format(_T("选中了第%d行"), nItem+1);
AfxMessageBox(str);
}
}
5、 删除所有列(即清空)
while ( m_list.DeleteColumn (0));
6、 得到单击的listctrl的行列号
// 方法一:
DWORD dwPos = GetMessagePos(); //返回表示屏幕坐标下光标位置的长整数值
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
m_list.ScreenToClient(&point); //把屏幕上指定点的屏幕坐标转换成用户坐标
LVHITTESTINFO lvinfo;
lvinfo.pt = point;
lvinfo.flags = LVHT_ABOVE;
int nItem = m_list.SubItemHitTest(&lvinfo);
if(nItem != -1)
{
CString strtemp;
strtemp.Format("单击的是第%d行第%d列", lvinfo.iItem, lvinfo.iSubItem);
AfxMessageBox(strtemp);
}
// 方法二:
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem != -1)
{
CString strtemp;
strtemp.Format("单击的是第%d行第%d列", pNMListView->iItem, pNMListView->iSubItem);
AfxMessageBox(strtemp);
}
7、 右键点击listctrl的item弹出菜单
在资源里画菜单
添加listctrl控件的NM_RCLICK消息相应函数
//右键单击的函数
void CListCtrlDlg::OnNMRclickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem != -1)
{
DWORD dwPos = GetMessagePos(); //返回表示屏幕坐标下光标位置的长整数值
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
CMenu menu;
VERIFY( menu.LoadMenu( IDR_MENU1 ) );
CMenu* popup = menu.GetSubMenu(0); //取得被指定菜单激活的下拉式菜单或子菜单的句柄
ASSERT( popup != NULL );
popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x, point.y, this ); //在指定位置显示快捷菜单,并跟踪菜单项的选择
}
*pResult = 0;
}

  1

  ClistCtrl有四种样式,ICON,small icon,list,report,其中前三种一般使用的都很少,report是ClistCtrl的重点也是他的精髓,当然这四种样式的样式图例,大家可以参照windows的资源管理器,大图标,小图标,列表和详细信息。现在先说一下前三种的使用方法。
  2
  前三种ICON,small icon,list都是已图标形式存在,那么他的重点也就是怎么加载图标
  首先创建CImageList的对象m_ImageList1
  //创建大图标,Craete创建一个图标列表,当然大小可以随意设置,这里采用的是加载ICON
  if ( m_ImageList1.GetSafeHandle() == NULL )
  {
  m_ImageList1.Create(80,80,ILC_MASK|ILC_COLOR32, 0, 0);
  m_ImageList1.Add(AfxGetApp()->LoadIcon(IDR_MAINFRAME));
  m_ListCtrl1.SetImageList(&m_ImageList1, LVSIL_NORMAL);
  }
  //加载BMP图片
  if (m_StatusImage.GetSafeHandle()==NULL)
  {
  CBitmap Image;
  BITMAP ImageInfo;
  Image.LoadBitmap(IDB_SERVER_LIST_IMAGE);
  Image.GetBitmap(&ImageInfo);
  m_StatusImage.Create(18,ImageInfo.bmHeight,ILC_COLOR16|ILC_MASK,0,0);
  m_StatusImage.Add(&Image,RGB(255,0,255));
  }
  m_ListCtrl2.SetImageList(&m_StatusImage,LVSIL_SMALL);
  m_ListCtrl3.SetImageList(&m_StatusImage,LVSIL_SMALL);
  //插入节点
  for (int i=0;i<40;i++)
  {
  m_ListCtrl1.InsertItem(i, TEXT("Item"));
  m_ListCtrl2.InsertItem(i, TEXT("Item"));
  m_ListCtrl3.InsertItem(i, TEXT("Item"));
  }
  到这里,我们就添加了图标形式的节点,现在在说一下Report的操作方法,当然下面的操作也适用于图标样式,关于ClistCtrl的成员函数讲解,参照MSDN,这里只说明使用方法
  END
  Report风格的CListCtrl的使用
  1
  创建列,也就是为标头控件添加节点
  m_ListCtrl4.InsertColumn( 0, TEXT("Main_1"), LVCFMT_LEFT, 70 );
  m_ListCtrl4.InsertColumn( 1, TEXT("Main_2"), LVCFMT_LEFT, 70 );
  m_ListCtrl4.InsertColumn( 2, TEXT("Main_3"), LVCFMT_LEFT, 70 );
  2
  设置风格
  之前我们修改窗口属性的时候都是使用的SetWindowLong函数或者ModifyStyle,这次CListCtrl为我们提供一个新函数,SetExtendedStyle,当然通过它只能修改扩展属性
  支持的扩展属性很多,但是常用的就几个而已,其他的可以参照msdn,这里讲解两个常用的样式
  LVS_EX_CHECKBOXES:将CListCtrl添加check控件LVS_EX_FULLROWSELECT:未添加该样式,选择一个节点,只能选中节点的第一个元素,而这个属性则可以让选择节点的时候选中整行
  当然这些属性可以多个同时存在
  m_ListCtrl4.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT );
  3
  添加图标,图标的添加方式和ICON样式的添加方式是一样的,这里我们添加bmp图片,在了解另一种添加方式
  //加载BMP图标
  if (m_StatusImage.GetSafeHandle()==NULL)
  {
  CBitmap Image;
  BITMAP ImageInfo;
  Image.LoadBitmap(IDB_SERVER_LIST_IMAGE);
  Image.GetBitmap(&ImageInfo);
  m_StatusImage.Create(18,ImageInfo.bmHeight,ILC_COLOR16|ILC_MASK,0,0);
  m_StatusImage.Add(&Image,RGB(255,0,255));
  }
  m_ListCtrl4.SetImageList(&m_StatusImage,LVSIL_SMALL);
  4
  插入节点并设置节点的文本内容
  void CListCtrlDlg::OnBnClickInsert()
  {
  int nCount = m_ListCtrl4.GetItemCount();
  int nRow = m_ListCtrl4.InsertItem(LVIF_IMAGE|LVIF_TEXT|LVIF_PARAM,0,TEXT("Item_1"),0,0,2,0);
  m_ListCtrl4.SetItemText(nRow, 1, TEXT("Item_2"));
  m_ListCtrl4.SetItemText(nRow, 2, TEXT("Item_3"));
  }
  5
  判断节点是否被Check选中,GetCheck
  void CListCtrlDlg::OnBnClickCheckState()
  {
  CString str,str1=TEXT("被Check的行数分别为:");
  
  for(int i=0; i<m_ListCtrl4.GetItemCount(); i++)
  {
  if( m_ListCtrl4.GetCheck(i))
  {
  str.Format(TEXT("[%d]"),i);
  str1+=str;
  }
  }
  
  AfxMessageBox(str1);
  }
  6
  获取选中行的索引,默认情况下,CListCtrl是支持多选的,支持Ctrl和Shift操作,如果需要单选,可以将控件的Single Selection设为true或者添加LVS_SINGLESEL属性,这里介绍两种方法:
  方法1:我们通过遍历所有行,然后挨行判断当前的状态即可
  CString str,str1=TEXT("选中的行数分别为:");
  for(int i=0; i<m_ListCtrl4.GetItemCount(); i++)
  {
  if( m_ListCtrl4.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
  {
  str.Format(TEXT("[%d]"),i);
  str1+=str;
  }
  }
  AfxMessageBox(str1);
  m_ListCtrl4.SetFocus();
  方法2:通过迭代的方式进行遍历
  POSITION pos = m_ListCtrl4.GetFirstSelectedItemPosition();
  if (pos == NULL)
  {
  str1 = TEXT("没有选中任何节点");
  }
  else
  {
  while (pos)
  {
  int nItem = m_ListCtrl4.GetNextSelectedItem(pos);
  
  str.Format(TEXT("[%d]"),nItem);
  str1+=str;
  }
  }
  
  AfxMessageBox(str1);
  m_ListCtrl4.SetFocus();
  7
  获取列数,这里我们就使用了CHeaderCtrl控件
  int nColumnCount = m_ListCtrl4.GetHeaderCtrl()->GetItemCount();
  8
  获取节点的信息GetItem,这里我们获取最后一行的信息
  void CListCtrlDlg::OnBnClickInfo()
  {
  TCHAR szBuffer[MAX_PATH]=TEXT("");
  CString str=TEXT("节点信息分别为:");
  
  //获取列数
  int nColumnCount = m_ListCtrl4.GetHeaderCtrl()->GetItemCount();
  
  LVITEM lvi;
  lvi.iItem = m_ListCtrl4.GetItemCount()-1;
  lvi.mask = LVIF_TEXT;
  lvi.cchTextMax = CountArray(szBuffer);
  
  for (int i=0;i<nColumnCount; i++)
  {
  lvi.iSubItem = i;
  lvi.pszText = szBuffer;
  m_ListCtrl4.GetItem(&lvi);
  
  str+=TEXT("[");
  str+=szBuffer;
  str+=TEXT("] ");
  }
  
  AfxMessageBox(str);
  }
  9
  滚动到要显示的行上,很多时候,我们的数据比较大,而我们通过查找获取获取到了行数后,我们想快速定位的该行,这里我们就可以用EnsureVisible,这里举例定位到最后一行,并且选中该行
  void CListCtrlDlg::OnBnClickVis()
  {
  int nItem = m_ListCtrl4.GetItemCount()-1;
  m_ListCtrl4.EnsureVisible(nItem, FALSE);
  
  m_ListCtrl4.SetItemState(nItem, LVIS_FOCUSED | LVIS_SELECTED,LVIS_FOCUSED | LVIS_SELECTED);
  m_ListCtrl4.SetSelectionMark(nItem);
  m_ListCtrl4.SetFocus();
  }
  10
  选中行,注意:这句代码只是让指定行高亮显示,如果使用后再用GetSelectionMark函数来得到选中行,结果往往是错误的。比如,先用鼠标点击选中第5行,调用GetSelectionMark函数得到的是4(第5行),再调用SetItemState函数选中第2行,然后调用GetSelectionMark函数得到的还是4(第5行),所以,需要在设置选中行高亮显示时,一般与SetSelectionMark函数连用
  m_ListCtrl4.SetItemState(nItem, LVIS_FOCUSED | LVIS_SELECTED,LVIS_FOCUSED | LVIS_SELECTED);
  m_ListCtrl4.SetSelectionMark(nItem);
  m_ListCtrl4.SetFocus();
  11
  取消选中
  void CListCtrlDlg::OnBnClickUnSel()
  {
  for(int i=0; i<m_ListCtrl4.GetItemCount(); i++)
  {
  if( m_ListCtrl4.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
  {
  m_ListCtrl4.SetItemState(i,0,LVIS_SELECTED);
  }
  }
  
  m_ListCtrl4.SetSelectionMark(-1);
  m_ListCtrl4.SetFocus();
  }
  12
  获取标头控件的节点文本
  void CListCtrlDlg::OnBnClickHead()
  {
  LVCOLUMN lvcol;
  TCHAR szBuffer[MAX_PATH]=TEXT("");
  
  int nColumnIndex;;
  
  CString str=TEXT("标题头文本分别为:");
  
  nColumnIndex = 0;
  lvcol.mask = LVCF_TEXT;
  lvcol.pszText = szBuffer;
  lvcol.cchTextMax = CountArray(szBuffer);
  
  while(m_ListCtrl4.GetColumn(nColumnIndex, &lvcol))
  {
  str+=TEXT("[");
  str+= lvcol.pszText;
  str+=TEXT("]");
  
  nColumnIndex++;
  }
  
  AfxMessageBox(str);
  }
  13
  删除所有行
  m_ListCtrl4.DeleteAllItems();
  14
  删除指定行,举例删除最后一行
  m_ListCtrl4.DeleteItem(m_ListCtrl4.GetItemCount()-1);
  15
  删除所有,包括标头控件,这里还是用两种方法去做
  方法1:当删除了节点0之后,下面的节点都会往上移动,重新排列,所以我们只要依次把所有的第一个节点都删除即可
  while( m_ListCtrl4.DeleteColumn(0) );
  方法2:这里和第一种方法原理类似,这次是从后往前删除
  int nColumnCount = m_ListCtrl4.GetHeaderCtrl()->GetItemCount();
  for (int i=nColumnCount-1; i>=0; i--)
  m_ListCtrl4.DeleteColumn (i);
  16
  左键消息,添加ON_NOTIFY的NM_CLICK消息,这里我们举例单击事件的区域位置,即鼠标在哪行哪列点击了,仍然举两种方法
  方法1:
  void CListCtrlDlg::OnLclickList4(NMHDR *pNMHDR, LRESULT *pResult)
  {
  LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR);
  
  //方法一:
  DWORD dwPos = GetMessagePos();
  CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
  
  m_ListCtrl4.ScreenToClient(&point);
  
  LVHITTESTINFO lvinfo;
  lvinfo.pt = point;
  lvinfo.flags = LVHT_ABOVE;
  int nItem = m_ListCtrl4.SubItemHitTest(&lvinfo);
  
  if(nItem != -1)
  {
  CString str;
  str.Format(TEXT("单击的是第%d行第%d列"), lvinfo.iItem, lvinfo.iSubItem);
  AfxMessageBox(str);
  }
  
  *pResult = 0;
  }
  方法2:
  void CListCtrlDlg::OnLclickList4(NMHDR *pNMHDR, LRESULT *pResult)
  {
  LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR);
  
  // 方法二:
  NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  if(pNMListView->iItem != -1)
  {
  CString str;
  str.Format(TEXT("单击的是第%d行第%d列"),pNMListView->iItem, pNMListView->iSubItem);
  AfxMessageBox(str);
  }
  
  *pResult = 0;
  }
  17
  右键消息:添加ON_NOTIFY的NM_RCLICK消息,这里举例是右键菜单
  void CListCtrlDlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)
  {
  NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  if(pNMListView->iItem != -1)
  {
  DWORD dwPos = GetMessagePos();
  CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
  
  CMenu menu;
  if (menu.CreatePopupMenu()==FALSE) return;
  menu.AppendMenu(0,2000,TEXT("菜单节点"));
  menu.AppendMenu(0,2001,TEXT("菜单节点"));
  menu.AppendMenu(0,2002,TEXT("菜单节点"));
  
  menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,point.x,point.y,this);
  }
  *pResult = 0;
  }

这个n_Row是不是个类啊?....如果返回的是个类你%d....怎么会有结果。。。。
补充一下,不好意思从命名上看iItem确实是int型。。。平时不用mfc的list不好意思不太熟悉。。。刚查了下资料
NMHDR* pHeader=(NMHDR*)lParam;
NMLISTVIEW* pNMListView=(NMLISTVIEW*)pHeader;
pNMListView已经指向lParam了,lParam是Windows为该通知消息建立的结构体的地址
这个结构体已经被填充了,通知我们的程序,所以叫通知消息
所以item已经有值了,是Windows系统给自动赋的值。
可能是说没法通过这个消息得到选中行,,为什么不试试调用成员函数GetSelectionMark()就可以获取选中的行号

这段代码你是写在哪里的?


MFC使用n_Row = pNMListView->iItem;查询光标所选的行数时 反馈的是n...
pNMListView已经指向lParam了,lParam是Windows为该通知消息建立的结构体的地址 这个结构体已经被填充了,通知我们的程序,所以叫通知消息 所以item已经有值了,是Windows系统给自动赋的值。可能是说没法通过这个消息得到选中行,,为什么不试试调用成员函数GetSelectionMark()就可以获取选中的行号 ...

用C\/C++语言打印数字三角形
输出 row-1 ~ 1 所以代码如下:include <iostream> using namespace std;int main() { int n;cout<<"输入n: ";cin>>n;\/\/ 对于每一行 for(int row=1; row<=n; ++row) { \/\/ 1. 输出 n - row 个空格 int spaceCount = n - row;for(int i=1; i<=spaceCount; ++i) { cout...

c++程序设计问题!
include <stdio.h>#include <stdlib.h> static const int n_col = 3;static const int n_row = 2;static int d[n_row][n_col];static const int n_max = 6;static int min(int a, int b){ return a < b ? a : b; }static void output(){ for(int i = 0; i < n_row...

c\/c++编程输出菱形形状的星 星图形;菱形图形的大小由键盘输入的行数决定...
include <stdio.h>int main(){int row,i,j,N ;scanf("%d", &N ); \/\/输入大小row=1;while(row<=N) \/*前N排星号*\/{for(i=1;i<=N-row;i++)printf(" ");for(j=1;j<=2*row-1;j++)printf("*");printf("\\n");row++;}row=1;while(row<=N-1) \/*后N-1排星号...

c++编程设计两道题。 求在n×m的棋盘上放k颗皇后的放法(1≤k≤n,m...
t<<=1; } if((N-row-1)+deep>=K) \/\/这行不摆放。优化:如果剩下行数都摆放了还不能满足条件,就不用搜下去了 dfs(row+1,deep,col,dig>>1,adg<<1);}int main(){ while(cin>>N>>M>>K){ if(N<M) swap(N,M);\/\/保证列数少,方便状态压缩 ans=0; d...

C语言课程设计一个快递管理系统
设该快递公司有N个同规格的存货柜(编号为1 -- N),柜子共有ROW层(从上到下编号为1 -- ROW),每层有COLMN个格子(从左往右编号为1 -- COLNM)。假定手机尾号为7168的客户的快件存放在第二个柜子的第五层、第三个格子中,则输入信息为2 5 3 7168,若该格子中有物品,则显示提示息,并要求...

C语言编程问题求解答
include <stdio.h>int main(){int N=1;scanf("%d",&N);if(N<=0){N=1;}int numSpaceFirst=N-1;for(int row=0; row<N; row++,numSpaceFirst--){for(int i=0; i<numSpaceFirst; i++){printf(" ");}for(int i=0; i<2*row-1; i++){printf("*");}printf("\\n");}...

急急!!!杨辉三角程序报错!求高手修改
\/\/修改如下,我把你那个判断是否继续的也改了,你用得挺乱的,你试一下,不过呢,位数多了就对不太qi include<iostream> using namespace std;void print(int m);int main(){ char answer;int n;repeat:cout<<"输入所要得到的行数"<<endl;cin>>n;print(n);cout<<endl;cout<<"Do you ...

row是什么意思
1、row的基本意思是“使成排;划船,参加划船比赛”。2、row可用作及物动词,也可用作不及物动词。用作及物动词时接名词或代词作宾语。3、row后接副词down表示“(赛船中)赶上”; 后接副词out表示“使划得精疲力竭”;后接副词over表示“一路领先,轻易取胜”;row against the wind意思是“逆风而划...

关于C语言的问题:如何用C语言实现n阶行列式和矩阵的值
n:");scanf("%d",&n);getarray(n);showarray(n);result=getresult(n);printf("\\nResult=%f\\n",result);system("pause");return 0;} void getarray(int n){ int row,col;for(row=0;row<n;row++){ printf("\\nPlease input line d:",row+1);for(col=0;col<n;col++)scanf("%...

云溪区13374708834: MFC使用n - Row = pNMListView->iItem;查询光标所选的行数时 反馈的是n-Row=-1?_
竺荔红花: 这个n_Row是不是个类啊?....如果返回的是个类你%d....怎么会有结果....补充一下,不好意思从命名上看iItem确实是int型...平时不用mfc的list不好意思不太熟悉...刚查了下资料 NMHDR* pHeader=(NMHDR*)lParam; NMLISTVIEW* ...

云溪区13374708834: MFC在静态文本上使用双缓冲画图 -
竺荔红花: 双缓冲想必是你是知道的了.你从CStatic类派生一个自己的静态文本框类CXXStatic,重载OnDrawItem,那个结构体里lpDrawItemStruct(名字好像是这样的)有个结构体里有个CDC的句柄m_hdc(好像是这样的),用这个句柄就是静态控件的...

云溪区13374708834: 矩阵计算 貌似得用MFC编程 -
竺荔红花: 2矩阵的加/减没什么,就是2个相同的矩阵的对应项相加/减,要求就是2个矩阵的行列都一样 关键在于乘,2矩阵相乘,2个矩阵不能一样,比如说A矩阵是3行4列,那么B矩阵必须是4行3列才行,对于输入矩阵的用户来说虽然都是输入了12个数...

云溪区13374708834: 用MFC怎么实现从读取.txt中读取数据,保留n位输出到一个新的txt中? -
竺荔红花: CFile类的Read函数读取,要读多少就读多少个字节,保存在CString类里,然后要那几个字符,再调用CString的Right函数或者Left函数对CStirng字符串进行窃取.最后用CFile的Write函数写入到文件里就OK了.

云溪区13374708834: 简述使用MFC AppWizard创建一个简单的应用程序框架 -
竺荔红花: 文件-新建-项目-MFC(在项目类型-visual c++中)-输入名称及存储位置-确定-下一步-选择应用程序类型(单文档/多个文档/基于对话框)-完成.一个简单的应用程序框架就完成了.

云溪区13374708834: 如何使用 MFC 嵌入并自动化 Microsoft Excel 工作表 -
竺荔红花: 使用应用程序向导新建一个名为“Embed_Excel”的 MFC 应用程序向导 (EXE) 项目.选择“单文档”作为要创建的应用程序类型,并选择“容器”作为要包括的复合文档支持类型.接受所有其他默认设置.将生成下面几个类:Application:...

云溪区13374708834: 如何用MFC做一个进度条 -
竺荔红花: 第一种,用printf模拟输出百分比,在控制台输出,实现进度监控.#include<stdio.h>#define N 20 void mBar(float fBar){ int i,j,k,m; for ( i=0;i<N+6;i++ ) printf("\b"); k=N*fBar; m=fBar*100; printf("["); for ( i=0;i<k;i++ ) printf("="); for ( j=0;j<N-k;...

云溪区13374708834: MFC编程如何实现验证码的输出 -
竺荔红花: main() { file *fp; char ch,filename[10]; scanf("%s",filename); if((fp=fopen(filename,"w"))==null) {printf("cannot open file\n"); exit(0);} ch=getchar(); ch=getchar(); while(ch!='#') {fputc(ch,fp);putchar(ch); ch=getchar(); } fclose(fp); }

云溪区13374708834: MFC 全局函数调用对话框类的资源 出现一个问题 求指教 -
竺荔红花: nSelectItem=dlg.m_combox.GetCurSel();这样做是不行的,在DoModal函数返回之后,dlg类存在,但对话框窗口已经销毁了,窗口中的控件也无效了,因此m_combox.GetC...

云溪区13374708834: 怎样使用MFC单文档程序编写一个鼠标画线程序?
竺荔红花: 在visual C++6.0里面 文件->新建->工程里面的MFC Appwizard [EXE] 除了第二步选单文档,基本上都是默认的.建一个文件进行一下操作 我建的文件名为ZuoBiao 在CZuoBiaoView.h里面添加变量:int m; CPoint p1,p2; 在构造函数里面初使化m...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网