??xml version="1.0" encoding="utf-8" standalone="yes"?>国产V亚洲V天堂无码久久久 ,欧美喷潮久久久XXXXx,久久精品亚洲日本波多野结衣 http://www.shnenglu.com/Mumoo/zh-cnWed, 07 May 2025 01:49:16 GMTWed, 07 May 2025 01:49:16 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#Feedback1http://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删除所有列敎ͼ(x)while(m_listCtrl->DeleteColumn(0));

Mumoo 2013-10-10 10:51 发表评论
]]>
ListCtrl控gҎ(gu)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Ҏ(gu)

以下未经说明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详细资料
直观的理解:(x)windows资源理器,"查看"标签下的"大图标,图标,列表Q详l资?br />--------------------------------------------------------------------------------
2. listctrl风格?qing)扩展风?
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); //讄扩展风格
注:(x)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中所有选中行的序号
Ҏ(gu)一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);
}
}
Ҏ(gu)二:(x)
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. 删除所有列
Ҏ(gu)一Q?
while ( m_list.DeleteColumn (0))
因ؓ(f)你删除了W一列后Q后面的列会(x)依次向上Ud?
Ҏ(gu)二:(x)
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)
{
// Ҏ(gu)一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);
}
*/
// Ҏ(gu)?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、添加列标题_(d)(x)InsertColumn
2、获取与讄列宽QGetColumnWidth、SetColumnWidth
3、添加一行:(x)InsertItem、SetItemText
4、获取与讄单元文本QGetItemText、SetItemText
5、允许多行选中Ӟ获取选中的行敎ͼ(x)GetSelectedCount
6、单行选中Ӟ获取选中的行QGetSelectionMark
7、选中某行QSetItemState(n, LVIS_SELECTED, LVIS_SELECTED);取消选中的行SetItemState(n,0,-1);使用此函数前需要先调用SetFocus();
8、获取某行的状态是否ؓ(f)选中QGetItemState(n, LVIS_SELECTED) == LVIS_SELECTED
9、删除所有行QDeleteAllItems
10、删除指定列QDeleteColumn
11、删除指定行QDeleteItem
12、获取与讄列表控g的背景色QGetBkColor、SetBkColor
13、获取与讄文字背景Ԍ(x)GetTextBkColor、SetTextBkColor
14、获取与讄文字前景Ԍ(x)GetTextColor、SetTextColor
15、获取与讄CheckQGetCheck、SetCheck,使用前需要设|控件属性SetExtendedStyle(LVS_EX_CHECKBOXES);使控件有N功?br />16、获取与讄图标列表QGetImageList、SetImageList
17、获取与讄行附加数据:(x)GetItemData、SetItemData
18、获取与讄扩展风格样式QGetExtendedStyle、SetExtendedStyle
19、设|正行选中与网格线QSetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
20、让ListCtrl支持~辑的功能:(x)
①、将属性中?Edit Labels 讄?TrueQ?br />②、响应控件的 LVN_EDNLABELEDIT 消息Q添加如下代码:(x)
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);
}

 

列表中添加图标代码:(x)

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));//讄背景色ؓ(f)白色
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回此列表(不能是空的)(j)中头部的元素
GetTail q回此列表(不能是空的)(j)中尾部的元素

操作

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

重复

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

获取/修改

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

插入

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

搜烦(ch)

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

状?/div>

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

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

插入数据QAddTailQ)(j);AddHead()

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

取得元素个数QGetCount()

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

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

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

初始化:(x)

 

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>JS入门资料?/title><link>http://www.shnenglu.com/Mumoo/archive/2013/04/11/199346.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Thu, 11 Apr 2013 02:02:00 GMT</pubDate><guid>http://www.shnenglu.com/Mumoo/archive/2013/04/11/199346.html</guid><wfw:comment>http://www.shnenglu.com/Mumoo/comments/199346.html</wfw:comment><comments>http://www.shnenglu.com/Mumoo/archive/2013/04/11/199346.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Mumoo/comments/commentRss/199346.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Mumoo/services/trackbacks/199346.html</trackback:ping><description><![CDATA[<div>JS介:(x) <div dir="ltr" id="imcontent"><span style="font-family: 'Segoe UI'; direction: ltr; word-wrap: break-word; color: #000000; font-size: 10pt" dir="ltr"><a title="http://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html" >http://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html</a><br /> <div dir="ltr" id="imcontent"><span style="font-family: 'Segoe UI'; direction: ltr; word-wrap: break-word; color: #000000; font-size: 10pt" dir="ltr"><a title="http://www.ruanyifeng.com/blog/2011/06/10_design_defects_in_javascript.html" >http://www.ruanyifeng.com/blog/2011/06/10_design_defects_in_javascript.html</a><br /><br />JS异步通信Q?br /> <div dir="ltr" id="imcontent"><span style="font-family: 'Segoe UI'; direction: ltr; word-wrap: break-word; color: #000000; font-size: 10pt" dir="ltr"><a title="http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html" >http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html</a><br /><br />JS学习(fn)Q?br /> <div dir="ltr" id="imcontent"><span style="font-family: 'Segoe UI'; direction: ltr; word-wrap: break-word; color: #000000; font-size: 10pt" dir="ltr"><a title="http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html" >http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html</a><br /><br />Node JS 学习(fn)Q?br /><a >http://www.cnblogs.com/seanlv/archive/2011/11/22/2258716.html</a><br /><a >http://nodejs.lofter.com/post/3c14e_48aee</a><br /><br /> <p><span style="color: black; font-size: 10pt">切记Q函数是一{公?/span> <span style="color: black; font-size: 10pt">是一U数据类型可以作为参C?/span> <span style="color: black; font-size: 10pt">基本可以玩转了</span><span style="font-family: 'Segoe UI','sans-serif'; color: black; font-size: 10pt"></span></p></span></div></span></div></span></div></span></div></div><img src ="http://www.shnenglu.com/Mumoo/aggbug/199346.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-11 10:02 <a href="http://www.shnenglu.com/Mumoo/archive/2013/04/11/199346.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC Listcontrol 使用Ҏ(gu)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详细资料

直观的理解:(x)windows资源理器,“查看”标签下的“大图标,图标,列表Q详l资?#8221;
--------------------------------------------------------------------------------
2. 讄listctrl 风格?qing)扩展风?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); //讄扩展风格

注:(x)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. 得到l(f)istctrl中所有行的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. 得到l(f)istctrl中所有选中行的序号
Ҏ(gu)一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);
}
}

Ҏ(gu)二:(x)
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. 得到l(f)istctrl的所有列的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. 得到l(f)istctrl列数 int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();
--------------------------------------------------------------------------------
12. 删除所有列 Ҏ(gu)一Q?br />while ( m_list.DeleteColumn (0))
因ؓ(f)你删除了W一列后Q后面的列会(x)依次向上Ud?/p>

Ҏ(gu)二:(x)
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)
{
// Ҏ(gu)一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);
}
*/

// Ҏ(gu)?
/*
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ƈҎ(gu)文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);
为报表添?列:(x)
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);
}
为报表添加两,以附加方式添加:(x)
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);
选定一行:(x)
讄CListCtrl的Show selection always选项
SetItemState (iIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED)
选中一个或多个目??x)发送LVN_ITEMCHANGED消息Q可以?br />GetSelectedCount()Ҏ(gu)得到被选定的项的数目?br />点击列头的消息响应:(x)
ON_NOTIFY(HDN_ITEMCLICKW, 0, ResponseFunc)
消息Q需要自己添?
或者:(x)
ON_NOTIFY(LVN_COLUMNCLICK, ID_yourCtrl, ResponseFunc)//向导d
前者后响应Q后者先响应
响应函数Q?br />ResponseFunc(NMHDR *pNMHDR, LRESULT *pResult)
双击CListCtrl中的ITEM的消息是?qing)消息函敎ͼ?x)
ON_NOTIFY(NM_DBLCLK, ID_yourCtrl, ResponseFunc)
单击ITEM的消息响应:(x)
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函数原型ؓ(f)QBOOL CListCtrl::SortItems( PFNLVCOMPARE pfnCompare, DWORD dwData )。其中第一个参Cؓ(f)全局排序函数的地址Q第二个参数为用h据,你可以根据你的需要传递一个数据或是指针。该函数q回-1代表W一Ҏ(gu)应在W二前面,q回1代表W一Ҏ(gu)应在W二后面,q回0代表两项相等?br />用于排序的函数原形ؓ(f)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Ҏ(gu)选用特定的CListCtrl::InsertItem也可以设|该倹{由于你在排序时只能通过该值来定的位置所以你应该比较明确的确定该值的含义?br />最后一点,我们需要知道什么时候需要排序,实现q点可以在父H口中对LVN_COLUMNCLICK消息q行处理来实现?
下面我们看一个例子,q个例子是一个派生类Qƈ支持序/倒序两种方式排序。ؓ(f)了简单我对全局数据q行排序Q而在实际应用中会(x)有多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中数据的烦(ch)?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):
//以第一列ؓ(f)Ҏ(gu)排序
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;
}
//Ҏ(gu)当前的排序方式进行调?br />if(pV->m_fAsc)
return iCompRes;
else
return iCompRes*-1;
}
排序最快:(x)
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="vhxnwuh" class="spctrl"></div>  int nYear, <div id="ckinwqw" class="spctrl"></div>  int nMonth, <div id="queyhjl" class="spctrl"></div>  int nDay, <div id="wirluln" class="spctrl"></div>  int nHour, <div id="wizxvik" class="spctrl"></div>  int nMin, <div id="zlustkt" class="spctrl"></div>  int nSec, <div id="jnsictz" class="spctrl"></div>  int nDST = -1<br /> //参数nDST指定是否实行夏o(h)Ӟ?时表C实行标准时_(d)为正数时表示实行夏o(h)Ӟ数时ql自动计实行的是标准时间还是夏令时? <div id="lxvejvq" class="spctrl"></div>  ); <br /><br /><span style="color: #0000ff"> ===================================================================== </span> <div id="efkanay" 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转ؓ(f)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要调用者指定缓冲区的最大长度,可能是ؓ(f)了在出现问题时可以推卸责d。这里D个例子:(x) </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的知韻I(x)CString::FormatQstrftime在MFC中自然也有她的同道:(x)CTime::FormatQ这一对由于从</span><a style="color: #0000ff" target="_blank">面向对象</a><span style="color: #0000ff">哪里得到了赞助,用以写出的代码更觉优?</span><br /><span style="color: #0000ff">===================================================================== </span><br /><br />获取旉?qing)时间参数方法?x)<br /><span style="color: red">static CTime WINAPI GetCurrentTime( ); </span> <div id="iudnane" class="spctrl"></div><span style="color: red">  获取pȝ当前日期和时间。返回表C当前日期和旉的CTime对象?nbsp;<br />CString Format(LPCTSTR pszFormat) const; <div id="mylqgbo" class="spctrl"></div>  CTime对象中的旉信息格式化ؓ(f)字符丌Ӏ参数pszFormat是格式化字符Ԍ与printf中的格式化字W串cMQ格式化字符串中带有%前缀的格式码会(x)被相应的CTime旉分量代替Q而其他字W会(x)原封不动的拷贝到q回字符串中。格式码?qing)含义如下?x) <div id="mjhqkbs" class="spctrl"></div>  %aQ周的英文羃写Ş式? <div id="yvecpgm" class="spctrl"></div>  %AQ周的英文全名Ş式? <div id="alchmhj" class="spctrl"></div>  %bQ?月的英文~写形式? <div id="emkiiof" class="spctrl"></div>  %BQ月的英文全名Ş式? <div id="fgicecp" class="spctrl"></div>  %cQ?完整的日期和旉? <div id="jgevivq" class="spctrl"></div>  %dQ十q制形式的日期(01-31Q? <div id="tbvsfwn" class="spctrl"></div>  %HQ?4时制的时Q?0-23Q? <div id="ykighrw" class="spctrl"></div>  %IQ?12时制的时Q?0-11Q? <div id="kdqomkq" class="spctrl"></div>  %jQ?十进制表C的一q中的第几天Q?01-366Q? <div id="mywqoua" class="spctrl"></div>  %mQ?月的十进制表C(01-12Q? <div id="gomrwfs" class="spctrl"></div>  %MQ十q制表示的分钟(00-59Q? <div id="mjoigsj" class="spctrl"></div>  %pQ?12时制的上下午标C(AM/PMQ? <div id="oaqgagt" class="spctrl"></div>  %SQ?十进制表C的U(00-59Q? <div id="ukxswjw" class="spctrl"></div>  %UQ?一q中的第几个星期Q?0-51Q,星期日是一周的W一天? <div id="bcpfkqo" class="spctrl"></div>  %WQ?一q中的第几个星期Q?0-51Q,星期一是一周的W一天? <div id="emkpjax" class="spctrl"></div>  %wQ?十进制表C的星期几(0-6Q? <div id="ijoixof" class="spctrl"></div>  %YQ?十进制表C的q?</span><br />      CTime(const SYSTEMTIME& st,int nDST = - 1) ; <div id="wivjwjp" class="spctrl"></div>  以一个SYSTEMTIMEl构体变量来构造CTime对象。SYSTEMTIMEl构体也是我们对日期旉的常用表C方式。参数stZ本地旉表示的SYSTEMTIME对象Q参数nDST同上? <div id="ckpcljl" class="spctrl"></div>  int GetYear( ) constQ? <div id="cdmgtci" class="spctrl"></div>  获取CTime对象表示旉的年份。范围从1970q??日到2038q_(d)包括2038q_(d)(j)1?8日? <div id="xqgwusf" class="spctrl"></div>  int GetMonth( ) const; <div id="ebkecev" class="spctrl"></div>  获取CTime对象表示旉的月份。范围ؓ(f)1?2? <div id="lxrtgtk" class="spctrl"></div>  int GetDay( ) const; <div id="mnwusuw" class="spctrl"></div>  获取CTime对象表示旉的日期。范围ؓ(f)1?1? <div id="khiysul" class="spctrl"></div>  int GetHour( ) const; <div id="vhqwjac" class="spctrl"></div>  获取CTime对象表示旉的小时。范围ؓ(f)0?3? <div id="ykbztob" class="spctrl"></div>  int GetMinute( ) const; <div id="nomcegx" class="spctrl"></div>  获取CTime对象表示旉的分钟。范围ؓ(f)0?9? <div id="tyoirid" class="spctrl"></div>  int GetSecond( ) const; <div id="opuwqhj" class="spctrl"></div>  获取CTime对象表示旉的秒。范围ؓ(f)0?9? <div id="eqgegpi" class="spctrl"></div>  int GetDayOfWeek( ) const; <div id="gzbkirp" class="spctrl"></div>  此函数的q回DCCTime对象代表的是星期几,1表示是周日,2表示是周一Q以此类推?br /> <br />操作与比较:(x)<br />CTime operator +(CTimeSpan timeSpan) const; <div id="zwylypg" class="spctrl"></div>  CTime对象和CTimeSpan对象相加Q返回一个CTime对象。实际意义就是在一个时间的基础上推后一个时间间隔,得到一个新的时间? <div id="pbvecir" class="spctrl"></div>CTime operator -(CTimeSpan timeSpan) const; <div id="eqgpywj" class="spctrl"></div>  CTime对象和一个CTimeSpan相减Q返回一个CTime对象。实际意义就是在一个时间的基础上提前一个时间间隔,得到一个新的时间? <div id="pmrljay" class="spctrl"></div>CTimeSpan operator -(CTime time) const; <div id="roicsyp" class="spctrl"></div>  该CTime对象和另一个CTime对象相减Q返回一个CTimeSpan对象。实际意义就是计两个时间点的间隔,得到一个CTimeSpan对象? <div id="wiyzmja" class="spctrl"></div>CTime& operator +=(CTimeSpan span); <div id="cdxnsyh" class="spctrl"></div>  CTime对象增加一个span表示的时间间隔? <div id="oafvive" class="spctrl"></div>CTime& operator -=(CTimeSpan span); <div id="mcsmobz" class="spctrl"></div>  CTime对象减去一个span表示的时间间隔? <div id="rztmcwg" class="spctrl"></div>CTime& operator =(__time64_t time); <div id="czeuwye" class="spctrl"></div>  CTime对象赋予一个新的时间倹{? <div id="zeyoikq" class="spctrl"></div>  单说下剩下的几个重蝲iq算W:(x) <div id="wivpnpy" class="spctrl"></div>  operator == Q?比较两个l对旉是否相等? <div id="bgtnkqs" class="spctrl"></div>  operator != Q?比较两个l对旉是否不相{? <div id="czinaua" class="spctrl"></div>  operator > Q?比较两个l对旉Q是否前一个大于后一个? <div id="amgerej" class="spctrl"></div>  operator < Q?比较两个l对旉Q是否前一个小于后一个? <div id="iugevmd" class="spctrl"></div>  operator >= Q?比较两个l对旉Q是否前一个大于等于后一个? <div id="bjdivbw" 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></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.xggppz8.cn" target="_blank">˾þۺ</a>| <a href="http://www.mhlz4f.cn" target="_blank">re99þþƷ99</a>| <a href="http://www.net901.cn" target="_blank">˾þۺ</a>| <a href="http://www.wc78.cn" target="_blank">޹ŷۺ997þ</a>| <a href="http://www.sh-ielts.cn" target="_blank">˺ݺۺϾþ</a>| <a href="http://www.tjjxqc.cn" target="_blank">þþƷɭ</a>| <a href="http://www.4527.com.cn" target="_blank">߳߳þþ91</a>| <a href="http://www.ovyp.cn" target="_blank">Ůþþþþjþ</a>| <a href="http://www.bandetek.cn" target="_blank">þùƷ-þþƷ</a>| <a href="http://www.ixdsw.cn" target="_blank">þĻһ</a>| <a href="http://www.6q7q.cn" target="_blank">ձƷþþĻ</a>| <a href="http://www.mivrcloud.cn" target="_blank">þþþþһ</a>| <a href="http://www.dageda168.cn" target="_blank">þ99Ʒþþ</a>| <a href="http://www.z5u5.cn" target="_blank">󽶾þĻ</a>| <a href="http://www.dhxxw.cn" target="_blank">þþþþùƷŮ</a>| <a href="http://www.kqtao.cn" target="_blank">?VþþƷ</a>| <a href="http://www.gljqk.cn" target="_blank">þþƷѹۿ</a>| <a href="http://www.zg-ly.cn" target="_blank">ɫۺϾþ</a>| <a href="http://www.meiguohongfeng.com.cn" target="_blank">AVĻþר</a>| <a href="http://www.t2tt.cn" target="_blank">97rþþƷ99</a>| <a href="http://www.alibabataba.cn" target="_blank">ھƷþù½</a>| <a href="http://www.steelcom.cn" target="_blank">Ʒþþþþ</a>| <a href="http://www.hrbsyyy.cn" target="_blank">þþþ޾Ʒþþþþþ</a>| <a href="http://www.ilebo.cn" target="_blank">ŷպ˾Ʒþþѿ</a>| <a href="http://www.d5430.cn" target="_blank">þۺϾþۺ</a>| <a href="http://www.zgjgyl.cn" target="_blank">99þùƷһ</a>| <a href="http://www.48zyai5o.cn" target="_blank">ɫۺϾþþĻ</a>| <a href="http://www.xwiw.cn" target="_blank">ݺɫþþۺϲ</a>| <a href="http://www.dripnews.cn" target="_blank">þ99Ʒþþþþò</a>| <a href="http://www.daami.cn" target="_blank">þwww˳_Ƭ</a>| <a href="http://www.530taiji.cn" target="_blank">ɫۺϾþþþר</a>| <a href="http://www.szcybj.cn" target="_blank">ĻۺϾþ2</a>| <a href="http://www.jxhcgd.cn" target="_blank">ŷþþþ9999</a>| <a href="http://www.vcdordvd.cn" target="_blank">þþƷһԡ </a>| <a href="http://www.zongjiagou.com.cn" target="_blank">þþþAVվ </a>| <a href="http://www.i-ss.com.cn" target="_blank">ƷۺϾþþþþ888ѿ</a>| <a href="http://www.izakka.net.cn" target="_blank">99þþƷҹһ</a>| <a href="http://www.xinkecheng.net.cn" target="_blank">99þĻ</a>| <a href="http://www.aiaizhu.cn" target="_blank">99þ99þþƷƬ</a>| <a href="http://www.buy162.cn" target="_blank">ھƷþþþӰԺ˾</a>| <a href="http://www.dripnews.cn" target="_blank">þþþþþž99Ʒ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>