CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

一滴水,给你送分来了。。。

楼主showmetheway(雪儿甜心)2003-02-02 15:38:14 在 VC/MFC / 基础类 提问

 
  /*---------------------------------------------  
        HEAD.C   --   Displays   beginning   (head)   of   file  
                            (c)   Charles   Petzold,   1998  
      ---------------------------------------------*/  
   
  #include   <windows.h>  
   
  #define   ID_LIST           1  
  #define   ID_TEXT           2  
   
  #define   MAXREAD           8192  
  #define   DIRATTR           (DDL_READWRITE   |   DDL_READONLY   |   DDL_HIDDEN   |   DDL_SYSTEM   |   \  
                                            DDL_DIRECTORY   |   DDL_ARCHIVE     |   DDL_DRIVES)  
  #define   DTFLAGS           (DT_WORDBREAK   |   DT_EXPANDTABS   |   DT_NOCLIP   |   DT_NOPREFIX)  
   
  LRESULT   CALLBACK   WndProc     (HWND,   UINT,   WPARAM,   LPARAM)   ;  
  LRESULT   CALLBACK   ListProc   (HWND,   UINT,   WPARAM,   LPARAM)   ;  
   
  WNDPROC   OldList   ;  
   
  int   WINAPI   WinMain   (HINSTANCE   hInstance,   HINSTANCE   hPrevInstance,  
                                          PSTR   szCmdLine,   int   iCmdShow)  
  {  
            static   TCHAR   szAppName[]   =   TEXT   ("head")   ;  
            HWND                   hwnd   ;  
            MSG                     msg   ;  
            WNDCLASS           wndclass   ;  
             
            wndclass.style                   =   CS_HREDRAW   |   CS_VREDRAW   ;  
            wndclass.lpfnWndProc       =   WndProc   ;  
            wndclass.cbClsExtra         =   0   ;  
            wndclass.cbWndExtra         =   0   ;  
            wndclass.hInstance           =   hInstance   ;  
            wndclass.hIcon                   =   LoadIcon   (NULL,   IDI_APPLICATION)   ;  
            wndclass.hCursor               =   LoadCursor   (NULL,   IDC_ARROW)   ;  
            wndclass.hbrBackground   =   (HBRUSH)   (COLOR_BTNFACE   +   1)   ;  
            wndclass.lpszMenuName     =   NULL   ;  
            wndclass.lpszClassName   =   szAppName   ;  
             
            if   (!RegisterClass   (&wndclass))  
            {  
                      MessageBox   (NULL,   TEXT   ("This   program   requires   Windows   NT!"),  
                                              szAppName,   MB_ICONERROR)   ;  
                      return   0   ;  
            }  
             
            hwnd   =   CreateWindow   (szAppName,   TEXT   ("head"),  
                                                      WS_OVERLAPPEDWINDOW   |   WS_CLIPCHILDREN,  
                                                      CW_USEDEFAULT,   CW_USEDEFAULT,  
                                                      CW_USEDEFAULT,   CW_USEDEFAULT,  
                                                      NULL,   NULL,   hInstance,   NULL)   ;  
             
            ShowWindow   (hwnd,   iCmdShow)   ;  
            UpdateWindow   (hwnd)   ;  
             
            while   (GetMessage   (&msg,   NULL,   0,   0))  
            {  
                      TranslateMessage   (&msg)   ;  
                      DispatchMessage   (&msg)   ;  
            }  
            return   msg.wParam   ;  
  }  
   
  LRESULT   CALLBACK   WndProc   (HWND   hwnd,   UINT   message,   WPARAM   wParam,   LPARAM   lParam)  
  {  
            static   BOOL           bValidFile   ;  
            static   BYTE           buffer[MAXREAD]   ;  
            static   HWND           hwndList,   hwndText   ;  
            static   RECT           rect   ;  
            static   TCHAR         szFile[MAX_PATH   +   1]   ;  
            HANDLE                     hFile   ;  
            HDC                           hdc   ;  
            int                           i,   cxChar,   cyChar   ;  
            PAINTSTRUCT           ps   ;  
            TCHAR                       szBuffer[MAX_PATH   +   1]   ;  
             
            switch   (message)  
            {  
            case   WM_CREATE   :  
                      cxChar   =   LOWORD   (GetDialogBaseUnits   ())   ;  
                      cyChar   =   HIWORD   (GetDialogBaseUnits   ())   ;  
                       
                      rect.left   =   20   *   cxChar   ;  
                      rect.top     =     3   *   cyChar   ;  
                       
                      hwndList   =   CreateWindow   (TEXT   ("listbox"),   NULL,  
                                                              WS_CHILDWINDOW   |   WS_VISIBLE   |   LBS_STANDARD,  
                                                              cxChar,   cyChar   *   3,  
                                                              cxChar   *   13   +   GetSystemMetrics   (SM_CXVSCROLL),  
                                                              cyChar   *   10,  
                                                              hwnd,   (HMENU)   ID_LIST,  
                                                              (HINSTANCE)   GetWindowLong   (hwnd,   GWL_HINSTANCE),  
                                                              NULL)   ;  
   
                      GetCurrentDirectory   (MAX_PATH   +   1,   szBuffer)   ;  
                       
                      hwndText   =   CreateWindow   (TEXT   ("static"),   szBuffer,  
                                                              WS_CHILDWINDOW   |   WS_VISIBLE   |   SS_LEFT,  
                                                              cxChar,   cyChar,   cxChar   *   MAX_PATH,   cyChar,  
                                                              hwnd,   (HMENU)   ID_TEXT,  
                                                              (HINSTANCE)   GetWindowLong   (hwnd,   GWL_HINSTANCE),  
                                                              NULL)   ;  
                       
                      OldList   =   (WNDPROC)   SetWindowLong   (hwndList,   GWL_WNDPROC,  
                                                                                                (LPARAM)   ListProc)   ;  
                       
                      SendMessage   (hwndList,   LB_DIR,   DIRATTR,   (LPARAM)   TEXT   ("*.*"))   ;  
                      return   0   ;  
                       
            case   WM_SIZE   :  
                      rect.right     =   LOWORD   (lParam)   ;  
                      rect.bottom   =   HIWORD   (lParam)   ;  
                      return   0   ;  
                       
            case   WM_SETFOCUS   :  
                      SetFocus   (hwndList)   ;  
                      return   0   ;  
                       
            case   WM_COMMAND   :  
                      if   (LOWORD   (wParam)   ==   ID_LIST   &&   HIWORD   (wParam)   ==   LBN_DBLCLK)  
                      {  
                                if   (LB_ERR   ==   (i   =   SendMessage   (hwndList,   LB_GETCURSEL,   0,   0)))  
                                          break   ;  
                                 
                                SendMessage   (hwndList,   LB_GETTEXT,   i,   (LPARAM)   szBuffer)   ;  
                                 
                                if   (INVALID_HANDLE_VALUE   !=   (hFile   =   CreateFile   (szBuffer,    
                                                    GENERIC_READ,   FILE_SHARE_READ,   NULL,    
                                                    OPEN_EXISTING,   0,   NULL)))  
   
                                {  
                                          CloseHandle   (hFile)   ;  
                                          bValidFile   =   TRUE   ;  
                                          lstrcpy   (szFile,   szBuffer)   ;  
                                          GetCurrentDirectory   (MAX_PATH   +   1,   szBuffer)   ;  
                       
                                          if   (szBuffer   [lstrlen   (szBuffer)   -   1]   !=   '\\')  
                                                    lstrcat   (szBuffer,   TEXT   ("\\"))   ;  
                                          SetWindowText   (hwndText,   lstrcat   (szBuffer,   szFile))   ;  
                                }  
       
                                else  
                                {  
                                          bValidFile   =   FALSE   ;  
                                          szBuffer   [lstrlen   (szBuffer)   -   1]   =   '\0'   ;  
   
                                                    //   If   setting   the   directory   doesn't   work,   maybe   it's  
                                                    //   a   drive   change,   so   try   that.  
   
                                          if   (!SetCurrentDirectory   (szBuffer   +   1))  
                                          {  
                                                    szBuffer   [3]   =   ':'   ;  
                                                    szBuffer   [4]   =   '\0'   ;  
                                                    SetCurrentDirectory   (szBuffer   +   2)   ;  
                                          }  
   
                                                    //   Get   the   new   directory   name   and   fill   the   list   box.  
   
                                          GetCurrentDirectory   (MAX_PATH   +   1,   szBuffer)   ;  
                                          SetWindowText   (hwndText,   szBuffer)   ;  
                                          SendMessage   (hwndList,   LB_RESETCONTENT,   0,   0)   ;  
                                          SendMessage   (hwndList,   LB_DIR,   DIRATTR,    
                                                                                        (LPARAM)   TEXT   ("*.*"))   ;  
                                }  
                                InvalidateRect   (hwnd,   NULL,   TRUE)   ;  
                      }  
                      return   0   ;  
                       
            case   WM_PAINT   :  
                      if   (!bValidFile)  
                                break   ;  
   
                      if   (INVALID_HANDLE_VALUE   ==   (hFile   =   CreateFile   (szFile,   GENERIC_READ,    
                                          FILE_SHARE_READ,   NULL,   OPEN_EXISTING,   0,   NULL)))  
                      {  
                                bValidFile   =   FALSE   ;  
                                break   ;  
                      }  
   
                      ReadFile   (hFile,   buffer,   MAXREAD,   &i,   NULL)   ;  
                      CloseHandle   (hFile)   ;  
   
                                //   i   now   equals   the   number   of   bytes   in   buffer.  
                                //   Commence   getting   a   device   context   for   displaying   text.  
   
                      hdc   =   BeginPaint   (hwnd,   &ps)   ;  
                      SelectObject   (hdc,   GetStockObject   (SYSTEM_FIXED_FONT))   ;  
                      SetTextColor   (hdc,   GetSysColor   (COLOR_BTNTEXT))   ;  
                      SetBkColor       (hdc,   GetSysColor   (COLOR_BTNFACE))   ;  
   
                                //   Assume   the   file   is   ASCII  
   
                      DrawTextA   (hdc,   buffer,   i,   &rect,   DTFLAGS)   ;  
   
                      EndPaint   (hwnd,   &ps)   ;  
                      return   0   ;  
                       
            case   WM_DESTROY   :  
                      PostQuitMessage   (0)   ;  
                      return   0   ;  
            }  
            return   DefWindowProc   (hwnd,   message,   wParam,   lParam)   ;  
  }  
             
  问题点数:100、回复次数:39Top

1 楼showmetheway(雪儿甜心)回复于 2003-02-02 15:38:28 得分 0

LRESULT   CALLBACK   ListProc   (HWND   hwnd,   UINT   message,    
                                                        WPARAM   wParam,   LPARAM   lParam)  
  {  
            if   (message   ==   WM_KEYDOWN   &&   wParam   ==   VK_RETURN)  
                      SendMessage   (GetParent   (hwnd),   WM_COMMAND,    
                                                MAKELONG   (1,   LBN_DBLCLK),   (LPARAM)   hwnd)   ;  
                       
            return   CallWindowProc   (OldList,   hwnd,   message,   wParam,   lParam)   ;  
  }  
   
  ///////////////////////////////////////////  
  (1)   lstrcat   (szBuffer,   TEXT   ("\\"))                   //为什么这里是"\\"而不是"\"?  
  (2)   else  
          {  
                        bValidFile   =   FALSE   ;  
                        szBuffer   [lstrlen   (szBuffer)   -   1]   =   '\0'   ;  
   
                                      //   If   setting   the   directory   doesn't   work,   maybe   it's  
                                      //   a   drive   change,   so   try   that.  
   
                        if   (!SetCurrentDirectory   (szBuffer   +   1))  
                        {  
                                      szBuffer   [3]   =   ':'   ;  
                                      szBuffer   [4]   =   '\0'   ;  
                                      SetCurrentDirectory   (szBuffer   +   2)   ;  
                        }  
   
                                //   Get   the   new   directory   name   and   fill   the   list   box.  
   
                        GetCurrentDirectory   (MAX_PATH   +   1,   szBuffer)   ;  
                        SetWindowText   (hwndText,   szBuffer)   ;  
                        SendMessage   (hwndList,   LB_RESETCONTENT,   0,   0)   ;  
                        SendMessage   (hwndList,   LB_DIR,   DIRATTR,    
                                                                                        (LPARAM)   TEXT   ("*.*"))   ;  
            }                 //这段代码作用是什么?  
   
  以上两问答对了100分就都给你了。。。。Top

2 楼showmetheway(雪儿甜心)回复于 2003-02-02 15:40:52 得分 0

程序的作用是在窗口上建一个listbox并在其中显示各驱动器和当前目录下的文件Top

3 楼AthlonxpX86(一坨屎)回复于 2003-02-02 15:56:50 得分 50

(1)TEXT   ("\\"))   可能是因为程序中对路径格式一般是  
  C:\\???\\???\\???.???Top

4 楼AthlonxpX86(一坨屎)回复于 2003-02-02 16:03:34 得分 0

不过更可能是TEXT   ("\\")字符串中第一个\做转意第2个才是字符\Top

5 楼AthlonxpX86(一坨屎)回复于 2003-02-02 17:39:47 得分 0

(1)\是转意符所以你代码中写成C:\\???\\???\\???.???字符串中却是  
  C:\???\???\???.???  
  (2)意思是说如果该路径不存在(可能是你程序运行期间有别的软件该了路径)就执行该代码来从新设置当前文件夹路径并先是在列表  
  但我还有些疑惑  
  if   (!SetCurrentDirectory   (szBuffer   +   1))  
                        {  
                                      szBuffer   [3]   =   ':'   ;  
                                      szBuffer   [4]   =   '\0'   ;  
                                      SetCurrentDirectory   (szBuffer   +   2)   ;  
                        }  
  这是设置当前文件夹吗?为什么从szBuffer的第2个字符开始(szBuffer   +   1)  
  是'C'   'D'   'E'到底是什么啊  
  如果失败后面的代码没有设置盘符啊。  
  下面括号中的似转意语句不用看了  
  (我怎么觉得你在欺负我啊,放这么多代码叫我看,我这两天心情不好啊,还这么挣我  
  http://expert.csdn.net/Expert/topic/1398/1398188.xml?temp=.1114771)Top

6 楼kingcom_xu(冷羽)回复于 2003-02-02 18:29:15 得分 0

没我的份?Top

7 楼AthlonxpX86(一坨屎)回复于 2003-02-02 18:37:54 得分 0

to   kingcom_xu(我的刀是杀不了人的)    
  你歇歇吧,要进CSDN前10名不容易啊,有时间写几篇文章给CSDN一下就3个星了Top

8 楼everandforever(Forever)回复于 2003-02-02 20:29:40 得分 29

if   (!SetCurrentDirectory   (szBuffer   +   1))  
                                          {  
                                                    szBuffer   [3]   =   ':'   ;  
                                                    szBuffer   [4]   =   '\0'   ;  
                                                    SetCurrentDirectory   (szBuffer   +   2)   ;  
                                          }  
  从第二或第三个字符开始,应该是和   LISTBOX   自动列出  
  目录和文件的方式有关吧?(SendMessage   (hwndList,   LB_DIR,   DIRATTR,  
    (LPARAM)   TEXT   ("*.*"))   ;)  
   
  为什么这段代码,有的地方用   TEXT(),   有的地方又不用?  
  Top

9 楼showmetheway(雪儿甜心)回复于 2003-02-02 22:22:15 得分 0

(LPARAM)   TEXT   ("*.*")    
   
  为什么这段代码,有的地方用   TEXT(),   有的地方又不用?  
   
  /////////////////////////////  
  我一直当它们是一会事哪。看来没这么简单。。  
   
  这是设置当前文件夹吗?为什么从szBuffer的第2个字符开始(szBuffer   +   1)  
  是'C'   'D'   'E'到底是什么啊  
  如果失败后面的代码没有设置盘符啊。  
  /////////////////  
  我在这里也有很大的疑惑,到底是为什么呢?  
  Top

10 楼everandforever(Forever)回复于 2003-02-02 22:28:04 得分 0

这是设置当前文件夹吗?为什么从szBuffer的第2个字符开始(szBuffer   +   1)  
  是'C'   'D'   'E'到底是什么啊  
  如果失败后面的代码没有设置盘符啊。  
  /////////////////  
  我在这里也有很大的疑惑,到底是为什么呢?  
  __________________________  
  从第二或第三个字符开始,应该是和   LISTBOX   自动列出  
  目录和文件的方式有关吧?(SendMessage   (hwndList,   LB_DIR,   DIRATTR,  
    (LPARAM)   TEXT   ("*.*"))   ;)  
   
   
   
  ********************  
  (LPARAM)   TEXT   ("*.*")    
   
  为什么这段代码,有的地方用   TEXT(),   有的地方又不用?  
   
  /////////////////////////////  
  我一直当它们是一会事哪。看来没这么简单。。  
  _________________  
  TEXT()在定义了_UNICODE之后,把()里面的字符转换为UNICODETop

11 楼AthlonxpX86(一坨屎)回复于 2003-02-02 23:43:34 得分 0

SetCurrentDirectory()是设置当前要操作的路径啊,应该不会是自定义的格式吧??????????Top

12 楼chanet(牧师)回复于 2003-02-03 00:31:13 得分 20

为什么只要他一个人,  
   
  我可以吗?  
   
  1,"\\"是C\C++中对路径访问的格式,意思:用"\\"   代表   "\"  
   
  2,代码的意思:如果不是文件,  
                            是子目录或者的话就返目录里的所有文件名和子目录(深层).  
      并设置为当前目录!!!  
  Top

13 楼AthlonxpX86(一坨屎)回复于 2003-02-03 01:44:29 得分 0

chanet(初学者,别笑!)   的解释有误啊  
  2,代码的意思:如果不是文件,  
                            是子目录或者的话就返目录里的所有文件名和子目录(深层).  
      并设置为当前目录!!!  
  ================================================================  
  如果是文件为什么还要在末尾加上'\'  
   
  if   (INVALID_HANDLE_VALUE   !=   (hFile   =   CreateFile   (szBuffer,    
                                                    GENERIC_READ,   FILE_SHARE_READ,   NULL,    
                                                    OPEN_EXISTING,   0,   NULL)))  
   
                                {  
                                          //如果打开成功;  
                                          CloseHandle   (hFile)   ;  
                                          bValidFile   =   TRUE   ;  
                                          lstrcpy   (szFile,   szBuffer)   ;  
                                          GetCurrentDirectory   (MAX_PATH   +   1,   szBuffer)   ;  
                       
                                          if   (szBuffer   [lstrlen   (szBuffer)   -   1]   !=   '\\')  
                                                    lstrcat   (szBuffer,   TEXT   ("\\"))   ;  
                                          SetWindowText   (hwndText,   lstrcat   (szBuffer,   szFile))   ;  
                                }  
   
   
  Top

14 楼kingcom_xu(冷羽)回复于 2003-02-03 01:47:39 得分 0

甜心MM的分我是不敢要的了...  
  Top

15 楼everandforever(Forever)回复于 2003-02-03 01:48:16 得分 0

SetCurrentDirectory()是设置当前要操作的路径啊,应该不会是自定义的格式吧??????????  
  __________________  
  你可以调用   SendMessage   (hwndList,   LB_DIR,   DIRATTR,   (LPARAM)   TEXT   ("*.*"));   来看看   LISTBOX   中出现的   目录的格式(前面有没有空格,盘符在第几位,等等)   ,或许会有所获哦。   我没有试过,猜猜。Top

16 楼AthlonxpX86(一坨屎)回复于 2003-02-03 02:30:35 得分 0

你可以调用   SendMessage   (hwndList,   LB_DIR,   DIRATTR,   (LPARAM)   TEXT   ("*.*"));   来看看   LISTBOX   中出现的   目录的格式(前面有没有空格,盘符在第几位,等等)   ,或许会有所获哦。   我没有试过,猜猜。  
  ===============================================================  
  还是没听懂啊,LISTBOX中当然可以是任何目录格式,  
  但SetCurrentDirectory()中的路径难道不是?:\???\???\???.???这样吗  
  to   kingcom_xu(我的刀是杀不了人的)  
  他是女的啊!!!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!  
  完了,我对她说了好多废话,真是没有绅士风度啊,好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!  
  Top

17 楼everandforever(Forever)回复于 2003-02-03 02:42:38 得分 0

LB_DIR   是   MS   提供的系统消息吧?那么返回到   LISTBOX   中的结果是按什么规则排列的?  
  ————————  
  ANYWAY,   I   LIKE   GIRLS.Top

18 楼AthlonxpX86(一坨屎)回复于 2003-02-03 02:50:01 得分 0

请老师详细讲讲,不要用英文啊Top

19 楼everandforever(Forever)回复于 2003-02-03 02:58:15 得分 0

老师?不敢当。LB_DIR   是   WINDOWS   提供的系统消息,专门用于   LISTBOX   ,自动列出所有目录。   我想,是不是按着某种格式?不过我又有些不确定了。哪位大虾动动手。Top

20 楼showmetheway(雪儿甜心)回复于 2003-02-03 21:49:38 得分 0

everandforever(Forever)   :  
  哪位大虾动动手。  
  ///////////////////////  
  自己动手,丰衣食足呀:)  
  Top

21 楼showmetheway(雪儿甜心)回复于 2003-02-03 21:52:00 得分 0

to   kingcom_xu(我的刀是杀不了人的)  
  他是女的啊!!!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!10000000个惊叹!  
  完了,我对她说了好多废话,真是没有绅士风度啊,好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!好尴尬啊!  
  //////////////////////////////  
  一滴水大哥:  
    好象这个些话不该问刀哥,应该直接对我说才对吧:)Top

22 楼chanet(牧师)回复于 2003-02-03 22:14:58 得分 0

女的又怎样??  
  什么?女的??女的来学VC???  
  我班那些女全都是学VB,网页之类的~~~~  
   
   
  Top

23 楼chanet(牧师)回复于 2003-02-03 22:17:46 得分 0

楼主那你还有那些不明白???Top

24 楼chanet(牧师)回复于 2003-02-03 22:53:11 得分 0

详细解析:  
  case   WM_COMMAND   :  
                      if   (LOWORD   (wParam)   ==   ID_LIST   &&   HIWORD   (wParam)   ==   LBN_DBLCLK)  
                      {  
                                if   (LB_ERR   ==   (i   =   SendMessage   (hwndList,   LB_GETCURSEL,   0,   0)))  
                                          break   ;//是否超出范围  
                                 
                                SendMessage   (hwndList,   LB_GETTEXT,   i,   (LPARAM)   szBuffer);   //szBuffer为选中的值  
                                 
                                if   (INVALID_HANDLE_VALUE   !=   (hFile   =   CreateFile   (szBuffer,   //如果选中的是文件  
                                                    GENERIC_READ,   FILE_SHARE_READ,   NULL,    
                                                    OPEN_EXISTING,   0,   NULL)))  
   
                                {         //如果打开成功,表示是文件!而不是目录  
                                          CloseHandle   (hFile)   ;   //关闭  
                                          bValidFile   =   TRUE   ;//是文件,并打开成功  
                                          lstrcpy   (szFile,   szBuffer)   ;//szBuffer复到szFile为打开的文件名  
                                          GetCurrentDirectory   (MAX_PATH   +   1,   szBuffer);//返回当前目录到szBuffer  
   
                                          if   (szBuffer   [lstrlen   (szBuffer)   -   1]   !=   '\\')  
                                                    lstrcat   (szBuffer,   TEXT   ("\\"));   //为返回的当前目录加上"//"(格式)  
                                          SetWindowText   (hwndText,   lstrcat   (szBuffer,   szFile));//显示目录+文件名到文本框  
                                }  
                                else  
                                {  
                                          bValidFile   =   FALSE;//不是文件,可能是盘符(A,C,D之类)和根目录  
                                          szBuffer   [lstrlen   (szBuffer)   -   1]   =   '\0';   //字符串结束符  
   
                                                    //   If   setting   the   directory   doesn't   work,   maybe   it's  
                                                    //   a   drive   change,   so   try   that.  
   
                                          if   (!SetCurrentDirectory   (szBuffer   +   1))  
                                          {       //如果设置当前目录为szBuffer的话,表明这是盘符  
                                                    szBuffer   [3]   =   ':'   ;  
                                                    szBuffer   [4]   =   '\0'   ;  
                                                    SetCurrentDirectory   (szBuffer   +   2)   ;//设置目录是当前szBuffer盘符上  
                                          }  
   
                                                    //   Get   the   new   directory   name   and   fill   the   list   box.  
   
                                          GetCurrentDirectory   (MAX_PATH   +   1,   szBuffer)   ;//返回当前目录到szBuffer  
                                          SetWindowText   (hwndText,   szBuffer);//文件框显示当前目录                        
                                          SendMessage   (hwndList,   LB_RESETCONTENT,   0,   0);   //清除列表框的所有值  
                                          SendMessage   (hwndList,   LB_DIR,   DIRATTR,    
                                                                                        (LPARAM)   TEXT   ("*.*"));    
  //用文件目录表填充列表框,并且可以选择将子目录和有效的盘符包括进去  
                                }  
                                InvalidateRect   (hwnd,   NULL,   TRUE)   ;//重画  
                      }  
                      return   0   ;Top

25 楼showmetheway(雪儿甜心)回复于 2003-02-04 10:44:03 得分 0

我很笨的,请不要跟我计较。  
                                          if   (!SetCurrentDirectory   (szBuffer   +   1))  
                                          {       //如果设置当前目录为szBuffer的话,表明这是盘符  
                                                    szBuffer   [3]   =   ':'   ;  
                                                    szBuffer   [4]   =   '\0'   ;  
                                                    SetCurrentDirectory   (szBuffer   +   2)   ;//设置目录是当前szBuffer盘符上  
                                          }  
    //////////////////////////  
  这里为什么要从szBuffer   [3]   开始呢?前面的szBuffer[0],szBuffer[1],szBuffer[2]又是什么?  
   
  msdn里面肯定有专门说文件和有关函数的章节吧?可是我不会找,不是否可以给小妹指点一下路径?Top

26 楼cwkxm(cwkxm)回复于 2003-02-04 10:51:02 得分 0

http://xmsoft.xiloo.com  
  这是一款很好的电脑辅助工具。包括以下几大功能:·文件粉碎   ·文件分割·文件合并·生成网页索引·文本文件转成网页文件·简繁体转换·注册表修复等  
  Top

27 楼everandforever(Forever)回复于 2003-02-04 15:40:42 得分 0

TO     showmetheway(雪儿甜心)   :  
  你这个   程序可以编译吗,你DEBUG到   SetCurrentDirectory   (szBuffer   +   1))这句这里   来看看,看看前面是不是有空格,证明一下我的猜想。Top

28 楼AthlonxpX86(一坨屎)回复于 2003-02-04 18:12:50 得分 0

啊,是我没仔细的看代码,chanet(初学者,别笑!)   说得对,是我看错了  
  to     showmetheway(雪儿甜心):  
  通过你得回复好像你弄错了一样东西szBuffer   +   1应该指向szBuffer   [1]  
          if   (!SetCurrentDirectory   (szBuffer   +   1))  
                                          {       //如果设置当前目录为szBuffer的话,表明这是盘符  
                                                    szBuffer   [3]   =   ':'   ;  
                                                    szBuffer   [4]   =   '\0'   ;  
                                                    SetCurrentDirectory   (szBuffer   +   2)   ;//设置目录是当前szBuffer盘符上  
                                          }  
  应该就是与路径格式相关了,你可以加入一些代码来看格式  
  AfxMessageBox(szBuffer);  
  AfxMessageBox(szBuffer+1);  
          if   (!SetCurrentDirectory   (szBuffer   +   1))  
                                          {       //如果设置当前目录为szBuffer的话,表明这是盘符                                                 AfxMessageBox(szBuffer+2);  
                                                    szBuffer   [3]   =   ':'   ;  
                                                    szBuffer   [4]   =   '\0'   ;  
                                                      AfxMessageBox(szBuffer+2);  
                                                    SetCurrentDirectory   (szBuffer   +   2)   ;//设置目录是当前szBuffer盘符上  
                                          }  
  有工程文件吗?拿来看看  
   
   
  一滴水大哥:  
    好象这个些话不该问刀哥,应该直接对我说才对吧:)  
  =================================================================  
  给你说了那么多不该说的话,我怎么还好意思问你啊:)既然你是女的,希望你能给CSDN   VC版带来新的活力啊,(你的贴关注的人真多啊)大家一起来学习啊  
   
   
   
  送我的分为什么有这么多人来抢啊,:(   是抢分,还是另有意图啊  
   
   
  Top

29 楼kingcom_xu(冷羽)回复于 2003-02-04 18:27:06 得分 1

是抢分!真的是抢分呀?  
  我不骗你呀。。。真的是呀。。。你得相信我呀。。。  
  Top

30 楼showmetheway(雪儿甜心)回复于 2003-02-04 19:01:57 得分 0

kingcom_xu(我的刀是杀不了人的):  
   
  刀哥,我信你:)Top

31 楼showmetheway(雪儿甜心)回复于 2003-02-04 19:03:46 得分 0

揭贴了,如果大家对所得分数还有什么不满意的话请提意见:)Top

32 楼showmetheway(雪儿甜心)回复于 2003-02-04 19:09:58 得分 0

甜心MM的分我是不敢要的了...      
  //////////////  
  刀哥,不是我小气,是你自己说不要分的。  
  尽管如此,我还是要给你分:)  
   
  特别柱明:   由于此帖主要针对对象是水哥,所以就多给了些分,望其他绅士不要追究。。。Top

33 楼kingcom_xu(冷羽)回复于 2003-02-04 19:13:46 得分 0

555555555555~~~~~~~~~~~~~~~~~``  
  我不是绅士!  
  我是流氓!!!Top

34 楼AthlonxpX86(一坨屎)回复于 2003-02-04 19:14:04 得分 0

不要相信kingcom_xu(我的刀是杀不了人的)   啊  
  http://expert.csdn.net/Expert/topic/1404/1404223.xml?temp=.8634149Top

35 楼kingcom_xu(冷羽)回复于 2003-02-04 19:17:25 得分 0

对对对!不要相信流氓呀!  
  也就是"甜心MM的分我是不敢要的了...     "无效!  
  快给我分..Top

36 楼AthlonxpX86(一坨屎)回复于 2003-02-04 19:21:27 得分 0

早知道我就好好大看一下代码给你回答了Top

37 楼showmetheway(雪儿甜心)回复于 2003-02-04 22:43:57 得分 0

啊?这么说你是在应付我了?Top

38 楼AthlonxpX86(一坨屎)回复于 2003-02-04 22:53:43 得分 0

不是啊,我看的时候心情不是太好,心慌意乱的,所以没好好看Top

39 楼showmetheway(雪儿甜心)回复于 2003-02-05 00:03:03 得分 0

一个多情的好男人:)Top

相关问题

  • am2000(最后一滴水):给你加分
  • 有请am2000(最后一滴水)--天星
  • To:am2000(最后一滴水) Thank you again
  • 一am2000(最后一滴水),Are you here now?
  • 公益广告----清洁水园里的每一滴水珠。
  • am2000(最后一滴水),注意!(萍萍请保留一天再删除。)
  • 小昂在来到csdn满一年之时,偶然发现水园,从此一发不可收拾,耽误了学习,耽误了工作,所以,偶决定从今天开始彻底戒水,一个月之内,除了delphi和vc论坛,我要节省每一滴水,如有违背,就敲坏鼠标以示警戒,特发100分请大家作证
  • 送分给你!!!!!!!!
  • 给人送分
  • 送分给longyear!!!

关键词

  • .net
  • 代码
  • 文件
  • 字符
  • szbuffer
  • 惊叹
  • hwndlist
  • setcurrentdirectory
  • 好尴尬啊
  • 目录

得分解答快速导航

  • 帖主:showmetheway
  • AthlonxpX86
  • everandforever
  • chanet
  • kingcom_xu

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo