??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久无码精品国产,久久精品国产只有精品2020,亚洲国产成人久久精品99http://www.shnenglu.com/Mumoo/category/19432.htmlzh-cnMon, 18 Nov 2013 11:04:38 GMTMon, 18 Nov 2013 11:04:38 GMT60止ListCtrl表头拖动http://www.shnenglu.com/Mumoo/archive/2013/11/18/204301.htmlMumooMumooMon, 18 Nov 2013 01:33:00 GMThttp://www.shnenglu.com/Mumoo/archive/2013/11/18/204301.htmlhttp://www.shnenglu.com/Mumoo/comments/204301.htmlhttp://www.shnenglu.com/Mumoo/archive/2013/11/18/204301.html#Feedback0http://www.shnenglu.com/Mumoo/comments/commentRss/204301.htmlhttp://www.shnenglu.com/Mumoo/services/trackbacks/204301.html转蝲~~~~~~~~~~~~源地址忘记了~~~~~~
止ListCtrl表头拖动QPrevent CListCtrl column resizingQ?br />/*The header control in the ListView control sends notification to the parent window (e.i. the ListView) before it begins resizing a column. We can override the OnNotify() function in the CListCtrl derived class to handle this notification. The code below prevents resizing of all columns. Note that the resize cursor still shows up. */
BOOL CMyListCtrl::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
switch (((NMHDR*)lParam)->code)
{
case HDN_BEGINTRACKW:
case HDN_BEGINTRACKA:
*pResult = TRUE; // disable tracking
return TRUE; // Processed message
}

return CListCtrl::OnNotify(wParam, lParam, pResult);
}  
/*
If you want to prevent resizing of only one column, you should check for the value in iItem field of the HD_NOTIFY structure. The code below stops only the first column from being resized. */

BOOL CMyListCtrl::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
HD_NOTIFY *pHDN = (HD_NOTIFY*)lParam;

if((pHDN->hdr.code == HDN_BEGINTRACKW || pHDN->hdr.code == HDN_BEGINTRACKA)
&& pHDN->iItem == 0) // Prevent only first (col# 0) from resizing
{
*pResult = TRUE; // disable tracking
return TRUE; // Processed message
}

return CListCtrl::OnNotify(wParam, lParam, pResult);



Mumoo 2013-11-18 09:33 发表评论
]]>
CStdioFile用法 随笔http://www.shnenglu.com/Mumoo/archive/2013/10/23/203883.htmlMumooMumooWed, 23 Oct 2013 01:56:00 GMThttp://www.shnenglu.com/Mumoo/archive/2013/10/23/203883.htmlhttp://www.shnenglu.com/Mumoo/comments/203883.htmlhttp://www.shnenglu.com/Mumoo/archive/2013/10/23/203883.html#Feedback0http://www.shnenglu.com/Mumoo/comments/commentRss/203883.htmlhttp://www.shnenglu.com/Mumoo/services/trackbacks/203883.html向已存在的文件中插入首行
BOOL AddTitleColumn(CString &sTxtFile)
{
 CStdioFile stdFile;
 if ( stdFile.Open(sTxtFile,  CFile::modeCreate | CFile::modeNoTruncate
  | CFile::modeReadWrite|CFile::shareExclusive) )
 {
  CIni ini(CCommonFun::GetExecutablePath() +"Config.ini");
  CString sTitleRow = ini.GetString("ListCtrl", "ViewColumName");

  CStringArray arrLines;
  arrLines.Add(sTitleRow);

  stdFile.SeekToBegin();
  CString str;
  while(stdFile.ReadString(str))
  {
   arrLines.Add(str);
  }

  stdFile.SeekToBegin();
  int nCount = arrLines.GetSize();
  for ( int i = 0; i < nCount; i++ )
  {
   CString sContent;
   if (i > 0)
   {
    sContent.Format("%d,%s", i, arrLines[i]);
   }
   else
   {
    sContent = arrLines[i];
   }

   stdFile.WriteString (sContent);
   stdFile.WriteString ("\n");
  }

  stdFile.Close();
  return TRUE;
 }
 return FALSE;
}

生成一个带标题的文?/strong>

BOOL CBarView::ExportDataFile(CString sDataFile/*, CStringArray &arsWriteString*/)
{
 CStdioFile stdFile;
 if ( stdFile.Open(sDataFile,  CFile::modeCreate | CFile::modeNoTruncate
  | CFile::modeReadWrite|CFile::shareExclusive) )
 {
  CString sTitleRow = "序号,文g?份数,|";
  stdFile.WriteString (sTitleRow);
  stdFile.WriteString ("\n");

  for (int i = 0; i < (int)m_data.data.size(); i++)
  {
   CString sLineData;
   for (int j = 0; j < (int)m_data.data.at(i).size(); j++)
   {
    CString sData = m_data.data.at(i).at(j);
    if (j != 0)
    {
     sData.Format(", %s", sData);
    }
    else
    {
     sData.Format("%s", sData);
    }

    sLineData += sData;
   }

   CString sLine;
   sLine.Format("%d, %s", (i+1), sLineData);
   stdFile.WriteString (sLine);
   stdFile.WriteString ("\n");
  }

  stdFile.Close();
  return TRUE;
 }

 LOG("创徏文g %s p|", sDataFile);
 return FALSE;
}



Mumoo 2013-10-23 09:56 发表评论
]]>
ListCtrl Relatehttp://www.shnenglu.com/Mumoo/archive/2013/10/10/203631.htmlMumooMumooThu, 10 Oct 2013 02:51:00 GMThttp://www.shnenglu.com/Mumoo/archive/2013/10/10/203631.htmlhttp://www.shnenglu.com/Mumoo/comments/203631.htmlhttp://www.shnenglu.com/Mumoo/archive/2013/10/10/203631.html#Feedback0http://www.shnenglu.com/Mumoo/comments/commentRss/203631.htmlhttp://www.shnenglu.com/Mumoo/services/trackbacks/203631.html删除所有列敎ͼwhile(m_listCtrl->DeleteColumn(0));

Mumoo 2013-10-10 10:51 发表评论
]]>
ListCtrl控gҎhttp://www.shnenglu.com/Mumoo/archive/2013/04/15/199461.htmlMumooMumooMon, 15 Apr 2013 09:20:00 GMThttp://www.shnenglu.com/Mumoo/archive/2013/04/15/199461.htmlhttp://www.shnenglu.com/Mumoo/comments/199461.htmlhttp://www.shnenglu.com/Mumoo/archive/2013/04/15/199461.html#Feedback0http://www.shnenglu.com/Mumoo/comments/commentRss/199461.htmlhttp://www.shnenglu.com/Mumoo/services/trackbacks/199461.html

在网上查扄ListCtrlҎ

以下未经说明Q?span style="line-height: 1.3em">listctrl默认view风格?span style="line-height: 1.3em">report
-------------------------------------------------------------------------------
1. CListCtrl 风格
LVS_ICON: 为每?span style="line-height: 1.3em">item昄大图?br />LVS_SMALLICON: 为每?span style="line-height: 1.3em">item昄图?br />LVS_LIST: 昄一列带有小图标?span style="line-height: 1.3em">item
LVS_REPORT: item详细资料
直观的理解:windows资源理器,"查看"标签下的"大图标,图标,列表Q详l资?br />--------------------------------------------------------------------------------
2. listctrl风格及扩展风?
LONG lStyle;
lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前H口style
lStyle &= ~LVS_TYPEMASK; //清除昄方式?br />lStyle |= LVS_REPORT; //style
SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//style
DWORD dwStyle = m_list.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用?span style="line-height: 1.3em">report风格?span style="line-height: 1.3em">listctrlQ?br />dwStyle |= LVS_EX_GRIDLINES;//|格U(只适用?span style="line-height: 1.3em">report风格?span style="line-height: 1.3em">listctrlQ?br />dwStyle |= LVS_EX_CHECKBOXES;//item前生?span style="line-height: 1.3em">checkbox控g
m_list.SetExtendedStyle(dwStyle); //讄扩展风格
注:listview?span style="line-height: 1.3em">styleh?span style="line-height: 1.3em">msdn
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrflistviewstyles.asp
--------------------------------------------------------------------------------
3. 插入数据
m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//插入?br />m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );

//新插入的在上?br />int nRow = m_list.InsertItem(0, "11");// 插入?br />m_list.SetItemText(nRow, 1, "jacky");//讄其它列数?/span>

//新插入的数据在下?/span>

int nIndex = m_list.GetItemCount();
LV_ITEM lvItem;
lvItem.mask = LVIF_TEXT ;
lvItem.iItem = nIndex; //行数
lvItem.iSubItem = 0;
lvItem.pszText = (char*)(LPCTSTR)strCount; //W一?br />//在最后一行插入记录?
m_list.InsertItem(&lvItem);
//插入其它?br />m_list.SetItemText(nIndex,1,strLat);

--------------------------------------------------------------------------------
4. 一直选中item
选中style中的Show selection alwaysQ或者在上面W?span style="line-height: 1.3em">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中所有行?span style="line-height: 1.3em">checkbox的状?br />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("W?span style="line-height: 1.3em">%d行的checkbox为选中状?span style="line-height: 1.3em">"), i);
AfxMessageBox(str);
}
}
--------------------------------------------------------------------------------
7. 得到listctrl中所有选中行的序号
Ҏ一Q?
CString str;
for(int i=0; i<m_list.GetItemCount(); i++)
{
if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
{
str.Format(_T("选中了第%d?span style="line-height: 1.3em">"), 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的信?br />TCHAR szBuf[1024];
LVITEM lvi;
lvi.iItem = nItemIndex;
lvi.iSubItem = 0;
lvi.mask = LVIF_TEXT;
lvi.pszText = szBuf;
lvi.cchTextMax = 1024;
m_list.GetItem(&lvi);
关于得到讄item的状态,q可以参?span style="line-height: 1.3em">msdn文章
Q173242: Use Masks to Set/Get Item States in ClistCtrl
http://support.microsoft.com/kb/173242/en-us
--------------------------------------------------------------------------------
9. 得到listctrl的所有列?span style="line-height: 1.3em">header
字符串内?br />LVCOLUMN lvcol;
char str[256];
int nColNum;
CString strColumnName[4];//假如?span style="line-height: 1.3em">4?br />nColNum = 0;
lvcol.mask = LVCF_TEXT;
lvcol.pszText = str;
lvcol.cchTextMax = 256;
while(m_list.GetColumn(nColNum, &lvcol))
{
strColumnName[nColNum] = lvcol.pszText;
nColNum++;
}
--------------------------------------------------------------------------------
10. ?span style="line-height: 1.3em">listctrl中一可见,x动滚动条
m_list.EnsureVisible(i, FALSE);
--------------------------------------------------------------------------------
11. 得到listctrl列数
int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();
--------------------------------------------------------------------------------
12. 删除所有列
Ҏ一Q?
while ( m_list.DeleteColumn (0))
因ؓ你删除了W一列后Q后面的列会依次向上Ud?
Ҏ二:
int nColumns = 4;
for (int i=nColumns-1; i>=0; i--)
m_list.DeleteColumn (i);
--------------------------------------------------------------------------------
13. 得到单击?span style="line-height: 1.3em">listctrl的行列号
dlistctrl控g?span style="line-height: 1.3em">NM_CLICK消息相应函数
void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// Ҏ一Q?
/*
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("单击的是W?span style="line-height: 1.3em">%d行第%d?span style="line-height: 1.3em">", lvinfo.iItem, lvinfo.iSubItem);
AfxMessageBox(strtemp);
}
*/
// Ҏ?span style="line-height: 1.3em">:
/*
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem != -1)
{
CString strtemp;
strtemp.Format("单击的是W?span style="line-height: 1.3em">%d行第%d?span style="line-height: 1.3em">",
pNMListView->iItem, pNMListView->iSubItem);
AfxMessageBox(strtemp);
}
*/
*pResult = 0;
}
--------------------------------------------------------------------------------
14. 判断是否点击?span style="line-height: 1.3em">listctrl?span style="line-height: 1.3em">checkbox?br />dlistctrl控g?span style="line-height: 1.3em">NM_CLICK消息相应函数
void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
m_list.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt = point;
lvinfo.flags = LVHT_ABOVE;
UINT nFlag;
int nItem = m_list.HitTest(point, &nFlag);
//判断是否点在checkbox?br />if(nFlag == LVHT_ONITEMSTATEICON)
{
AfxMessageBox("点在listctrl?span style="line-height: 1.3em">checkbox?span style="line-height: 1.3em">");
}
*pResult = 0;
}
--------------------------------------------------------------------------------
15. 右键点击listctrl?span style="line-height: 1.3em">item弹出菜单
dlistctrl控g?span style="line-height: 1.3em">NM_RCLICK消息相应函数
void CTest6Dlg::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;
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;
}

16. item切换焦点?span style="line-height: 1.3em">(包括用键盘和鼠标切换item?span style="line-height: 1.3em">)Q状态的一些变化顺?br />dlistctrl控g?span style="line-height: 1.3em">LVN_ITEMCHANGED消息相应函数
void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CString sTemp;
if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED && (pNMListView->uNewState & LVIS_FOCUSED) == 0)
{
sTemp.Format("%d losted focus",pNMListView->iItem);
}
else if((pNMListView->uOldState & LVIS_FOCUSED) == 0 &&
(pNMListView->uNewState & LVIS_FOCUSED) == LVIS_FOCUSED)
{
sTemp.Format("%d got focus",pNMListView->iItem);
}
if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED &&
(pNMListView->uNewState & LVIS_SELECTED) == 0)
{
sTemp.Format("%d losted selected",pNMListView->iItem);
}
else if((pNMListView->uOldState & LVIS_SELECTED) == 0 && (pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)
{
sTemp.Format("%d got selected",pNMListView->iItem);
}
*pResult = 0;
--------------------------------------------------------------------------------
17. 得到另一个进E里?span style="line-height: 1.3em">listctrl控g?span style="line-height: 1.3em">item内容
http://www.codeproject.com/threads/int64_memsteal.asp

--------------------------------------------------------------------------------
18. 选中listview中的item
Q131284: How To Select a Listview Item Programmatically
http://support.microsoft.com/kb/131284/en-us

--------------------------------------------------------------------------------
19. 如何?span style="line-height: 1.3em">CListView
中?span style="line-height: 1.3em">CListCtrl的派生类
http://www.codeguru.com/cpp/controls/listview/introduction/article.php/c919/

--------------------------------------------------------------------------------
20. listctrl?span style="line-height: 1.3em">subitem
d图标
m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);
m_list.SetItem(..); //具体参数请参?span style="line-height: 1.3em">msdn


}

str.Format("你双M:%d行,%d?,pList->iItem,pList->iSubItem);
MessageBox(str);

*pResult = 0;
}


常用操作Q?br />1、添加列标题_InsertColumn
2、获取与讄列宽QGetColumnWidth、SetColumnWidth
3、添加一行:InsertItem、SetItemText
4、获取与讄单元文本QGetItemText、SetItemText
5、允许多行选中Ӟ获取选中的行敎ͼGetSelectedCount
6、单行选中Ӟ获取选中的行QGetSelectionMark
7、选中某行QSetItemState(n, LVIS_SELECTED, LVIS_SELECTED);取消选中的行SetItemState(n,0,-1);使用此函数前需要先调用SetFocus();
8、获取某行的状态是否ؓ选中QGetItemState(n, LVIS_SELECTED) == LVIS_SELECTED
9、删除所有行QDeleteAllItems
10、删除指定列QDeleteColumn
11、删除指定行QDeleteItem
12、获取与讄列表控g的背景色QGetBkColor、SetBkColor
13、获取与讄文字背景ԌGetTextBkColor、SetTextBkColor
14、获取与讄文字前景ԌGetTextColor、SetTextColor
15、获取与讄CheckQGetCheck、SetCheck,使用前需要设|控件属性SetExtendedStyle(LVS_EX_CHECKBOXES);使控件有N功?br />16、获取与讄图标列表QGetImageList、SetImageList
17、获取与讄行附加数据:GetItemData、SetItemData
18、获取与讄扩展风格样式QGetExtendedStyle、SetExtendedStyle
19、设|正行选中与网格线QSetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
20、让ListCtrl支持~辑的功能:
①、将属性中?Edit Labels 讄?TrueQ?br />②、响应控件的 LVN_EDNLABELEDIT 消息Q添加如下代码:
CString strText;
m_ListCtrl.GetEditControl()->GetWindowText(strText);
m_ListCtrl.SetItemText(pDispInfo->item.iItem, pDispInfo->item.iSubItem, strText);

21、多行可选时Q蟩到第一个被选中的行Q即使第一个被选中的行可视?/p>

POSITION pos = pView->GetListCtrl().GetFirstSelectedItemPosition();
int nFirstSel = pView->GetListCtrl().GetNextSelectedItem(pos);
if (nFirstSel != -1)
{
pView->GetListCtrl().EnsureVisible(nFirstSel,FALSE);
}

 

列表中添加图标代码:

UINT nIconID[] = {IDI_ICON1,IDI_ICON2,IDI_ICON3,IDI_ICON4,IDI_ICON5};//图标ID
m_ImageList.Create(16,16,ILC_COLOR24,sizeof(nIconID)/sizeof(UINT),0);//初始化CImageListc,sizeof(nIconID)/sizeof(UINT)为图标个敎ͼ后面?表示CImageList在sizeof(nIconID)/sizeof(UINT)个图标个数的基础上可再添加多个图标?br />m_ImageList.SetBkColor(RGB(255,255,255));//讄背景色ؓ白色
for(int i = 0; i < sizeof(nIconID)/sizeof(UINT); i++)
{
m_ImageList.Add(AfxGetApp()->LoadIcon(nIconID[i]));//图标添加到CImageList
}
m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);//讄列表控g昄图标

m_ListCtrl.InsertColumn(0,_T("W??),0,100);
m_ListCtrl.InsertColumn(1,_T("W??),0,100);
m_ListCtrl.InsertColumn(2,_T("W??),0,100);
m_ListCtrl.InsertItem(0,_T("数据1"),0);//后面?表示dCImageList中的W?个图?br />m_ListCtrl.InsertItem(1,_T("数据2"),1);//后面?表示dCImageList中的W?个图?br />m_ListCtrl.InsertItem(2,_T("数据3"),2);
m_ListCtrl.SetItemText(0,1,_T("01"));
m_ListCtrl.SetExtendedStyle(LVS_EX_CHECKBOXES);//讄控g有勾选功?br />DWORD dwStyle = m_ListCtrl.GetExtendedStyle();
m_ListCtrl.SetExtendedStyle(dwStyle|LVS_EX_FULLROWSELECT);讄控g选中行的功能

 

遍历文g夹ƈ昄文g名与图标Q?/p>

CFileFind fileFind;
CString szDir("D:\\Tools");
BOOL bRet = fileFind.FindFile(szDir+"\\*.*");
while(bRet)
{
bRet = fileFind.FindNextFile();
if(fileFind.IsDots())
continue;
if(!fileFind.IsDirectory())
{
SHFILEINFO shfi;
SHGetFileInfo(fileFind.GetFilePath(),FILE_ATTRIBUTE_NORMAL,&shfi,sizeof(shfi),SHGFI_ICON|SHGFI_USEFILEATTRIBUTES|SHGFI_TYPENAME);
int nImageID = m_ImageList.Add(shfi.hIcon);
m_ListCtrl.InsertItem(m_ListCtrl.GetItemCount(),fileFind.GetFileName(),nImageID);
}
}

 

复制列表内容

void CXXXView::OnCopydataToClipboard()
{
int nSelectCount = GetListCtrl().GetSelectedCount();
int nSelect = -1;
CString strData = _T("");
for (int i = 0; i < nSelectCount; i++)
{
//扑ֈ选择的行?br />nSelect = GetListCtrl().GetNextItem(nSelect,LVNI_ALL | LVNI_SELECTED);
//列数
int nColumnCount = GetListCtrl().GetHeaderCtrl()->GetItemCount();
for (int j = 0; j < nColumnCount; j++)
{
CString text;
text = GetListCtrl().GetItemText(nSelect,j);
if (j != 0)
strData += "\t";
strData += text;
}
//用\r\n来控制回车和换行
if (i != nSelectCount - 1)
strData += "\r\n";
}

//复制到剪贴板
HGLOBAL clipbordBuf = GlobalAlloc(GMEM_DDESHARE,2*(strData.GetLength() + 1));
TCHAR *pBuf = (TCHAR*)GlobalLock(clipbordBuf);
lstrcpy((LPTSTR)pBuf,(LPCTSTR)strData);
GlobalUnlock(clipbordBuf);

OpenClipboard();
EmptyClipboard();
SetClipboardData(CF_TEXT,pBuf);
CloseClipboard();
}

 

 

在非W一列中d图标

m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_SUBITEMIMAGES);

 

m_List.SetItem(0,1,LVIF_TEXT|LVIF_IMAGE,“aaa”,0,0,0,0);//在第一行第二列加入W?个图?/p>

m_List.SetItem(i,1,LVIF_TEXT|LVIF_IMAGE,szBuffer,i,0,0,0);




Mumoo 2013-04-15 17:20 发表评论
]]>
CStringList用法http://www.shnenglu.com/Mumoo/archive/2013/04/15/199460.htmlMumooMumooMon, 15 Apr 2013 08:28:00 GMThttp://www.shnenglu.com/Mumoo/archive/2013/04/15/199460.htmlhttp://www.shnenglu.com/Mumoo/comments/199460.htmlhttp://www.shnenglu.com/Mumoo/archive/2013/04/15/199460.html#Feedback0http://www.shnenglu.com/Mumoo/comments/commentRss/199460.htmlhttp://www.shnenglu.com/Mumoo/services/trackbacks/199460.html 

CStringListcL?/div>
构?/div>

构造一个空的CString对象列表

?访?/div>

GetHead
q回此列表(不能是空的)中头部的元素
GetTail q回此列表(不能是空的)中尾部的元素

操作

RemoveHead
从列表的头部删除元素
RemoveTail 从列表的N删除元素
AddHead 在列表的头部d一个元素(或者是另一个列表中的所有元素)Q即产生一个新的头?
AddTail 在列表的Nd一个元素(或者是另一个列表中的所有元素)Q即产生一个新的尾?
RemoveAll 删除此列表中的所有元?

重复

GetHeadPosition
q回列表中的头部元素的位|?
GetTailPosition q回列表中尾部元素的位置
GetNext 获取用于重复的下一个元?
GetPrev 获取用于重复的前一个元?

获取/修改

获取l定位置处的元素
SetAt 讄l定位置处的元素
RemoveAt 从此列表中删除由位置指定的一个元?

插入

InsertBefore
在一个给定位|之前插入一个新元素
InsertAfter 在一个给定位|之后插入一个新元素

搜烦

获取由字W串值指定的元素的位|?
FindIndex 获取׃个从零开始的索引指定的元素的位置

状?/div>

q回此列表中的元素个?
IsEmpty 试列表是否为空Q没有元素)

CStringList是CString链表Q在MFC~程中STL之外的另一选择Q用h更加z?

插入数据QAddTailQ);AddHead()

删除数据QRemoveAll();RemoveAt();RemoveHead();RemoveTail()

取得元素个数QGetCount()

取得某个元素|GetAt(cstringList.FindIndex(index))//index为整?/p>

取得头尾元素QGetHead() QGetTail(),

遍历最好用上面的方式,不要用POSITION变量Q用FindIndex可以了?/p>

初始化:

 

CStringList listFileName;
listFileName.RemoveAll();

 

 

d操作Q?/p>

 

listFileName.AddTail(szFullPathName);

 

遍历操作Q?/p>

 

POSITION rPos;
rPos = listFileName.GetHeadPosition();
while (rPos != NULL)
{
strFileName = listFileName.GetNext(rPos);
strLog += "/r/n" + strFileName;
}



Mumoo 2013-04-15 16:28 发表评论
]]>MessageBox提示?/title><link>http://www.shnenglu.com/Mumoo/archive/2013/04/12/199374.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Fri, 12 Apr 2013 06:51:00 GMT</pubDate><guid>http://www.shnenglu.com/Mumoo/archive/2013/04/12/199374.html</guid><wfw:comment>http://www.shnenglu.com/Mumoo/comments/199374.html</wfw:comment><comments>http://www.shnenglu.com/Mumoo/archive/2013/04/12/199374.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Mumoo/comments/commentRss/199374.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Mumoo/services/trackbacks/199374.html</trackback:ping><description><![CDATA[<p>MessageBox(NULL, "警示?, "提示?, \<br />  MB_OK|MB_ICONWARNING|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p> <p> MessageBox(NULL, "信息提示?, "提示?, \<br />  MB_OK|MB_ICONASTERISK|MB_SYSTEMMODAL|MB_SETFOREGROUND);<br /> MessageBox(NULL, "信息?, "提示?, \<br />  MB_OK|MB_ICONINFORMATION|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p> <p> MessageBox(NULL, "错误?, "提示?, \<br />  MB_OK|MB_ICONERROR|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p> <p> MessageBox(NULL, "句柄?, "提示?, \<br />  MB_OK|MB_ICONHAND|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p> <p> MessageBox(NULL, "提问?, "提示?, \<br />  MB_OKCANCEL|MB_ICONQUESTION|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p> <p> MessageBox(NULL, "停止?, "提示?, \<br />  MB_OK|MB_ICONSTOP|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p> <p> MessageBox(NULL, "d帮助?, "提示?, \<br />  MB_HELP|MB_ICONWARNING|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p> <p> MessageBox(NULL, "YESNO CancelQ添加默认选项", "提示?, \<br />  MB_YESNOCANCEL|MB_ICONWARNING|MB_DEFBUTTON1|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p> <p> MessageBox(NULL, "RETRYCANCEL", "提示?, \<br />  MB_RETRYCANCEL|MB_ICONWARNING|MB_DEFBUTTON2|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p> <p> MessageBox(NULL, "CANCELTRYCONTINUE", "提示?, \<br />  MB_CANCELTRYCONTINUE|MB_ICONWARNING|MB_DEFBUTTON3|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p><img src ="http://www.shnenglu.com/Mumoo/aggbug/199374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Mumoo/" target="_blank">Mumoo</a> 2013-04-12 14:51 <a href="http://www.shnenglu.com/Mumoo/archive/2013/04/12/199374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC Listcontrol 使用Ҏhttp://www.shnenglu.com/Mumoo/archive/2013/01/17/197332.htmlMumooMumooThu, 17 Jan 2013 02:32:00 GMThttp://www.shnenglu.com/Mumoo/archive/2013/01/17/197332.htmlhttp://www.shnenglu.com/Mumoo/comments/197332.htmlhttp://www.shnenglu.com/Mumoo/archive/2013/01/17/197332.html#Feedback0http://www.shnenglu.com/Mumoo/comments/commentRss/197332.htmlhttp://www.shnenglu.com/Mumoo/services/trackbacks/197332.html原文出处Q?/span>http://blog.csdn.net/bqw2008/article/details/2047489
 Windows ListCtrl使用技?br />1. ListCtrl 风格
LVS_ICON: 为每个item昄大图?br />LVS_SMALLICON: 为每个item昄图?br />LVS_LIST: 昄一列带有小图标的item
LVS_REPORT: 昄item详细资料

直观的理解:windows资源理器,“查看”标签下的“大图标,图标,列表Q详l资?#8221;
--------------------------------------------------------------------------------
2. 讄listctrl 风格及扩展风?LONG lStyle;
lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前H口style
lStyle &= ~LVS_TYPEMASK; //清除昄方式?br />lStyle |= LVS_REPORT; //讄style
SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//讄style

DWORD dwStyle = m_list.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrlQ?br />dwStyle |= LVS_EX_GRIDLINES;//|格U(只适用与report风格的listctrlQ?br />dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控g
m_list.SetExtendedStyle(dwStyle); //讄扩展风格

注:listview的styleh阅msdn
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrflistviewstyles.asp
--------------------------------------------------------------------------------
3. 插入数据 m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//插入?br />m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );
int nRow = m_list.InsertItem(0, “11”);//插入?br />m_list.SetItemText(nRow, 1, “jacky”);//讄数据
--------------------------------------------------------------------------------
4. 一直选中item 选中style中的Show selection alwaysQ或者在上面W?点中讄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("W?d行的checkbox为选中状?), i);
AfxMessageBox(str);
}
}
--------------------------------------------------------------------------------
7. 得到listctrl中所有选中行的序号
Ҏ一Q?br />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;
lvi.cchTextMax = 1024;
m_list.GetItem(&lvi);

关于得到讄item的状态,q可以参考msdn文章
Q173242: Use Masks to Set/Get Item States in CListCtrl
http://support.microsoft.com/kb/173242/en-us
--------------------------------------------------------------------------------
9. 得到listctrl的所有列的header字符串内?LVCOLUMN lvcol;
char str[256];
int nColNum;
CString strColumnName[4];//假如??/p>

nColNum = 0;
lvcol.mask = LVCF_TEXT;
lvcol.pszText = str;
lvcol.cchTextMax = 256;
while(m_list.GetColumn(nColNum, &lvcol))
{
strColumnName[nColNum] = lvcol.pszText;
nColNum++;
}
--------------------------------------------------------------------------------
10. 使listctrl中一可见,x动滚动条 m_list.EnsureVisible(i, FALSE);
--------------------------------------------------------------------------------
11. 得到listctrl列数 int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();
--------------------------------------------------------------------------------
12. 删除所有列 Ҏ一Q?br />while ( m_list.DeleteColumn (0))
因ؓ你删除了W一列后Q后面的列会依次向上Ud?/p>

Ҏ二:
int nColumns = 4;
for (int i=nColumns-1; i>=0; i--)
m_list.DeleteColumn (i);
--------------------------------------------------------------------------------
13. 得到单击的listctrl的行列号 dlistctrl控g的NM_CLICK消息相应函数
void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// Ҏ一Q?br />/*
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("单击的是W?d行第%d?, lvinfo.iItem, lvinfo.iSubItem);
AfxMessageBox(strtemp);
}
*/

// Ҏ?
/*
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem != -1)
{
CString strtemp;
strtemp.Format("单击的是W?d行第%d?,
pNMListView->iItem, pNMListView->iSubItem);
AfxMessageBox(strtemp);
}
*/
*pResult = 0;
}
--------------------------------------------------------------------------------
14. 判断是否点击在listctrl的checkbox?dlistctrl控g的NM_CLICK消息相应函数
void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );

m_list.ScreenToClient(&point);

LVHITTESTINFO lvinfo;
lvinfo.pt = point;
lvinfo.flags = LVHT_ABOVE;

UINT nFlag;
int nItem = m_list.HitTest(point, &nFlag);
//判断是否点在checkbox?br />if(nFlag == LVHT_ONITEMSTATEICON)
{
AfxMessageBox("点在listctrl的checkbox?);
}
*pResult = 0;
}
--------------------------------------------------------------------------------
15. 右键点击listctrl的item弹出菜单 dlistctrl控g的NM_RCLICK消息相应函数
void CTest6Dlg::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;
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;
}
--------------------------------------------------------------------------------
16. item切换焦点?包括用键盘和鼠标切换item?Q状态的一些变化顺?dlistctrl控g的LVN_ITEMCHANGED消息相应函数
void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here

CString sTemp;

if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED &&
(pNMListView->uNewState & LVIS_FOCUSED) == 0)
{
sTemp.Format("%d losted focus",pNMListView->iItem);
}
else if((pNMListView->uOldState & LVIS_FOCUSED) == 0 &&
(pNMListView->uNewState & LVIS_FOCUSED) == LVIS_FOCUSED)
{
sTemp.Format("%d got focus",pNMListView->iItem);
}

if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED &&
(pNMListView->uNewState & LVIS_SELECTED) == 0)
{
sTemp.Format("%d losted selected",pNMListView->iItem);
}
else if((pNMListView->uOldState & LVIS_SELECTED) == 0 &&
(pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)
{
sTemp.Format("%d got selected",pNMListView->iItem);
}

*pResult = 0;
}
--------------------------------------------------------------------------------
20. listctrl的subitemd图标 m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);
m_userlist.SetItem(..); //具体参数请参考msdn
--------------------------------------------------------------------------------
21. 在CListCtrl昄文gQƈҎ文gcd来显C图?|上扑ֈ的代码,share
BOOL CTest6Dlg::OnInitDialog()
{
CDialog::OnInitDialog();

HIMAGELIST himlSmall;
HIMAGELIST himlLarge;
SHFILEINFO sfi;
char cSysDir[MAX_PATH];
CString strBuf;

memset(cSysDir, 0, MAX_PATH);

GetWindowsDirectory(cSysDir, MAX_PATH);
strBuf = cSysDir;
sprintf(cSysDir, "%s", strBuf.Left(strBuf.Find("file:///));

himlSmall = (HIMAGELIST)SHGetFileInfo ((LPCSTR)cSysDir,
0,
&sfi,
sizeof(SHFILEINFO),
SHGFI_SYSICONINDEX | SHGFI_SMALLICON );

himlLarge = (HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir,
0,
&sfi,
sizeof(SHFILEINFO),
SHGFI_SYSICONINDEX | SHGFI_LARGEICON);

if (himlSmall && himlLarge)
{
::SendMessage(m_list.m_hWnd, LVM_SETIMAGELIST,
(WPARAM)LVSIL_SMALL, (LPARAM)himlSmall);
::SendMessage(m_list.m_hWnd, LVM_SETIMAGELIST,
(WPARAM)LVSIL_NORMAL, (LPARAM)himlLarge);
}
return TRUE; // return TRUE unless you set the focus to a control
}

void CTest6Dlg::AddFiles(LPCTSTR lpszFileName, BOOL bAddToDocument)
{
int nIcon = GetIconIndex(lpszFileName, FALSE, FALSE);
CString strSize;
CFileFind filefind;

// get file size
if (filefind.FindFile(lpszFileName))
{
filefind.FindNextFile();
strSize.Format("%d", filefind.GetLength());
}
else
strSize = "0";

// split path and filename
CString strFileName = lpszFileName;
CString strPath;

int nPos = strFileName.ReverseFind('//');
if (nPos != -1)
{
strPath = strFileName.Left(nPos);
strFileName = strFileName.Mid(nPos + 1);
}

// insert to list
int nItem = m_list.GetItemCount();
m_list.InsertItem(nItem, strFileName, nIcon);
m_list.SetItemText(nItem, 1, strSize);
m_list.SetItemText(nItem, 2, strFileName.Right(3));
m_list.SetItemText(nItem, 3, strPath);
}

int CTest6Dlg::GetIconIndex(LPCTSTR lpszPath, BOOL bIsDir, BOOL bSelected)
{
SHFILEINFO sfi;
memset(&sfi, 0, sizeof(sfi));

if (bIsDir)
{
SHGetFileInfo(lpszPath,
FILE_ATTRIBUTE_DIRECTORY,
&sfi,
sizeof(sfi),
SHGFI_SMALLICON | SHGFI_SYSICONINDEX |
SHGFI_USEFILEATTRIBUTES |(bSelected ? SHGFI_OPENICON : 0));
return sfi.iIcon;
}
else
{
SHGetFileInfo (lpszPath,
FILE_ATTRIBUTE_NORMAL,
&sfi,
sizeof(sfi),
SHGFI_SMALLICON | SHGFI_SYSICONINDEX |
SHGFI_USEFILEATTRIBUTES | (bSelected ? SHGFI_OPENICON : 0));
return sfi.iIcon;
}
return -1;
}

--------------------------------------------------------------------------------
22. listctrl内容q行大数据量更新Ӟ避免闪烁 m_list.SetRedraw(FALSE);
//更新内容
m_list.SetRedraw(TRUE);
m_list.Invalidate();
m_list.UpdateWindow();

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

创徏囑Ş列表q和CListCtrl兌Q?br />m_image_list.Create(IDB_CALLER2, 16, 10, RGB(192,192, 192));
m_image_list.SetBkColor( GetSysColor( COLOR_WINDOW ) );
m_caller_list.SetImageList( &m_image_list, LVSIL_SMALL);
为报表添?列:
char *szColumn[]={"늧","IP地址","登陆旉","状?};
int widths[]={100,98,70,55};
LV_COLUMN lvc;
lvc.mask=LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;
lvc.fmt=LVCFMT_LEFT;
for(int i=0;i<4;i++) {//插入各列
lvc.pszText=szColumn[i];
lvc.cx=widths[i];
lvc.iSubItem=i;
m_caller_list.InsertColumn(i,&lvc);
}
为报表添加两,以附加方式添加:
char* data[4];
data[0]="所有h";
data[1]="0.0.0.0";
data[3]="在线";
data[2]=new char;
CTime now=CTime::GetCurrentTime();
CString temp = now.Format("%H:%M:%S");
data[2]=temp.GetBuffer(1);
LV_ITEM lvi;
lvi.mask=LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
lvi.iSubItem=0;
lvi.pszText=(char *)data[0];
lvi.iImage = 0;
lvi.iItem=0;
m_caller_list.InsertItem(&lvi);
for (int j=0;j<4;j++) m_caller_list.SetItemText(count,j,data[j]);
count++;
lvi.iImage = 1;
lvi.iItem=count;
m_caller_list.InsertItem(&lvi);
data[0]="cherami";
data[1]="127.0.0.1";
for (int n=0;n<4;n++) m_caller_list.SetItemText(count,n,data[n]);
count++;
讄报表的样?br />选中一整行Q?br />m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_FULLROWSELECT);
l制表格Q?br />m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_GRIDLINES);
带复选框Q?br />m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_CHECKBOXES);
自动切换Q?br />m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_TRACKSELECT);
选定一行:
讄CListCtrl的Show selection always选项
SetItemState (iIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED)
选中一个或多个目?会发送LVN_ITEMCHANGED消息Q可以?br />GetSelectedCount()Ҏ得到被选定的项的数目?br />点击列头的消息响应:
ON_NOTIFY(HDN_ITEMCLICKW, 0, ResponseFunc)
消息Q需要自己添?
或者:
ON_NOTIFY(LVN_COLUMNCLICK, ID_yourCtrl, ResponseFunc)//向导d
前者后响应Q后者先响应
响应函数Q?br />ResponseFunc(NMHDR *pNMHDR, LRESULT *pResult)
双击CListCtrl中的ITEM的消息是及消息函敎ͼ
ON_NOTIFY(NM_DBLCLK, ID_yourCtrl, ResponseFunc)
单击ITEM的消息响应:
ON_NOTIFY(NM_CLICK, ID_yourCtrl, ResponseFunc)
ResponseFunc(NMHDR *pNMHDR, LRESULT *pResult)

HDN_ITEMCLICK 是Header control Notify message for mouse left click on the Header control!
而HDN_ITEMCLICK是当List View中存在一个Header ContrlӞHeader Ctrl通知父窗口List View的!
CListCtrl中的Item被选中触发LBN_SELCHANGE(通过WM_COMMAND)消息Q?br />删除CListCtrl中选定的项Q?br />POSITION pos;
int nIndex;
for(; pos= GetFirstSelectedItemPosition();)
{
nIndex = GetNextSelectedItem(pos);
DeleteItem(nIndex);
}
在ListCtrl中进行排?br />列表控gQCListCtrlQ的剙有一排按钮,用户可以通过选择不同的列来对记录q行排序。但?CListCtrlq没有自动排序的功能Q我们需要自己添加一个用于排序的回调函数来比较两个数据的大小Q此外还需要响应排序按钮被点击的消息。下面讲qC下具体的做法?br />CListCtrl提供了用于排序的函数Q函数原型ؓQBOOL CListCtrl::SortItems( PFNLVCOMPARE pfnCompare, DWORD dwData )。其中第一个参Cؓ全局排序函数的地址Q第二个参数为用h据,你可以根据你的需要传递一个数据或是指针。该函数q回-1代表W一Ҏ应在W二前面,q回1代表W一Ҏ应在W二后面,q回0代表两项相等?br />用于排序的函数原形ؓQint CALLBACK ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)Q其中第三个参数用者传递的数据Q即调用SortItems时的W二个参数dwDataQ。第一和第二个参数为用于比较的两项的ItemDataQ你可以通过DWORD CListCtrl::GetItemData( int nItem )/BOOL CListCtrl::SetItemData( int nItem, DWORD dwData )来对每一的ItemDataq行存取。在dҎ选用特定的CListCtrl::InsertItem也可以设|该倹{由于你在排序时只能通过该值来定的位置所以你应该比较明确的确定该值的含义?br />最后一点,我们需要知道什么时候需要排序,实现q点可以在父H口中对LVN_COLUMNCLICK消息q行处理来实现?
下面我们看一个例子,q个例子是一个派生类Qƈ支持序/倒序两种方式排序。ؓ了简单我对全局数据q行排序Q而在实际应用中会有多l需要排序的数据Q所以需要通过传递参数的方式来告诉派序函数需要对什么数据进行排序?/font>

//全局数据
struct DEMO_DATA
{
char szName[20];
int iAge;
}strAllData[5]={{"王某",30},{"张某",40},{"武某",32},{"陈某",20},{"李某",36}};
//CListCtrlzcd?br />class CSortList : public CListCtrl
{
// Construction
public:
CSortList();
BOOL m_fAsc;//是否序排序
int m_nSortedCol;//当前排序的列
protected:
//{{AFX_MSG(CSortList)
//}}AFX_MSG
...
};
//父窗口中包含该CListCtrlzcd?br />class CSort_in_list_ctrlDlg : public CDialog
{
// Construction
public:
CSort_in_list_ctrlDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CSort_in_list_ctrlDlg)
enum { IDD = IDD_SORT_IN_LIST_CTRL_DIALOG };
CSortList m_listTest;
//}}AFX_DATA
}
//在父H口中定义LVN_COLUMNCLICK消息映射
BEGIN_MESSAGE_MAP(CSort_in_list_ctrlDlg, CDialog)
//{{AFX_MSG_MAP(CSort_in_list_ctrlDlg)
ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST1, OnColumnclickList1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//初始化数?br />BOOL CSort_in_list_ctrlDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//初始化ListCtrl中数据列?br />m_listTest.InsertColumn(0,"姓名");
m_listTest.InsertColumn(1,"q龄");
m_listTest.SetColumnWidth(0,80);
m_listTest.SetColumnWidth(1,80);
for(int i=0;i<5;i++)
{
m_listTest.InsertItem(i,strAllData[i].szName);
char szAge[10];
sprintf(szAge,"%d",strAllData[i].iAge);
m_listTest.SetItemText(i,1,szAge);
//讄每项的ItemData为数l中数据的烦?br />//在排序函C通过该ItemData来确定数?br />m_listTest.SetItemData(i,i);
}
return TRUE; // return TRUE unless you set the focus to a control
}
//处理消息
void CSort_in_list_ctrlDlg::OnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
//讄排序方式
if( pNMListView->iSubItem == m_listTest.m_nSortedCol )
m_listTest.m_fAsc = !m_listTest.m_fAsc;
else
{
m_listTest.m_fAsc = TRUE;
m_listTest.m_nSortedCol = pNMListView->iSubItem;
}
//调用排序函数
m_listTest.SortItems( ListCompare, (DWORD)&m_listTest );
*pResult = 0;
}
//排序函数实现
int CALLBACK ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
//通过传递的参数来得到CSortList对象指针Q从而得到排序方?br />CSortList* pV=(CSortList*)lParamSort;
//通过ItemData来确定数?br />DEMO_DATA* pInfo1=strAllData+lParam1;
DEMO_DATA* pInfo2=strAllData+lParam2;
CString szComp1,szComp2;
int iCompRes;
switch(pV->m_nSortedCol)
{
case(0):
//以第一列ؓҎ排序
szComp1=pInfo1->szName;
szComp2=pInfo2->szName;
iCompRes=szComp1.Compare(szComp2);
break;
case(1):
//以第二列为根据排?br />if(pInfo1->iAge == pInfo2->iAge)
iCompRes = 0;
else
iCompRes=(pInfo1->iAge < pInfo2->iAge)?-1:1;
break;
default:
ASSERT(0);
break;
}
//Ҏ当前的排序方式进行调?br />if(pV->m_fAsc)
return iCompRes;
else
return iCompRes*-1;
}
排序最快:
CListCtrl::SortItems
Example
// Sort the item in reverse alphabetical order.
static int CALLBACK
MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
// lParamSort contains a pointer to the list view control.
// The lParam of an item is just its index.
CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
CString strItem1 = pListCtrl->GetItemText(lParam1, 0);
CString strItem2 = pListCtrl->GetItemText(lParam2, 0);
return strcmp(strItem2, strItem1);
}
void snip_CListCtrl_SortItems()
{
// The pointer to my list view control.
extern CListCtrl* pmyListCtrl;
// Sort the list view items using my callback procedure.
pmyListCtrl->SortItems(MyCompareProc, (LPARAM) pmyListCtrl);
}

If you don’t want to allow the users to sort the list by clicking on the header, you can use the style LVS_NOSORTHEADER. However, if you do want to allow sorting, you do not specify the LVS_NOSORTHEADER. The control, though, does not sort the items. You have to handle the HDN_ITEMCLICK notification from the header control and process it appropriately. In the code below, we have used the sorting function SortTextItems() developed in a previous section. You may choose to sort the items in a different manner.
Step 1: Add two member variables
Add two member variables to the CListCtrl. The first variable to track which column has been sorted on, if any. The second variable to track if the sort is ascending or descending.
int nSortedCol;
BOOL bSortAscending;

Step 2: Initialize them in the constructor.
Initialize nSortedCol to -1 to indicate that no column has been sorted on. If the list is initially sorted, then this variable should reflect that.

nSortedCol = -1;
bSortAscending = TRUE;

Step 3: Add entry in message map to handle HDN_ITEMCLICK
Actually you need to add two entries. For HDN_ITEMCLICKA and HDN_ITEMCLICKW. Do not use the class wizard to add the entry. For one, you need to add two entries whereas the class wizard will allow you only one. Secondly, the class wizard uses the wrong macro in the entry. It uses ON_NOTIFY_REFLECT() instead of ON_NOTIFY(). Since the HDN_ITEMCLICK is a notification from the header control to the list view control, it is a direct notification and not a reflected one.
ON_NOTIFY(HDN_ITEMCLICKA, 0, OnHeaderClicked)
ON_NOTIFY(HDN_ITEMCLICKW, 0, OnHeaderClicked)
Note that we specify the same function for both the notification. Actually the program will receive one or the other and not both. What notification it receives will depend on the OS. The list view control on Windows 95 will send the ANSI version and the control on NT will send the UNICODE version.
Also, note that the second argument is zero. This value filters for the id of the control and we know that header control id is zero.
Step 4: Write the OnHeaderClicked() function
Here’s where you decide what to do when the user clicks on a column header. The expected behaviour is to sort the list based on the values of the items in that column. In this function we have used the SortTextItems() function developed in a previous section. If any of the columns displays numeric or date values, then you would have to provide custom sorting for them.

void CMyListCtrl::OnHeaderClicked(NMHDR* pNMHDR, LRESULT* pResult)
{
HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
if( phdn->iButton == 0 )
{
// User clicked on header using left mouse button
if( phdn->iItem == nSortedCol )
bSortAscending = !bSortAscending;
else
bSortAscending = TRUE;
nSortedCol = phdn->iItem;
SortTextItems( nSortedCol, bSortAscending );
}
*pResult = 0;
}
让CListCtrl的SubItem也具有编辑功?
要重载一个文本框Q然后在LVN_BEGINLABELEDIT时改变文本框位置?br />CInEdit m_InEdit;
if( ( GetStyle() & LVS_TYPEMASK ) == LVS_REPORT && ( m_nEditSubItem != 0 ) )
{
HWND hwndEdit;
CRect rtBound;
CString strText;
hwndEdit = (HWND)SendMessage( LVM_GETEDITCONTROL );
GetSubItemRect( pDispInfo->item.iItem, m_nEditSubItem, LVIR_LABEL, rtBound );
m_InEdit.SubclassWindow( hwndEdit );
m_InEdit.m_left = rtBound.left;
strText = GetItemText( pDispInfo->item.iItem, m_nEditSubItem );
m_InEdit.SetWindowText( strText );
}
void CInEdit::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
CRect rtClient;
lpwndpos->x = m_left; // m_left在LVN_BEGINLABELEDIT中设|?br />CEdit::OnWindowPosChanging(lpwndpos);

// TODO: Add your message handler code here

}



Mumoo 2013-01-17 10:32 发表评论
]]>CTime()c?/title><link>http://www.shnenglu.com/Mumoo/archive/2012/11/27/195738.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Tue, 27 Nov 2012 08:20:00 GMT</pubDate><guid>http://www.shnenglu.com/Mumoo/archive/2012/11/27/195738.html</guid><wfw:comment>http://www.shnenglu.com/Mumoo/comments/195738.html</wfw:comment><comments>http://www.shnenglu.com/Mumoo/archive/2012/11/27/195738.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Mumoo/comments/commentRss/195738.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Mumoo/services/trackbacks/195738.html</trackback:ping><description><![CDATA[<div>l构:<br />CTime( <div id="myuyeww" class="spctrl"></div>  int nYear, <div id="wwc0o0c" class="spctrl"></div>  int nMonth, <div id="cwky0s8" class="spctrl"></div>  int nDay, <div id="88ocqq0" class="spctrl"></div>  int nHour, <div id="mguu8q8" class="spctrl"></div>  int nMin, <div id="eycieug" class="spctrl"></div>  int nSec, <div id="auu8q00" class="spctrl"></div>  int nDST = -1<br /> //参数nDST指定是否实行夏oӞ?时表C实行标准时_为正数时表示实行夏oӞ数时ql自动计实行的是标准时间还是夏令时? <div id="yc8mmeg" class="spctrl"></div>  ); <br /><br /><span style="color: #0000ff"> ===================================================================== </span> <div id="0skgamu" class="spctrl"></div><span style="color: #0000ff">  </span><strong style="color: #0000ff">C++中,CTime ?CString转换</strong><span style="color: #0000ff"> </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  CTime m_StartTime1 = CTime::GetCurrentTime(); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  CString csStartTime = m_StartTime1.Format( "%Y%m%d%H%M%S" ); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  </span><strong style="color: #0000ff">一.CString转ؓCTime的几U方?/strong><span style="color: #0000ff"> </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  CString timestr = "2000q?4?5?; </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  int a,b,c ; </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  sscanf(timestr.GetBuffer(timestr.GetLength()),"%dq?d?d?,&a,&b,&c); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  CTime time(a,b,c,0,0,0); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  --------or - --------------------- </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  CString s("2001-8-29 19:06:23"); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  int nYear, nMonth, nDate, nHour, nMin, nSec; </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  sscanf(s, "%d-%d-%d %d:%d:%d", &nYear, &nMonth, &nDate, &nHour, &nMin, &nSec); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  CTime t(nYear, nMonth, nDate, nHour, nMin, nSec); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  ---- or ------------------------ </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  CString timestr = "2000q?4?5?; </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  int year,month,day; </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  BYTE tt[5]; </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  //get year </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  memset(tt, 0, sizeof(tt)); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  tt[0] = timestr[0]; </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  tt[1] = timestr[1]; </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  tt[2] = timestr[2]; </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  tt[3] = timestr[3]; </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  year= atoi((char *)tt); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  //get month </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  memset(tt, 0, sizeof(tt)); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  tt[0] = timestr[6]; </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  tt[1] = timestr[7]; </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  month = atoi((char *)tt); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  //get day </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  memset(tt, 0, sizeof(tt)); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  tt[0] = timestr[10]; </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  tt[1] = timestr[11]; </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  CTime time(year,month,day,0,0,0); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  从上面来?很明显用sscanf()函数的优? </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  </span><strong style="color: #0000ff">?CTime转换为CString的方?</strong><span style="color: #0000ff"> </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  CTime tmSCan = CTime::GetCurrentTime(); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  CString szTime = tmScan.Format("'%Y-%m-%d %H:%M:%S'"); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  q样得到?/span><a style="color: #0000ff" target="_blank">日期</a><span style="color: #0000ff">旉字符串就是以"2006-11-27 23:30:59"的格?</span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  //取得CTime中的日期 </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  CString cstrDate = tmScan.Format("%Y-%m-%d"); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  //取得CTime中的旉 </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  CString cstrTime = tmScan.Format("%H:%M-%S"); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  sprintfq有个不错的表妹QstrftimeQ专门用于格式化旉字符串的Q用法跟她表哥很像,也是一大堆格式控制W,只是毕竟姑娘家心细Q她q要调用者指定缓冲区的最大长度,可能是ؓ了在出现问题时可以推卸责d。这里D个例子: </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  更多更好的sprintf()函数说明参?《spirntfQ你知道多少Q?</span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  time_t t = time(0); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  //产生"YYYY-MM-DD hh:mm:ss"格式的字W串?</span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  char s[32]; </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&t)); </span> <div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">  sprintf在MFC中也能找C的知韻ICString::FormatQstrftime在MFC中自然也有她的同道:CTime::FormatQ这一对由于从</span><a style="color: #0000ff" target="_blank">面向对象</a><span style="color: #0000ff">哪里得到了赞助,用以写出的代码更觉优?</span><br /><span style="color: #0000ff">===================================================================== </span><br /><br />获取旉及时间参数方法:<br /><span style="color: red">static CTime WINAPI GetCurrentTime( ); </span> <div id="c6y00q0" class="spctrl"></div><span style="color: red">  获取pȝ当前日期和时间。返回表C当前日期和旉的CTime对象?nbsp;<br />CString Format(LPCTSTR pszFormat) const; <div id="06maayk" class="spctrl"></div>  CTime对象中的旉信息格式化ؓ字符丌Ӏ参数pszFormat是格式化字符Ԍ与printf中的格式化字W串cMQ格式化字符串中带有%前缀的格式码会被相应的CTime旉分量代替Q而其他字W会原封不动的拷贝到q回字符串中。格式码及含义如下: <div id="egcigg0" class="spctrl"></div>  %aQ周的英文羃写Ş式? <div id="8em0ewm" class="spctrl"></div>  %AQ周的英文全名Ş式? <div id="m880um0" class="spctrl"></div>  %bQ?月的英文~写形式? <div id="0som8g0" class="spctrl"></div>  %BQ月的英文全名Ş式? <div id="gi8ciqq" class="spctrl"></div>  %cQ?完整的日期和旉? <div id="oa8k08a" class="spctrl"></div>  %dQ十q制形式的日期(01-31Q? <div id="iuywa8g" class="spctrl"></div>  %HQ?4时制的时Q?0-23Q? <div id="sw8g0sw" class="spctrl"></div>  %IQ?12时制的时Q?0-11Q? <div id="0o8oese" class="spctrl"></div>  %jQ?十进制表C的一q中的第几天Q?01-366Q? <div id="qeqwk0w" class="spctrl"></div>  %mQ?月的十进制表C(01-12Q? <div id="gu08ww0" class="spctrl"></div>  %MQ十q制表示的分钟(00-59Q? <div id="c8000co" class="spctrl"></div>  %pQ?12时制的上下午标C(AM/PMQ? <div id="giwaow8" class="spctrl"></div>  %SQ?十进制表C的U(00-59Q? <div id="momy8mg" class="spctrl"></div>  %UQ?一q中的第几个星期Q?0-51Q,星期日是一周的W一天? <div id="cgkqm88" class="spctrl"></div>  %WQ?一q中的第几个星期Q?0-51Q,星期一是一周的W一天? <div id="ga8cias" class="spctrl"></div>  %wQ?十进制表C的星期几(0-6Q? <div id="ycgw8ac" class="spctrl"></div>  %YQ?十进制表C的q?</span><br />      CTime(const SYSTEMTIME& st,int nDST = - 1) ; <div id="8kawa80" class="spctrl"></div>  以一个SYSTEMTIMEl构体变量来构造CTime对象。SYSTEMTIMEl构体也是我们对日期旉的常用表C方式。参数stZ本地旉表示的SYSTEMTIME对象Q参数nDST同上? <div id="k88geew" class="spctrl"></div>  int GetYear( ) constQ? <div id="08mqeww" class="spctrl"></div>  获取CTime对象表示旉的年份。范围从1970q??日到2038q_包括2038q_1?8日? <div id="eawmaqm" class="spctrl"></div>  int GetMonth( ) const; <div id="kmso80i" class="spctrl"></div>  获取CTime对象表示旉的月份。范围ؓ1?2? <div id="0gmquw8" class="spctrl"></div>  int GetDay( ) const; <div id="uyuq8w0" class="spctrl"></div>  获取CTime对象表示旉的日期。范围ؓ1?1? <div id="m00u0o8" class="spctrl"></div>  int GetHour( ) const; <div id="s0g00e0" class="spctrl"></div>  获取CTime对象表示旉的小时。范围ؓ0?3? <div id="oag0ck0" class="spctrl"></div>  int GetMinute( ) const; <div id="wq0c8wa" class="spctrl"></div>  获取CTime对象表示旉的分钟。范围ؓ0?9? <div id="cyu8yqq" class="spctrl"></div>  int GetSecond( ) const; <div id="eiuim88" class="spctrl"></div>  获取CTime对象表示旉的秒。范围ؓ0?9? <div id="ue8agu8" class="spctrl"></div>  int GetDayOfWeek( ) const; <div id="e0s0s0y" class="spctrl"></div>  此函数的q回DCCTime对象代表的是星期几,1表示是周日,2表示是周一Q以此类推?br /> <br />操作与比较:<br />CTime operator +(CTimeSpan timeSpan) const; <div id="c80u0o0" class="spctrl"></div>  CTime对象和CTimeSpan对象相加Q返回一个CTime对象。实际意义就是在一个时间的基础上推后一个时间间隔,得到一个新的时间? <div id="8mi8q00" class="spctrl"></div>CTime operator -(CTimeSpan timeSpan) const; <div id="08gci8o" class="spctrl"></div>  CTime对象和一个CTimeSpan相减Q返回一个CTime对象。实际意义就是在一个时间的基础上提前一个时间间隔,得到一个新的时间? <div id="isaw0gk" class="spctrl"></div>CTimeSpan operator -(CTime time) const; <div id="wk0makk" class="spctrl"></div>  该CTime对象和另一个CTime对象相减Q返回一个CTimeSpan对象。实际意义就是计两个时间点的间隔,得到一个CTimeSpan对象? <div id="i08ywg0" class="spctrl"></div>CTime& operator +=(CTimeSpan span); <div id="0a0g0ac" class="spctrl"></div>  CTime对象增加一个span表示的时间间隔? <div id="ug0qm0c" class="spctrl"></div>CTime& operator -=(CTimeSpan span); <div id="8uye08y" class="spctrl"></div>  CTime对象减去一个span表示的时间间隔? <div id="88ui8ce" class="spctrl"></div>CTime& operator =(__time64_t time); <div id="080cwwq" class="spctrl"></div>  CTime对象赋予一个新的时间倹{? <div id="s6800ey" class="spctrl"></div>  单说下剩下的几个重蝲iq算W: <div id="ei08uee" class="spctrl"></div>  operator == Q?比较两个l对旉是否相等? <div id="kqqmiac" class="spctrl"></div>  operator != Q?比较两个l对旉是否不相{? <div id="8cqc8qa" class="spctrl"></div>  operator > Q?比较两个l对旉Q是否前一个大于后一个? <div id="suigs8c" class="spctrl"></div>  operator < Q?比较两个l对旉Q是否前一个小于后一个? <div id="so8i0eg" class="spctrl"></div>  operator >= Q?比较两个l对旉Q是否前一个大于等于后一个? <div id="qai0kco" class="spctrl"></div>  operator <= Q?比较两个l对旉Q是否前一个小于等于后一?br /></div><img src ="http://www.shnenglu.com/Mumoo/aggbug/195738.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Mumoo/" target="_blank">Mumoo</a> 2012-11-27 16:20 <a href="http://www.shnenglu.com/Mumoo/archive/2012/11/27/195738.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ListControl 讄表格行高与字?/title><link>http://www.shnenglu.com/Mumoo/archive/2012/11/20/195410.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Tue, 20 Nov 2012 08:00:00 GMT</pubDate><guid>http://www.shnenglu.com/Mumoo/archive/2012/11/20/195410.html</guid><wfw:comment>http://www.shnenglu.com/Mumoo/comments/195410.html</wfw:comment><comments>http://www.shnenglu.com/Mumoo/archive/2012/11/20/195410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Mumoo/comments/commentRss/195410.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Mumoo/services/trackbacks/195410.html</trackback:ping><description><![CDATA[讄行高Q?br />CImageList   m_l;   <br /> m_l.Create(1,18,TRUE|ILC_COLOR32,1,0);   <br /> SetImageList(&m_l,LVSIL_SMALL); <br /><br />讄字体Q? <p> </p> <p>CFont m_font;</p> <p>m_font.CreatePointFont(100, "新宋?);<br />m_listCtrl.SetFont(&m_font);</p><img src ="http://www.shnenglu.com/Mumoo/aggbug/195410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Mumoo/" target="_blank">Mumoo</a> 2012-11-20 16:00 <a href="http://www.shnenglu.com/Mumoo/archive/2012/11/20/195410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CDateTimeCtrl 的?/title><link>http://www.shnenglu.com/Mumoo/archive/2012/11/06/194714.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Tue, 06 Nov 2012 07:03:00 GMT</pubDate><guid>http://www.shnenglu.com/Mumoo/archive/2012/11/06/194714.html</guid><wfw:comment>http://www.shnenglu.com/Mumoo/comments/194714.html</wfw:comment><comments>http://www.shnenglu.com/Mumoo/archive/2012/11/06/194714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Mumoo/comments/commentRss/194714.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Mumoo/services/trackbacks/194714.html</trackback:ping><description><![CDATA[<div align="left"> <div align="left"><font style="font-size: 14px" color="#0099cc"><strong style="color: red; font-size: 10pt">转自Q?a >http://blog.163.com/zgkingdom@126/blog/static/227347320077214150750/</a><br /></strong><strong><br />1.CDateTimeCtrl 格式</strong></font></div> <div align="left"><font color="#000000" face="宋体">CDateTimeCtrl 讑֮?#8220;ShowNone” ?<font face="宋体">True</font></font></div> <div align="left"></div> <div align="left"><strong><font style="font-size: 14px" color="#0099cc">2.Format 初始?/font></strong></div></div> <div align="left"><font face="宋体"><font face="宋体">CDateTimeCtrl m_Date1;</font></font></div> <div align="left"><font face="宋体">m_Date1.SetFormat(_T("yyyy'- 'MM'- 'dd"));<br /></font> <div align="left"><font face="宋体"><strong><font style="font-size: 14px" color="#0099cc">3.Format初始化选择认框ؓI?/font></strong></font></div> <div align="left"><font face="宋体"><font face="宋体">CDateTimeCtrl m_Date1;</font></font></div> <div align="left"><font face="宋体"><font face="宋体">::SendMessage( this->m_Date1.m_hWnd,(UINT)DTM_SETSYSTEMTIME,GDT_NONE, NULL);</font></font></div> <div align="left"></div> <div align="left"> <p><font face="宋体"><strong><font style="font-size: 14px" color="#0099cc">4.Format初始化选择认框变化是产生的动?/font></strong></font></p> <p><font face="宋体">voidPageDialog4::OnDtnDatetimechangeDatetimepicker1(NMHDR *pNMHDR,LRESULT *pResult)<br />{<br />LPNMDATETIMECHANGE pDTChange =reinterpret_cast<LPNMDATETIMECHANGE>(pNMHDR);<br />// TODO: 在此d控g通知处理E序代码<br />if(pDTChange->dwFlags == GDT_NONE)<br />{<br />this->m_Date2.EnableWindow(FALSE);<br />}<br />else if (pDTChange->dwFlags == GDT_VALID)<br />{<br />if( this->m_Date2.IsWindowEnabled() == FALSE)<br />{<br />this->m_Date2.EnableWindow(TRUE);<br />CTime theTime = CTime::GetCurrentTime();<br />this->m_Date1.SetTime(&theTime);<br />this->m_Date2.SetTime(&theTime); <br />}<br />}</font></p> <p><font face="宋体">*pResult= 0;<br />}</font></p> <p><font face="宋体"><font face="宋体"><strong><font style="font-size: 14px" color="#0099cc">5.获取旉</font></strong></font></font></p> <p><font face="宋体"><font face="宋体">CTimetimeTime;<br />CString szDate;<br />CDateTimeCtrl* pCtrl =&this->m_Date1;<br />DWORD dwResult =pCtrl->GetTime(timeTime);<br />if (dwResult == GDT_VALID)<br />{<br />szDate = timeTime.Format(TEXT("%Y/%m/%d"));<br />}<br /><br />获取旉的第二种ҎQ?br /><br /><br /></font></font></p> <p><font face="宋体"><font face="宋体"><font face="宋体"><strong><font style="font-size: 14px" color="#0099cc">6.ҎFormat格式讑֮旉</font></strong></font></font></font></p> <p><font face="宋体">CTime theTime = CTime::GetCurrentTime();<br />this->m_Date1.SetTime(&theTime);</font></p></div></div><img src ="http://www.shnenglu.com/Mumoo/aggbug/194714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Mumoo/" target="_blank">Mumoo</a> 2012-11-06 15:03 <a href="http://www.shnenglu.com/Mumoo/archive/2012/11/06/194714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ LNK2001错误ȝ http://www.shnenglu.com/Mumoo/archive/2012/10/22/193673.htmlMumooMumooMon, 22 Oct 2012 07:19:00 GMThttp://www.shnenglu.com/Mumoo/archive/2012/10/22/193673.htmlhttp://www.shnenglu.com/Mumoo/comments/193673.htmlhttp://www.shnenglu.com/Mumoo/archive/2012/10/22/193673.html#Feedback0http://www.shnenglu.com/Mumoo/comments/commentRss/193673.htmlhttp://www.shnenglu.com/Mumoo/services/trackbacks/193673.html本文转蝲?/span>http://www.shnenglu.com/jialisoft/archive/2012/10/11/193149.html
 

学习VCQ+时经怼遇到链接错误LNK2001Q该错误非常讨厌Q因为对于编E者来_最好改的错误莫q于~译错误Q而一般说来发生连接错误时Q编译都已通过。生连接错误的原因非常多,其LNK2001错误Q常怋Z明其所以然。如果不深入地学习和理解VCQ+Q要x正连接错?/span>LNK2001非常困难

unresolved external symbol Q不定的外?/span>W号Q?/span>

如果q接E序不能在所有的库和目标文g内找到所引用的函数、变量或标签Q将产生此错误消息。一般来_发生错误的原因有两个Q?/span>

(1) 所引用的函数、变量不存在、拼写不正确或者用错误;

(2) 可能使用了不同版本的q接库?/span>

以下是可能?/span>LNK2001错误的原因:   
1. ׃~码错误D?/span>LNK2001?/span>   
(1) 不相匚w的程序代码或模块定义(.DEF)文g能导?/span>LNK2001。例?/span>,   如果?/span>CQ+   源文件内声明了一变量“var1”Q却试图在另一文g内以变量“VAR1”讉K该变?/span>,发生该错误?/span>   
(2) 如果使用的内联函数是?/span>.CPP文g内定义的Q而不是在头文件内定义导?/span>LNK2001错误?/span>   
(3) 调用函数时如果所用的参数cd同函数声明时的类型不W将会?/span>LNK2001?/span>   
(4) 试图从基cȝ构造函数或析构函数中调用虚拟函数时会DLNK2001?/span>   
(5) 要注意函数和变量的可公用性,只有全局变量、函数是可公用的?/span> 静态函数和静态变量具有相同的使用范围限制。当试图从文件外部访问Q何没有在该文件内声明的静态变量时导致编译错误或LNK2001?/span>   
函数内声明的变量(局部变?/span>)   只能在该函数的范围内使用?/span> 
CQ+的全局帔R只有静态连接性能。这不同?/span>CQ如果试囑֜CQ+的多个文件内使用全局变量也会产生LNK2001错误。一U解决的Ҏ是需要时在头文g中加入该帔R的初始化代码Qƈ?/span>.CPP文g中包含该头文Ӟ另一U方法是使用时给该变量赋以常数?/span> 
  
2. ׃~译和链接的讄而造成?/span>LNK2001 
(1) 如果~译时用的?/span>/NOD(/NODEFAULTLIB)选项Q程序所需要的q行库和MFC库在q接时由~译器写入目标文件模块,   但除非在文g中明包含这些库名,否则q些库不会被链接q工E文件。在q种情况下?/span>/NOD导致错?/span>LNK2001?/span>   
(2) 如果没有?/span>wWinMainCRTStartup讑֮E序入口Q在使用Unicode?/span>MFC时将得到“unresolved   external   on   _WinMain@16”?/span>LNK2001错误信息?/span>   
(3)使用/MD选项~译?/span>,既然所有的q行库都被保留在动态链接库之内Q源文g中对“func”的引用,在目标文仉卛_“__imp__func”   的引用。如果试图用静态库LIBC.LIB?/span>LIBCMT.LIBq行q接Q将?/span>__imp__func上发?/span>LNK2001Q如果不使用/MD选项~译Q在使用MSVCxx.LIBq接时也会发?/span>LNK2001?/span>   
(4)使用/ML选项~译Ӟ如用LIBCMT.LIB链接会在_errno上发?/span>LNK2001?/span>   
(5)当编译调试版的应用程序时Q如果采用发行版模态库q行q接也会产生LNK2001Q同P使用调试版模态库q接发行版应用程序时也会产生相同的问题?/span>   
(6) 不同版本的库和编译器的؜合用也能生问题,因ؓ新版的库里可能包含早先的版本没有的符号和说明?/span>   
(7) 在不同的模块使用内联和非内联的编译选项能够DLNK2001。如果创?/span>CQ+库时打开了函数内联(/Ob1?/span>/Ob2)Q但是在描述该函数的相应头文仉却关闭了函数内联Q没?/span>inline关键字)Q这时将得到该错误信息。ؓ避免该问题的发生Q应该在相应的头文g中用inline关键字标志内联函数?/span>   

(8) 不正的/SUBSYSTEM?/span>/ENTRY讄也能DLNK2001?/span>

其实Q?/span>LNK2001的原因还有很多,以上的原因只是一部分而已?/span>

上面错误的原因是在程序中q反了标?/span>C++的规定而引L。下面还要说明一中由于编译器而引L错误Q?/span>

在标?/span>C++中模板类的定义和实现是不能分开的,原因是类模板和函数模杉K不是真正的定义,真正的定义是在模板实例化时由~译器生成的。如果将模板的定义和实现分离的话Q编译器在生成定义时׃因ؓ找不到实现而报错?/span>

在标?/span>C++中模板类的定义和实现是可以像普通类一样分开来存?/span>(cd义放?/span>.h中,cd现放?/span>.cpp?/span>)。然而这个实现v来太困难Q所以大多数~译器都不支?/span>(比如VC)。这P如果?/span>VC中编译代码,代码中将模板的定义和实现分开了,׃产生LNK2001的错误?/span>



Mumoo 2012-10-22 15:19 发表评论
]]>ListCtrl 获取首列值相同的插入法http://www.shnenglu.com/Mumoo/archive/2012/09/04/189420.htmlMumooMumooTue, 04 Sep 2012 06:48:00 GMThttp://www.shnenglu.com/Mumoo/archive/2012/09/04/189420.htmlhttp://www.shnenglu.com/Mumoo/comments/189420.htmlhttp://www.shnenglu.com/Mumoo/archive/2012/09/04/189420.html#Feedback0http://www.shnenglu.com/Mumoo/comments/commentRss/189420.htmlhttp://www.shnenglu.com/Mumoo/services/trackbacks/189420.htmlListCtrl的InsertItemҎ默认首列不相同,若首列值相同,则每ơ均插入W?行?br />修改法如下Q?br />int nSize = 100;

int nCount = 0;
 for (int i = 0; i < nSize; i++)
 {
   CString sValue;
  sValue.Format("%d", nCount);

  int nInsLine = InsertItem(nCount, sValue);
  nCount++;

  int nColumn = 0;
  for (int j = 0; j < vRecord.size(); j++)
  {
     sValue = recordItem.sValue;
     SetItemText(nInsLine, nColumn, sValue);
   nColumn++; 
  }
 }



Mumoo 2012-09-04 14:48 发表评论
]]>C++ 获取字符串中间的字符串~http://www.shnenglu.com/Mumoo/archive/2012/08/23/188060.htmlMumooMumooThu, 23 Aug 2012 09:27:00 GMThttp://www.shnenglu.com/Mumoo/archive/2012/08/23/188060.htmlhttp://www.shnenglu.com/Mumoo/comments/188060.htmlhttp://www.shnenglu.com/Mumoo/archive/2012/08/23/188060.html#Feedback0http://www.shnenglu.com/Mumoo/comments/commentRss/188060.htmlhttp://www.shnenglu.com/Mumoo/services/trackbacks/188060.htmlAllCode_Release?/PCPrintManage?/USBRegedit;
   //Dest:   PCPrintManage
   int nURLFindFirstSecond = sURL.ReverseFind('?');
   ASSERT(nURLFindFirstSecond != -1);
   CString sMidDir = sURL.Mid(nURLFindFirst+2, nURLFindFirstSecond-(nURLFindFirst+2));
   sSubCodeOutPath = m_sCodeOutPath + "\\" + sMidDir;
   sSubCodeOutPath.Replace("?", "");

Mumoo 2012-08-23 17:27 发表评论
]]>
C++ staticText昄内容更改http://www.shnenglu.com/Mumoo/archive/2012/07/20/184306.htmlMumooMumooFri, 20 Jul 2012 02:17:00 GMThttp://www.shnenglu.com/Mumoo/archive/2012/07/20/184306.htmlhttp://www.shnenglu.com/Mumoo/comments/184306.htmlhttp://www.shnenglu.com/Mumoo/archive/2012/07/20/184306.html#Feedback0http://www.shnenglu.com/Mumoo/comments/commentRss/184306.htmlhttp://www.shnenglu.com/Mumoo/services/trackbacks/184306.html1Q创建CStatic Control变量 m_sStatic;
2)OnInit函数?调用Qm_sStatic.SetWindowText(sName);


Mumoo 2012-07-20 10:17 发表评论
]]>
C++ d右键菜单http://www.shnenglu.com/Mumoo/archive/2012/07/10/182623.htmlMumooMumooTue, 10 Jul 2012 07:35:00 GMThttp://www.shnenglu.com/Mumoo/archive/2012/07/10/182623.htmlhttp://www.shnenglu.com/Mumoo/comments/182623.htmlhttp://www.shnenglu.com/Mumoo/archive/2012/07/10/182623.html#Feedback0http://www.shnenglu.com/Mumoo/comments/commentRss/182623.htmlhttp://www.shnenglu.com/Mumoo/services/trackbacks/182623.html afx_msg void OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/); //函数声明

 void CBarView::OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/) //函数?br /> {
  // TODO: Add your message handler code here
  CMenu menu;
  menu.LoadMenu(IDR_RIGHTMENU);
  CMenu* pop=menu.GetSubMenu(0);
  POINT ptMouse;
  GetCursorPos(&ptMouse);
  pop->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,ptMouse.x,ptMouse.y, this);

 }





Mumoo 2012-07-10 15:35 发表评论
]]>
C++E序设计注意事项http://www.shnenglu.com/Mumoo/archive/2012/06/21/179617.htmlMumooMumooThu, 21 Jun 2012 08:45:00 GMThttp://www.shnenglu.com/Mumoo/archive/2012/06/21/179617.htmlhttp://www.shnenglu.com/Mumoo/comments/179617.htmlhttp://www.shnenglu.com/Mumoo/archive/2012/06/21/179617.html#Feedback0http://www.shnenglu.com/Mumoo/comments/commentRss/179617.htmlhttp://www.shnenglu.com/Mumoo/services/trackbacks/179617.html1.
  所有变量定义位于函数开始处?/p>

2.
 量避免全局变量Q全局变量需于实现文件中定义Q头文g中extern声明?/p>

3.
点零值比较采用区间倹{?/p>

4.
保证正确的前提下量使用UMq算?/p>

5.
If语句、switch语句优先处理出现概率大的情况?/p>

6.
 指针与NULL比较反写如:NULL==p?/p>

7.
 循环嵌套时最长的循环攑ֆ层短的放外层?/p>

8.
量不在循环体内修改循环变量?/p>

9.
凡是无返回倹{无参数、Q意类型指针参数的函数均用void或void指针?/p>

10.
适当使用constQ用目的限于节省空间、提高效率、不允许修改或可能生的函数参数修改?/p>

11.
对于可变、多变的寄存器变量、多U程׃n变量Q在l过代码优化处理的releas版本下需使用volatilecd修饰W修饰变量?/p>

12.
多参数函数应使用l构体减参C数?/p>

13.
负数右移操作时会带上W号位,高位补零或补一取决~译器。左UL右移时移动位C能大于数据的存储位数?/p>

14.
 Release版下assert()语句无效Q故非调试状态下q是可能出现数据溢出而不报错?/p>

15.
使用宏定?define定义文g路径时候用带双引受双反斜杠的字符丌Ӏ宏定义函数时候尽可能的用括受宏定义中的换行接箋后和行v始处保证无Q何字W?/p>

16.
一U变量名UC表一D|限空_其内容称为|c/c++中称之ؓ从左值到叛_的转换。另一U变量是一D|限空间的引用Q同时规定空间的长度(数组)?/p>

17.
创徏动态二l数l?指向指针的指?一l用new char*[一l度] 或?(char**)malloc(一l度).二维循环于一l下动态创建new char[二维度] 或?char*)malloc(二维?。释攑֊态二l数l刚好相反,先@环释放二l_再释放一l?/p>

18.
使用vector作ؓ全局变量时候存在问题。release版下push_backQ)会出现错误,估计是vector本nh动态扩展性而做为全局变量其空间大是固定的。如果允许其变量使用push_backd数据则可能导致堆数据破坏。解军_法是变量定义于cMq完成push_back再赋g全局变量?/p>

19.
利用字符创的l束标识'/0' Q其ascII 码是 0,0x00Q而非I格(其ascII 码是 32Q?x20)可判断字W串l束以否Qƈ可以Ud指针的方式计字W串的大?/p>

20.
Dll库,不但可以导出函数接口Q也可以导出cR如Qcalss _declspec(dllexport) CALSSNAME{}; class _declspec(dllimport) CLASSNAME{};#pragma comment(lib,"path")?/p>

21.
合理使用整数? ?% 可取得整?点数整数部?的各个位?%10 /10)Q合理用h,p,q,t做@环下的指针移动可以构建链表和逆序链表。合理利用数l下标可实现折半循环逆序数组(字符?

22.
int a= 4; (++a) += (a++)  a= ?

23.
字符数组的大不要忘了最后的'/0'Q字W指针不能用sizeof(point)计算Q?/p>

24.
free后的内存I间只是被标Cؓ了可重新分配Q但作ؓ该进E的内存块他依然hd权限Qؓ了避免内存؜乱需要NULL指针避免野指针的存在?/p>

25.
不存在下载文件夹的说法,只有下蝲文g数据和文件目录信息,文g夹于本地创徏?/p>

26.
使用哈希查找加速检索,哈希q程是建立直接索引的过E,l过哈希处理的数据在查找时候可以通过函数计算后直接定?哈希表的索引值相当于数组索引直接定位)到该数据。哈希不能做到百分百的唯一Q所以需要处理哈希冲H,通常使用链表加关键值匹配?/p>

27.
减少E序与外存的交互ơ数可提速程序执行,考虑使用链表一ơ加载多ơ用、内存块分配或者文件映等Ҏ?/p>

28.
对大数据大文件的处理Q考虑使用多线E均分工作Q务的办法从而可降低对处理器的占用率?br />



Mumoo 2012-06-21 16:45 发表评论
]]>
各类型数据{?/title><link>http://www.shnenglu.com/Mumoo/archive/2012/06/21/179609.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Thu, 21 Jun 2012 07:25:00 GMT</pubDate><guid>http://www.shnenglu.com/Mumoo/archive/2012/06/21/179609.html</guid><wfw:comment>http://www.shnenglu.com/Mumoo/comments/179609.html</wfw:comment><comments>http://www.shnenglu.com/Mumoo/archive/2012/06/21/179609.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Mumoo/comments/commentRss/179609.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Mumoo/services/trackbacks/179609.html</trackback:ping><description><![CDATA[<p>string ?CString <br />CString.format("%s", string.c_str()); <br /><br />char ?CString <br />CString.format("%s", char*); <br /><br />char ?string <br />string s(char *); <br /><br />string ?char * <br />char *p = string.c_str(); <br /><br />CString ?string <br />string CStringTostring(CString str)<br />{<br />string s;</p> <p>s.append(str.GetBuffer(str.GetLength()));</p> <p>str.ReleaseBuffer();<br /><br />return s;<br /><br />}<br /><br />1Qstring -> CString <br />CString.format("%s", string.c_str()); <br />用c_str()实比data()要好. <br />2Qchar -> string <br />string s(char *); <br />你的只能初始化,在不是初始化的地Ҏ好还是用assign(). <br /><br /><br />?a target="_blank"><font color="#003399">C++标准函数?/font></a>》中说的 <br />有三个函数可以将字符串的内容转换为字W数l和C—string <br />1.data(),q回没有”{post.content}“的字W串数组 <br />2,c_str()Q返回有”{post.content}“的字W串数组 <br />3Qcopy() <br /><br />--------------------------------------------------------------- <br /><br />CString与int、char*、char[100]之间的{? - <br /><br /><br />CString与int、char*、char[100]之间的{? - <br /><br /><br /><br />CString互{int <br /><br />字W{换ؓ整数Q可以用atoi、_atoi64或atol?<br />而将数字转换为CString变量Q可以用CString的Format函数。如 <br />CString s; <br />int i = 64; <br />s.Format("%d", i) <br />Format函数的功能很强,值得你研I一下?<br /><br />void CStrDlg::OnButton1() <br />{ <br />// TODO: Add your control notification handler code here <br />CString <br />ss="1212.12"; <br />int temp=atoi(ss); <br />CString aa; <br />aa.Format("%d",temp); <br />AfxMessageBox("var is " + aa); <br />} <br /><br />sart.Format("%s",buf); <br /><br />CString互{char* <br /><br />///char * TO cstring <br />CString strtest; <br />char * charpoint; <br />charpoint="give string a value"; <br />strtest=charpoint; <br /><br /><br />///cstring TO char * <br />charpoint=strtest.GetBuffer(strtest.GetLength()); <br /><br />标准C里没有string,char *==char []==string <br /><br />可以用CString.Format("%s",char *)q个Ҏ来将char *转成CString。要把CString转成char *Q用操作W(LPCSTRQCString可以了?<br /><br /><br />CString转换 char[100] <br /><br />char a[100]; <br />CString str("aaaaaa"); <br />strncpy(a,(LPCTSTR)str,sizeof(a)); </p><img src ="http://www.shnenglu.com/Mumoo/aggbug/179609.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Mumoo/" target="_blank">Mumoo</a> 2012-06-21 15:25 <a href="http://www.shnenglu.com/Mumoo/archive/2012/06/21/179609.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tinyxml 合ƈ两个XML文ghttp://www.shnenglu.com/Mumoo/archive/2012/06/18/179330.htmlMumooMumooMon, 18 Jun 2012 09:53:00 GMThttp://www.shnenglu.com/Mumoo/archive/2012/06/18/179330.htmlhttp://www.shnenglu.com/Mumoo/comments/179330.htmlhttp://www.shnenglu.com/Mumoo/archive/2012/06/18/179330.html#Feedback0http://www.shnenglu.com/Mumoo/comments/commentRss/179330.htmlhttp://www.shnenglu.com/Mumoo/services/trackbacks/179330.htmlBOOL  MergeXMLToDesXML(const CString &sDesXMLPath, const CString &sSrcXMLPath)
{
 TiXmlDocument XmlDocSrc(sSrcXMLPath);
 if (!XmlDocSrc.LoadFile())
 {
  LOG("GetJobXMLInfo:加蝲XML文g%sp|", sSrcXMLPath);
  return FALSE;
 }

 TiXmlDocument XmlDocDes(sDesXMLPath);
 if (!XmlDocDes.LoadFile())
 {
  LOG("GetJobXMLInfo:加蝲XML文g%sp|", sDesXMLPath);
  return FALSE;
 }

 TiXmlElement *pFirstChildSrc = XmlDocSrc.FirstChildElement("Root");

 TiXmlElement *pFirstChildDes = XmlDocDes.FirstChildElement("Root");
 if (TiXmlElement* pRecordAtributeDes = pFirstChildDes->FirstChildElement("FirstChild"))
 {
  while(pRecordAtributeDes)
  {
   pFirstChildSrc->InsertEndChild(*pRecordAtributeDes); 
   pRecordAtributeDes = pRecordAtributeDes->NextSiblingElement();
  }
 }

 XmlDocSrc.SaveFile(sDesXMLPath);
 return TRUE;
}



Mumoo 2012-06-18 17:53 发表评论
]]>
C++ 调用windows囄和传真查看器打开囄http://www.shnenglu.com/Mumoo/archive/2012/06/18/179313.htmlMumooMumooMon, 18 Jun 2012 08:41:00 GMThttp://www.shnenglu.com/Mumoo/archive/2012/06/18/179313.htmlhttp://www.shnenglu.com/Mumoo/comments/179313.htmlhttp://www.shnenglu.com/Mumoo/archive/2012/06/18/179313.html#Feedback0http://www.shnenglu.com/Mumoo/comments/commentRss/179313.htmlhttp://www.shnenglu.com/Mumoo/services/trackbacks/179313.html
CString sPicturePath = "C:\Users\Public\Pictures\Sample Pictures\八仙?jpg";

CString sPicturePara= "shimgvw.dll ImageView_Fullscreen "+ sPicturePath ;

 ShellExecute(NULL, NULL, "rundll32.exe", 
    sPicturePara,"C:\\WINDOWS\\system32", SW_SHOW);



Mumoo 2012-06-18 16:41 发表评论
]]>
C++ 对话?不选定所有项的提C?/title><link>http://www.shnenglu.com/Mumoo/archive/2012/06/11/178411.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Mon, 11 Jun 2012 06:58:00 GMT</pubDate><guid>http://www.shnenglu.com/Mumoo/archive/2012/06/11/178411.html</guid><wfw:comment>http://www.shnenglu.com/Mumoo/comments/178411.html</wfw:comment><comments>http://www.shnenglu.com/Mumoo/archive/2012/06/11/178411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Mumoo/comments/commentRss/178411.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Mumoo/services/trackbacks/178411.html</trackback:ping><description><![CDATA[int nTest = ((CButton *)GetDlgItem(IDC_RADIO1))->GetCheck(); <br />int nTest1 = ((CButton *)GetDlgItem(IDC_RADIO2))->GetCheck();//单选框  <br />if (nTest == 1) <br />{ <br />AfxMessageBox("你好a"); <br />} <br />else if (nTest1 == 1) <br />{ <br />AfxMessageBox("你好b"); <br />} <br />else <br />{ <br />UpdateData(TRUE); <br />m_comMsg = "你好"; <br />UpdateData(FALSE); <br />}<br /><br />//m_sSeclectLevel:静态框的value变量<br />//m_ctrlSecretLevel:复选框变量<br /> <p>m_ctrlSecretLevel.GetWindowText(m_sSeclectLevel);</p> <p>if (m_sSeclectLevel.IsEmpty())<br />{<br />MessageBox(PRINT_MSG, "打印监控", MB_OK | MB_ICONERROR);<br />}<br />else<br />{<br />LOG("认打印Q打印密Uؓ %s", m_sSeclectLevel);<br />OnOK();<br />}//复选框<br /></p><br />改变提示信息字体颜色<br />Class -> cd ->属?-> Message -> WM_CTLCOLOR -> <Add> OnCtlColor<br />int nId = pWnd-> GetDlgCtrlID(); <br />if(nCtlColor == CTLCOLOR_STATIC) <br />{ <br />if(nId == IDC_STATIC1) <br />{ <br />pDC-> SetTextColor((COLORREF)(RGB(255,0,0))); <br />} <br />}<img src ="http://www.shnenglu.com/Mumoo/aggbug/178411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Mumoo/" target="_blank">Mumoo</a> 2012-06-11 14:58 <a href="http://www.shnenglu.com/Mumoo/archive/2012/06/11/178411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ ListControl 插入数值的Ҏ调用http://www.shnenglu.com/Mumoo/archive/2012/06/07/177914.htmlMumooMumooThu, 07 Jun 2012 06:38:00 GMThttp://www.shnenglu.com/Mumoo/archive/2012/06/07/177914.htmlhttp://www.shnenglu.com/Mumoo/comments/177914.htmlhttp://www.shnenglu.com/Mumoo/archive/2012/06/07/177914.html#Feedback0http://www.shnenglu.com/Mumoo/comments/commentRss/177914.htmlhttp://www.shnenglu.com/Mumoo/services/trackbacks/177914.html列表控g可以看作是功能增强的 ListBoxQ它提供了四U风|而且可以同时昄一列的多中属性倹{?br />MFC 中?CListCtrl cL装列表控g的各U操作?br />创徏一个窗?可通过调用 BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
dwStyle 中可以用以下一些列表控件的专用风格Q?
l LVS_ICON ,LVS_SMALLICON ,LVS_LIST, LVS_REPORT q四U风格决定控件的外观Q同时只可以选择其中一U,分别对应Q大图标昄Q小图标昄Q列表显C,详细报表昄

l LVS_EDITLABELS l点的显C字W可以被~辑Q对于报表风格来讲可~辑的只为第一列?
l LVS_SHOWSELALWAYS 在失ȝҎ也显C当前选中的结?
l LVS_SINGLESEL 同时只能选中列表中一?
也可通过listcontrl对话框的 View 属?>Report

讄为Report属性后Q若要ListControl昄为列表状Q则在Init函数中,dQ?/span>
ListView_SetExtendedListViewStyle(m_listctrl.m_hWnd, LVS_EX_GRIDLINES|LVS_EX_ONECLICKACTIVATE|LVS_EX_FULLROWSELECT);

int InsertItem( int nItem, LPCTSTR lpszItem ); 插入?br />
nItemQ指明插入位|?br />lpszItemQؓ昄字符?br />?LVS_REPORT 风格外其他三U风格都只需要直接调?InsertItem 可以了Q但如果使用报表风格必d讄列表控g中的列信息?br />
int InsertColumn( int nCol, LPCTSTR lpszColumnHeading, int nFormat , int nWidth, int nSubItem); 插入?br />
iColQؓ列的位置Q从零开?br />lpszColumnHeadingQؓ昄的列?br />nFormatQؓ昄寚w方式
nWidthQؓ昄宽度
nSubItemQؓ分配该列的列索引?

BOOL SetItemText( int nItem, int nSubItem, LPTSTR lpszText );讄每列的显C字W?br />
nItemQؓ行位|?br />nSubItemQؓ列位|?br />lpszTextQؓ昄字符

下面的代码演CZ如何讄多列q插入数据:
m_list.SetImageList(&m_listSmall,LVSIL_SMALL);//讄 ImageList
m_list.InsertColumn(0,"Col 1",LVCFMT_LEFT,300,0);//讄?br />m_list.InsertColumn(1,"Col 2",LVCFMT_LEFT,300,1);
m_list.InsertColumn(2,"Col 3",LVCFMT_LEFT,300,2);

m_list.InsertItem(0,"Item 1_1");//插入?br />m_list.SetItemText(0,1,"Item 1_2");//讄该行的不同列的显C字W?br />m_list.SetItemText(0,2,"Item 1_3")



Mumoo 2012-06-07 14:38 发表评论
]]>
C++ TinyXML的?/title><link>http://www.shnenglu.com/Mumoo/archive/2012/06/06/177810.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Wed, 06 Jun 2012 09:27:00 GMT</pubDate><guid>http://www.shnenglu.com/Mumoo/archive/2012/06/06/177810.html</guid><wfw:comment>http://www.shnenglu.com/Mumoo/comments/177810.html</wfw:comment><comments>http://www.shnenglu.com/Mumoo/archive/2012/06/06/177810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Mumoo/comments/commentRss/177810.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Mumoo/services/trackbacks/177810.html</trackback:ping><description><![CDATA[<div>dXML文gQTiXmlDocument XmlDoc(sJobXML);<br />                   if (!XmlDoc.LoadFile())<br />                   {<br />                       LOG("GetJobXMLInfo:加蝲XML文g%sp|", sJobXML);<br />                       return FALSE;<br />                     }<br /><br />获取根结点:TiXmlElement* rootElement = XmlDoc.RootElement(); <br /><br />获取根结点的W一个标{ր|TiXmlElement* pElement= rootElement->FirstChildElement();  <br /><br />获取标签值的W一个键| TiXmlElement* pChildElement= pElement->FirstChildElement(); <br /><br />获取该键值的所有属性|while ( pChildElement) <br />                                 {<br />                                    TiXmlAttribute* pAttribute= pChildElement->FirstAttribute(); //键值的W一个属性?br />                                    while ( pAttribute) <br />                                    {<br />                                          // pAttribute->Name() ——属性名UͼpAttribute->Value()——属性?br />                                         pAttribute= pAttribute->Next(); //依次获取其他属性?br />                                     }<br /><br />获取键值的W一个子属性?nbsp;  TiXmlElement* pSecElement = pChildElement->FirstChildElement();<br />                                    //pSecElement ->GetText()——子属性的属性?br />    <br /> 依次获取键值的n个子属性?nbsp;  TiXmlElement* pChildElement= pChildElement->NextSiblingElement();<br />                                  }</div><img src ="http://www.shnenglu.com/Mumoo/aggbug/177810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Mumoo/" target="_blank">Mumoo</a> 2012-06-06 17:27 <a href="http://www.shnenglu.com/Mumoo/archive/2012/06/06/177810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CString、BSTR和LPCTSTR之间的区别(转)http://www.shnenglu.com/Mumoo/archive/2012/06/04/177414.htmlMumooMumooMon, 04 Jun 2012 01:05:00 GMThttp://www.shnenglu.com/Mumoo/archive/2012/06/04/177414.htmlhttp://www.shnenglu.com/Mumoo/comments/177414.htmlhttp://www.shnenglu.com/Mumoo/archive/2012/06/04/177414.html#Feedback0http://www.shnenglu.com/Mumoo/comments/commentRss/177414.htmlhttp://www.shnenglu.com/Mumoo/services/trackbacks/177414.html 


 CString cstr(asdd);
 const char* ch = (LPCTSTR)cstr;

 CString.format("%s", char*);

 CString cstr(asdd);
 const char* ch = (LPCTSTR)cstr;

 char* = (LPTSTR)(LPCTSTR)cstr


一、定?/p>

1、CStringQ动态的TCHAR数组。它是一个完全独立的c,装?{操作符和字W串操作Ҏ?/p>

2、BSTRQ专有格式的字符Ԍ需要用系l函数来操纵Q。定义ؓQtypedef OLECHAR FAR* BSTR

3、LPCTSTRQ常量的TCHAR指针。定义ؓQtypedef const char* LPCTSTR

二、要?/p>

1、char*Q指向ANSI字符数组的指针,其中每个字符?位(有效数据是除掉最高位的其他七位)Q它保持

了与传统C/C++的兼宏V?/p>

2、LPSTRQ指向一个以“\0”l尾的ANSI字符数组的指针,可与char*互换使用Q它通常在Win32中用?/p>

其中LP表示长指针(long pointerQ?/p>

3、LPCSTRQ该数据cd的特性在于它的实例不能被使用它的API函数改变Q除此之外与LPSTR{同。其

中C表示帔RQCONSTANTQ?/p>

4、在Win16下长指针QLPQ和短指针(PQ有区别Q而在Win32下它们是没有区别的,都是32位?/p>

5、TCHAR在采用Unicode方式下编译时为wchar_tQ在普通编码方式下~译时位char?/p>

三、Unicode标准

1、ؓ了满程序代码国际化的需要,业界推出了Unicode标准Q它提供了一U简单和一致的表示字符串的

ҎQ所有字W中的字节都?6位(两个字节Q的|其数量也可以满几乎世界上所有书面语a字符?/p>

~码需求,开发程序时使用UnicodeQ类型位wchar_tQ是一U被鼓励的做法?/p>

2、LPWSTR和LPCWSTR由此产生Q它们的含义cM于LPSTR和LPCSTRQ不同的是字W数据wchar_t?/p>

16位,而char却ؓ8位?/p>

四、TCHAR数据cd

TCHAR数据cd是ؓ了实现ANSI和Unicode两种~码的通用而提出来?/p>

1、如果定义了_UNICODEQ则声明如下Q?/p>

typedef wchar_t TCHAR;

2、如果没有定义_UNICODEQ则声明如下Q?/p>

typedef char TCHAR;

q样可以让CString、LPTSTR和LPCTSTR中的每个字符都是TCHARcdQ而不考虑它们的编码格

式。而且CString是一个封装好了的c,更是大大地方便了用户的用?/p>

五、VC++中常用数据类型之间的转换

1、定?/p>

int i=100;

long l=2001;

float f=300.2;

double d=12345.119

char username[]="2008北京奥运";

char temp[200];

char* buf;

CString str;

_variant_t v1;

_bstr_t v2;

2、其他数据类型到字符串的转换

(1)短整形int->字符?/p>

itoa(i,temp,10); //按十q制把i转换为字W串存入temp?/p>

itoa(i,temp,2); //按二q制把i转换为字W串存入temp?/p>

(2)长整形long->字符?/p>

ltoa(l,temp,10);

3、从其他包含了字W串的变量中获取指向该字W串的指?/p>

(1)从CString变量中获取字W串

str="福四川";

buf=(LPSTR)(LPCTSTR)str;

(2)从BSTRcd的_varitant_t变量中获取字W串

v1=(_bstr_t)"E序?;

buf=_com_util::ConvertBSTRToString((_bstr_t)v1);

4、字W串转换为其他数据类?/p>

strcpy(temp,"123");

(1)i=atoi(temp); //字符?>短整型int

(2)l=atol(temp); //字符?>长整形long

(3)d=atof(temp); //字符?>点型double

5、其他数据类型{换到CString

(1)使用CString的成员函数Format来{?/p>

AQstr.Format("%d",i); //短整型int->CString

BQstr.Format("%f",f); //点数float->CString

(2)支持CString构造函数的数据cd可以直接赋|例如char*

str=username;

六、BSTR、_bstr_t和CCombBSTR

BSTRQ指向字W串?2位指针,_bstr_t和CComBSTR都是对它的封装?/p>

1、char*->BSTR的{?/p>

BSTR b=_com_util::ConvertStringToBSTR("数据");

注:使用之前需要加上comutil.h头文?/p>

2、BSTR->char*的{?/p>

char* p=_com_util::ConvertBSTRToString(b);

七、VARIANT、_variant_t和COleVariant

1、对于VARIANT变量的赋|首先lvt成员赋|指明数据cd。再对联合结构中相同数据cd的变量赋

|可参考VC98\Inlude\OAIDL.H头文件中关于tagVARIANTl构体的定义Q。D例如下:

VARIANT va;

va.vt=VT_l4; //指明数据cd

va.lVal=2008;

2、对于不马上赋值的VARIANTQ最好先使用void VariantInit(VARIANTARG FAR* pvarg)函数对其q行初始

化,其本质是vt讄为VT_EMPTY。vt与常用数据类型的对应关系Q略Q?/p>

3、_variant_t是VARIANT的封装类Q赋值可以用强制类型{换,其构造函C自动处理q些数据cd?/p>

例如Q?/p>

long l=222;

int i=100;

_variant_t lVal(l);

lVal=(long)i;

4、COleVariant与_variant_t的用方法基本一PCZ如下Q?/p>

COleVariant v3="字符?,v4=(long)1999;

CString str=(BSTR)v3.pbstrVal;

long l=v4.lVal;

八、其?/p>

1、对消息的处理中Q我们通常需要将WPARAM或LPARAM{?2位数据(DWORDQ分解成两个16位数?/p>

QWORDQ,例如Q?/p>

LPARAM lParam;

WORD loValue=LOWORD(lParam); //取低16?/p>

WORD hiValue=HIWORD(lParam); //取高16?/p>

2、对?6位的数据QWORDQ,我们可以使用同样的方法分解成高低两个8位的数据QBYTEQ,例如Q?/p>

WORD wValue;

BYTE loValue=LOBYTE(wValue); //取低8?/p>

BYTE hiValue=HIBYTE(wValue); //取高8?/p>

3、如何将CStringcd的变量赋lchar*cd的变?/p>

(1)CString::GetBuffer函数

char* p;

CString str="hello";

p=str.GetBuffer(str.GetLength());

str.ReleaseBuffer();

(2)strcpy函数

CString str("aaaaaaaa");

strcpy(str.GetBuffer(10),"aa");

str.ReleaseBuffer();

GetBuffer(int n)函数用于获取字符数组Q其中n表示字符数组的长度,使用完该字符数组之后一定要调用

ReleaseBuffer()函数来释放这个字W数l?/p>

注:在能够用const char*的地方,通常不要使用char*

(3)memcpy函数

CString mCS=_T("cxl");

char mch[20];

memcpy(mch,mCS,20);

(4)LPCTSTR强制cd转换Q不使用Q?/p>

char* ch;

CString str;

ch=(LPSTR)(LPCTSTR)str;

str="good!";

sprintf(ch,"%s",(LPTSTR)(LPCTSTR)str);

(5)CString->LPTSTR->char*

CString Msg;

Msg=Msg+"abc";

LPTSTR lpsz;

lpsz=new TCHAR[Msg.GetLength()+1];

_tcscpy(lpsz,Msg);

char* psz;

strcpy(psz,lpsz);

4、如何将CStringcd的变量赋lconst char*cd的变?/p>

char* a[100];

CString str("abcdef");

strncpy(a,(LPCTSTR)str,sizeof(a));

?/p>

strncpy(a,str,sizeof(a));

注:~译器会自动CStringcd的变量{换ؓconst char*cd

5、如何将CStringcd的变量赋lLPCTSTRcd的变?/p>

CString cStr;

const char* lpctStr=(LPCTSTR)cStr;

6、如何将LPCTSTRcd的变量赋lCStringcd的变?/p>

LPCTSTR lpctStr;

CString cStr=lpctStr;

7、如何将char*cd的变量赋lCStringcd的变?/p>

(1)直接赋|CString myString="This is a test";

(2)构造函敎ͼCString s1("Tom");

8、如何将CStringcd的变量赋lchar[]Q字W串Q类型的变量

(1)sprintf函数

CString str="good!";

char temp[200];

sprintf(temp,"%s",(LPCSTR)str);

注:强制cd转换(LPCSTR)str?LPTSTR)(LPCTSTR)str{同Q用的区别仅在于CString对象是变?/p>

q是帔R。LPCTSTR表示const char*Q它得到的字W串是不可写的!如果其强制转换位LPTSTRQ去

掉constQ,是极为危险的Q要得到char*Q应该用GetBuffer或GetBufferSetLength函数Q用完之后再?/p>

用ReleaseBuffer函数?/p>

(2)strcpy函数

CString str;

char c[256];

strcpy(c,str);

str="Hello";

strcpy((char*)&c,(LPCTSTR)str);

九、关于CString的?/p>

1、指定CString形参

(1)对于大多数需要字W串参数的函敎ͼ最好将函数原型中的形参指定Z个指向字W(LPCTSTRQ,而非

CString的const指针。当Ş参指定ؓ指向字符的const指针Ӟ可将指针传递到TCHAR数组Q如字符串["hi

here"]或传递到CString对象Q。CString对象自动{换成LPCTSTR。Q何能够用LPCTSTR的地方也?/p>

够用CString对象?/p>

(2)如果某个形参不会被修改Q则也将该参数指定ؓ帔R字符串引用(const CString&Q。如果函数要修改

该字W串Q则删除const修饰W。如果需要默认ؓI|则将其初始化为空字符Ԍ[""]Q,如下所C:

void AddCustomer(const CString& name,const CString& address,const CString& comment="");

(3)对于大多数函数的l果Q按D回CString对象卛_?/p>

2、串的基本运?/p>

char s1[20]="dir/bin/appl",s2[20]="file.asm",s3[30],*p;

int result;

(1)求串?/p>

int strlen(char* s); //求串s的长?/p>

例:printf("%d",strlen(s1));

(2)串复?/p>

char* strcpy(char* to,char* from); //from串复制到to串中Qƈq回to开始处的指?/p>

例:strcpy(s3,s1);

(3)串联?/p>

char* strcat(char* to,char* from); //from串复制到to串的末尾

例:strcat(s3,"/");

strcat(s3,s2);

(4)串比?/p>

int strcmp(char* s1,char* s2); //比较s1和s2的大,s1<s2Q小?Q、s1=s2Q?Q和s1>s2Q大?Q?/p>

例:result=strcmp("baker","Baker"); //大于0

result=strcmp("12","12"); //{于0

result=strcmp("Joe","joseph"); //于0

(5)字符定位

char* strchr(char* s,char c); //找c在字W串s中第一ơ出现的位置。若扑ֈQ则q回该位|;否则NULL?/p>

例:p=strchr(s2,'.'); //p指向"file"之后的位|?/p>

(6)注意

AQ上q操作是最基本的,其中?个操作还有变UŞ式:strncpy、strncath和strnchr?/p>

BQ其他的串操作见C?lt;string.h>头文件。在不同的高U语a中,对串q算的种cdW号都不相同?/p>

CQ其余的串操作一般可p些基本操作组合而成?/p>

例:求子串的操作可如下实?/p>

//s和sub是字W数l,用subq回串s的第pos个字W长度ؓlen的子?/p>

void substr(char* sub,char* s,int pos,int len)

{

//其中0<=pos<=strlen(s)-1Q且数组sub臛_可容Ulen+1个字W?/p>

if(pos<0 || pos>strlen(s)-1 ||len<0)

Error("parameter error!");

//从s[pos]起复制至多len个字W到sub

strncpy(sub,*s[pos],len);

}



Mumoo 2012-06-04 09:05 发表评论
]]>
޾Ʒþò| ޹뾫ƷŮ˾þþò | ݺɫۺϾþȥ| Ʒۺþþþþ| ɫۺϾþҹɫƷ| þþþavר| þùƷ99Ʒ987| þˬˬˬav| ĻþþƷ| ˾Ʒһþ| ھƷ˾þþþ777| þþݾþþ| þþþĻɫ | 99þþƷѿһ | ƷŮþþm| ŷƷƵһþþþƷ| ҹƵþþþһ| þþƷž޾Ʒ| ŷպþĻ| þþþ޾Ʒ˵| þùɫAVѹۿ| þ99ֻоƷ66| Ʒ99þþþþö| Ʒþþþþҹ| ɫݺݾþۺ| 뾫ƷþɪӰ| 99þ˾ƷۺϹۿ| Ʒþþþþþþ| ɫþþþþþС˵ | ޾ƷþþþĻ69| þۺ϶| 99þۺϺݺۺϾþ| һaƬþëƬ| 91ƷۺϾþþþþ| þþþƷ鶹| ޾ƷĻþò| þþSS鶹ŷպ| þAVij| þþþþҹƷ| þþƷþһ| þۺϳDž|