文件浏览器代码分析

我们要做的文件浏览器就是这个样子了:先来讲下布局最上方是一个static的空间,内容那个是当前的路径

左边是一个list box,列出了当前路径下的文件列表

右边是有效文件的预览(当前版本只支持ASCII编码的,如果遇到了Unicode编码的会预览到乱码)

创建窗口这个必须的不讲了。

从WM_CREATE开始:

if(uimsg==WM_CREATE)
	{
		cxChar=LOWORD(GetDialogBaseUnits());
		cyChar=HIWORD(GetDialogBaseUnits());
		hwndLsit=CreateWindow(TEXT("listbox"),NULL,WS_CHILD | WS_VISIBLE | LBS_STANDARD,cxChar,3*cyChar,
			13*cxChar+GetSystemMetrics(SM_CXVSCROLL),20*cyChar,hwnd,(HMENU)1,
			(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
		GetCurrentDirectory(MAX_PATH+1,szBuffer);
		hwndText=CreateWindow(TEXT("static"),szBuffer,WS_CHILD | WS_VISIBLE | SS_LEFT,cxChar,cyChar,
			cxChar*MAX_PATH,cyChar,hwnd,(HMENU)2,
			(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
		SendMessage(hwndLsit,LB_DIR,DIRATTR,(LPARAM)TEXT("*.*"));
		return 0;
	}

在WM_CREATE里面创建了一个list box和一个static控件,初始化static控件的内容为当前路径通过:

GetCurrentDirectory(MAX_PATH+1,szBuffer);
获取当前路径到szBuffer里面,szBuffer大小为MAX_PATH+1(+1作为'\0')

SendMessage(hwndLsit,LB_DIR,DIRATTR,(LPARAM)TEXT("*.*"));
该语句自动会addString到list box,把当前路径的文件列表增添到list box控件

第3个参数是要增加的文件列表的属性:

第3个参数就是这些值的或

第四个参数指定了文件限定符串,一般文件都是"*.*"这样的形式的,例如(hello.cpp对吧)

编完之后就会是这样:

接着就编写如果我们双击list box的item就应该改变当前路径:


else if(uimsg==WM_COMMAND)
	{
		if(1==LOWORD(wparam) && LBN_DBLCLK==HIWORD(wparam))
		{
			int index=SendMessage(hwndLsit,LB_GETCURSEL,0,0);
			if(index==LB_ERR) return 0;
			SendMessage(hwndLsit,LB_GETTEXT,index,(LPARAM)szBuffer);

			hfile=CreateFile(szBuffer,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);//打开文件
			if(hfile!=INVALID_HANDLE_VALUE)//index为文件名,打开文件成功
			{
				bValidFile=true;
				CloseHandle(hfile);
				lstrcpy(szFile,szBuffer);
				GetCurrentDirectory(MAX_PATH+1,szBuffer);
				lstrcat(szBuffer,TEXT("\\"));
				lstrcat(szBuffer,szFile);
				SetWindowText(hwndText,szBuffer);//如果文件有效szBuffer就保存文件的路径了
			}
			else//index不是有效文件,就是[..],[Debug],[-c-]这些的处理,szBuffer[]保存着index项的内容
			{
				szBuffer[lstrlen(szBuffer)-1]='\0';//把右括号去掉(']'这个去掉)
				//先尝试去子目录([Debug'\0'这些)
				if(!SetCurrentDirectory(szBuffer+1))//去子目录成功就去,不成功执行if语句块
				{
					szBuffer[3]=TEXT(':');
					szBuffer[4]=TEXT('\0');
					SetCurrentDirectory(szBuffer+2);//去其他盘符([-c:'\0')
				}
				GetCurrentDirectory(MAX_PATH+1,szBuffer);
				SetWindowText(hwndText,szBuffer);//更新Text的内容
				SendMessage(hwndLsit,LB_RESETCONTENT,0,0);//先把之前的content清空
				SendMessage(hwndLsit,LB_DIR,DIRATTR,(LPARAM)TEXT("*.*"));//更新listBox的内容
				
			}
			InvalidateRect(hwnd,NULL,true);
		}
		return 0;
	}
最后在右侧找个rect来DrawText

else if(uimsg==WM_PAINT)
	{
		hdc=BeginPaint(hwnd,&ps);
		DWORD i;
		if(bValidFile)//打开了有效文件,此时szBuffer保存了有效文件的路径
		{
			bValidFile=false;//标志设置回去
			hfile=CreateFile(szBuffer,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
			ReadFile(hfile,buffer,8124,&i,NULL);
			CloseHandle(hfile);

			SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT));
			DrawTextA(hdc,(LPCSTR)buffer,i,&rect,DT_WORDBREAK | DT_EXPANDTABS | DT_NOCLIP | DT_NOPREFIX);
		}
		EndPaint(hwnd,&ps);
		return 0;
	}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
webpack 是一个现代 JavaScript 应用程序的静态模块打包器。它可以分析应用程序的依赖关系,并根据这些依赖关系创建一个优化过的打包文件。 在浏览器端,Webpack 的代码分析主要有以下几个方面: 1. 代码依赖分析:Webpack 可以分析入口文件中的依赖关系,并递归地分析出所有相关的模块依赖关系。通过这种依赖分析,Webpack 可以准确地判断哪些模块需要被打包,以及它们之间的依赖关系。 2. 代码转换和优化:Webpack 支持各种加载器(loader)和插件(plugins),可以将各种类型的文件转换成浏览器可识别的模块。例如,可以使用 Babel 加载器将 ES6/ES7 的语法转换成 ES5 的语法,或者使用 CSS 加载器将 CSS 文件转换成 JavaScript 对象。同时,Webpack 还可以对转换后的代码进行优化,例如提取公共模块、压缩代码等。 3. 代码拆分:Webpack 支持代码拆分,可以将应用程序的代码分割成多个小的代码块(chunk),并按需加载。这样可以避免将整个应用程序的代码一次性加载到浏览器,提高了页面加载速度和用户体验。 4. 资源管理:Webpack 还可以管理应用程序中的其他资源,例如图片、字体等文件。通过加载器(loader),可以对这些资源文件进行处理和优化,例如压缩、合并等。 总的来说,Webpack 在浏览器端能够通过代码依赖分析、转换和优化、代码拆分以及资源管理等功能把应用程序的代码打包成一个或多个优化过的文件,以提高应用的性能和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值