st(_In_ const char * FileName, _Out_ struct _finddata64i32_t * _FindData);
//按FileName命名规则匹配当前目录下一个文件
_findnext(_In_ intptr_t _FindHandle, _Out_ struct _finddata64i32_t * _FindData);
//关闭_findfirst返回的文件句柄
_findclose(_In_ intptr_t _FindHandle);
_findfirst 函数返回的是匹配到文件的句柄,数据类型为long。遍历过程可以指定文件类型,这通过FileName的赋值来实现,例如要遍历C:\WINDOWS下的所有.exe文件
bool transfer(string fileName = "C:\\Windows\\*.exe", int exeNum = 0)
{
_finddata_t fileInfo;
long handle = _findfirst(fileName.c_str(), &fileInfo);
if (handle == -1L)
{
cerr << "failed to transfer files" << endl;
return false;
}
do
{
exeNum ++;
cout << fileInfo.name LRESULT Dlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam){在最后加上return TRUE;}3.将afx_msg void OnNotifyIcon(WPARAM wParam, LPARAM lParam)->该成afx_msg LRESULT OnNotifyIcon(WPARAM wParam, LPARAM lParam);编译下就成功了23、树形控件 树形控件在Windows系统中很常见,树形视图中以分层结构显示数据,每层的缩进不同,层次越低缩进越多。属性控件的节点一般都由标签和图标两部分组成,图标用来抽象的描述数据,能够使树形控件的层次关系更加清晰。树形控件插入新的树节点时需要制定新节点与已有节点的关系。TVN_SELCHANGING和TVN_SELCHANGED:在用户改变了对树节点的选择时,控件会发送这两个消息。消息会附带一个指向NMTREEVIEW结构的指针,程序可从该结构中获得必要的信息。两个消息都会在该结构的itemOld成员中包含原来的选择项信息,在itemNew成员中包含新选择项的信息,在action成员中表明是用户的什么行为触发了该通知消息(若是TVC_BYKEYBOARD则表明是键盘,若是TVC_BYMOUSE则表明是鼠标,若是TVC_UNKNOWN则表示未知)。两个消息的不同之处在于,如果TVN_SELCHANGING的消息处理函数返回TRUE,那么就阻止选择的改变,如果返回FALSE,则允许改变。
TVN_KEYDOWN:该消息表明了一个键盘事件。消息会附带一个指向NMTVKEYDOWN结构的指针,通过该结构程序可以获得按键的信息。
TVN_BEGINLABELEDIT和TVN_ENDLABELEDIT:分别在用户开始编辑和结束编辑节点的标签时发送。消息会附带一个指向NMTVDISPINFO结构的指针,程序可从该结构中获得必要的信息。在前者的消息处理函数中,可以调用GetEditControl()成员函数返回一个指向用于编辑标题的编辑框的指针。如果处理函数返回FALSE,则允许编辑,如果返回TRUE,则禁止编辑。在后者的消息处理函数中,NMTVDISPINFO结构中的item.pszText指向编辑后的新标题,如果pszText为NULL,那么说明用户放弃了编辑,否则,程序应负责更新节点的标签,这可以由SetItem()或SetItemText()函数来完成。树形控件的创建也是有两种方式,一种是在对话框模板中直接拖入Tree Control控件创建,另一种就是通过CTreeCtrl类的Create成员函数创建。下面主要讲后者。CTreeCtrl类的Create成员函数的原型如下: virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID
); 此函数的原型与前面讲到的所有控件类的Create函数都类似。dwStyle指定树形控件风格的组合,rect指定树形控件窗口的位置和大小,pParentWnd为指向树形控件父窗口的指针,nID指定树形控件的ID。
CTreeCtrl类的主要成员函数CImageList* SetImageList(CImageList * pImageList,int nImageListType);如果树节点需要显示图标时,则必须先创建一个CImageList类的对象,并为其添加多个图像组成一个图像序列,然后调用SetImageList函数为树形控件设置图像序列,在用InsertItem插入节点时传入所需图像在图像序列中的索引即可。后面的例子中会演示。参数pImageList为指向图像序列类CImageList的对象的指针,若为NULL则删除树形控件的所有图像。参数nImageListType指定图像序列的类型,可以是TVSIL_NORMAL(普通图像序列)或TVSIL_STATE(状态图像序列,用图像表示节点的状态)。UINT GetCount( ) const;获取树形控件中节点的数量。DWORD_PTR GetItemData(HTREEITEM hItem) const;获取树形控件中某个指定节点的附加32位数据。参数hItem为指定的树节点的句柄。BOOL SetItemData(HTREEITEM hItem,DWORD_PTR dwData);为树形控件中某个指定节点设置附加的32位数据。参数hItem同上,dwData为要设置的32位数据。CString GetItemText(HTREEITEM hItem) const;获取树形控件中某个指定节点的标签文本。参数hItem同上。返回值是包含标签文本的字符串。BOOL SetItemText(HTREEITEM hItem,LPCTSTR lpszItem);为树形控件中某个指定节点设置标签文本。参数hItem同上,lpszItem为包含标签文本的字符串的指针。HTREEITEM GetNextSiblingItem(HTREEITEM hItem) const;获取树形控件中某个指定节点的下一个兄弟节点。参数hItem同上。返回值是下一个兄弟节点的句柄。HTREEITEM GetPrevSiblingItem(HTREEITEM hItem) const;获取树形控件中某个指定节点的上一个兄弟节点。参数hItem同上。返回值是上一个兄弟节点的句柄。HTREEITEM GetParentItem(HTREEITEM hItem) const;获取树形控件中某个指定节点的父节点。参数hItem同上。返回值是父节点的句柄。HTREEITEM GetRootItem( ) const;获取树形控件根节点的句柄。HTREEITEM GetSelectedItem( ) const;获取树形控件当前选中节点的句柄。BOOL DeleteAllItems( );删除树形控件中的所有节点。删除成功则返回TRUE,否则返回FALSE。BOOL DeleteItem(HTREEITEM hItem)