Visual Studio 2010使用Visual Source Safe2005进行版本管理

最近用上了vs2010..呵呵

昨天要团队做一个网站..

发现本来的Add Project Source Control.. 菜单项 已经变成了连接到 TFS源代码管理器了..

无奈没有TFS2010 服务器..试了几次无法连接到VSS2005..

google 了一下.. 才找到 原来vs2010 也可以连接到vss2005 的..呵呵

原文:

To configure VSS2005 with VS2010 we can change the settings in Tools-> Options-> Source Control-> Select the Vss Source Safe option.

Then try to open the solution or project directly see that will help.

Cheers 🙂

..

PostURL:http://social.msdn.microsoft.com/Forums/fr-FR/vssourcecontrol/thread/a3526c4c-9227-49da-93b3-709398b3d5b9

 

然后建议安装一个vss2005更新:VSS integration with Dev10

http://code.msdn.microsoft.com/KB976375

 

VSS用法指南

The usage of VSS (Visual Source Safe 2005)

1. 首先,当然是得安装好Visual Source Safe 2005

你可以在Visual Studio 2005的安装光盘中找到VSS目录,相关的安装文件就在那个目录下,如果你的光盘上没有,你可以发送一封邮件给我:stillful@foxmail.com, 我可以发送一份给您。

安装好VSS后程序菜单中应该已经有相应的快捷方式了:

image

2. 配置”Microsoft Visual SourceSafe Administration“(VSS管理器VSSA)

1). 启动VSS管理器 (因汉化包的效果并不理想,偶建议大家还是使用英文版)

2). File – > New database… (文件->新建数据库)

image

image

若您的盘符仍是FAT32文件系统,会出现警告信息:

image

建议,使用以下方法快速转换您的盘符到NTFS格式,否则VSS权限设置功能会受限。

 

如何快速将硬盘从FAT32转换为NTFS  (Windows XP下

i.   开始->”运行”   –  cmd

ii.  打开窗口以后,在光标的提示符下输入“covert X:/FS:NTFS”,然后回车。

注意在“covert”的后面有一个空格,这里的X就是您刚才指定Location所在的盘符。

iii. 接着系统会要求你输入X盘的卷标,然后回车。

卷标在“我的电脑”中点X盘,然后看它的属性可以找到。

这样就可简单地转换分区格式为NTFS了。这个方法只用于FAT32转为NTFS,不能将NTFS转为FAT32.

iv.该方法仅在windowsXp下测试成功,其他操作系统未用测试。

v. 转换的方法有很多,可以考虑使用http://news.softhouse.com.cn/news/show/10468.html上提供的更多方法。

 

继续:

3. 给自己项目的VSS起个名字,可以用类似:”VSS-My Project Source Code”这样的名字

image

4. 使用以下默认选项:

image

5. 完成了数据库的设置:

image

6. 完成后OK即可:

image

7. 来看一看新建数据库后VSS管理器(VSSA)里已经默认建立的用户名列表:

image

显然,默认情况下VSSA会创建三个用户帐号:

Admin,Guest,当前登录的用户名

8. 进入服务器配置

image

image

9. 确定后就会有服务新增:

image

10. 直接允许(如果你也装过360安全卫士的话)

image

现在可以修改Admin的密码了,空密码在客户端连接时易造成很大困惑,建议一定要改!

11. 双击Admin帐号或

image

12. 修改完成后

image

13. 最后,设置My Project的权限:共享和Web共享都开放全部权限(安全考虑可以清除Everyone权限,添加Administrators权限)

image

========到本步骤,服务器端已经设置完毕,现在可以转入客户端的VSS来配置了。=========

 

14. 在Lan的计算机上(客户端) 同样安装好VSS

 

15. 转入 “Microsoft Visual SourceSafe” (VSS)

打开已存在的数据库:

image

16. 连接到服务器的数据库

image

18. 新建连接后可以打开了!

image

19. 指定VSS目录所对应的本地的“工作目录”

image

20.本地的工作路径(截图时采用同一机器作的实验,所以能够看得到My Project(勿怪!)

image

 

21. 启动Visual Studio 2005 部署你的项目到VSS

在客户端启动VS2005,将项目框架部署到VSS中去:

1). 工具->选项

image

2). 插件设置

image

3). 将解决方案添加到源代码管理中:

image

4). 用帐号登陆:

image

5). 新建的VSS项目名称:归属到$/根目录下:

image

访问是否新建目录:

image

 

22. 现在的视图有变化了:

image

 

23. 对所有的团队开发成员约定以下几点:

1. 必须下载最新版本后现进行修改;

2. 修改需要签出(Check out)

3. 当完成修改后及时签入(Check in)

4. 不要一性长久签出多个文件(会造成团队其他成员长时等待)

5. 建议由项目管理人员首先将项目框架部署好,其他团队成员可以使用VS“获取”来得到最新版本数据

 

24. 图示1)位置为获取最新版本,2)为签出(修改前必须这样做)

image

其他几张截图:

当签出以进行编辑时的提示框(选项中可以关闭之)

image

被Default.aspx被签出到本地后的标志是前面打上了红勾!

image

当被签出后,其他人员在VSS中看到该文件的状态:

image

修改PHP上传文件大小限制

1. 一般的文件上传,除非文件很小.就像一个5M的文件,很可能要超过一分钟才能上传完.
但在php中,默认的该页最久执行时间为 30 秒.就是说超过30秒,该脚本就停止执行.
这就导致出现 无法打开网页的情况.这时我们可以修改 max_execution_time
在php.ini里查找
max_execution_time
默认是30秒.改为
max_execution_time = 0
0表示没有限制

2. 修改 post_max_size 设定 POST 数据所允许的最大大小。此设定也影响到文件上传。
php默认的post_max_size 为2M.如果 POST 数据尺寸大于 post_max_size $_POST 和 $_FILES superglobals 便会为空.
查找 post_max_size .改为
post_max_size = 150M

3. 很多人都会改了第二步.但上传文件时最大仍然为 8M.
为什么呢.我们还要改一个参数upload_max_filesize 表示所上传的文件的最大大小。
查找upload_max_filesize,默认为8M改为
upload_max_filesize = 100M

另外要说明的是,post_max_size 大于 upload_max_filesize 为佳.

css3元素简单的闪烁效果 (html5 jquery)

<html>
<head>
<style>
@-webkit-keyframes twinkling{ /*透明度由0到1*/
0%{
opacity:0; /*透明度为0*/
}
100%{
opacity:1; /*透明度为1*/
}
}

.twinkling{
-webkit-animation: twinkling 1s infinite ease-in-out;
}

.yellow{
background:yellow;
}
</style>
</head>
<body>
<div class=”twinkling yellow”>Go!!!</div>
</body>
</html>

 

注:动画名称为twinkling 时间为1s 动画次数为无限次 动画效果ease-in-out

简单吧!其实用css3做动画效果,比用flash,javascript要方便简单多了!希望浏览器赶快都支持css3 Animation .目前webkit内核的浏览器都支持(safrai,chrome)

摘自:html5专栏

OLE方式操作EXCEL(很全面,供参考)

一、新建EXCEL表

COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);

app.CreateDispatch(“EXCEL.Application”);

app.SetVisible(false); //设置表可见性

app.SetDisplayFullScreen(false); //设置不全屏显示

app.SetDisplayAlerts(false); //屏蔽警告

二、打开EXCEL表

char path[MAX_PATH];

GetCurrentDirectory(MAX_PATH,path); //获取当前目录

CString strPath = path;

strPath += “\\计算结果”;

books.AttachDispatch(app.GetWorkbooks(),true);

book.AttachDispatch(books.Add(_variant_t(strPath)));

三、获取工作表

sheets = book.GetWorksheets();

sheet = sheets.GetItem(COleVariant((short)1));

四、新建工作表

sheets = book.GetWorksheets();

sheets.Add(vtMissing,vtMissing,_variant_t((long)5[u1] ),vtMissing);

五、选择工作表某个区域

1、range = sheet.GetRange(COleVariant(“A1”),COleVariant(“A1”));

2、range.AttachDispatch(sheet.GetRange(_variant_t(“K39”),_variant_t(“K39”)),TRUE);

六、合并单元格

range = sheet.GetRange(COleVariant(“A1”),COleVariant(“A1”)); //先选择区域

range.Merge(_variant_t((long)0)); //再合并

七、设置单元格内容

1、单个单元格赋值

range = sheet.GetRange(COleVariant(“A1”),COleVariant(“A1”)); //先选择区域

range.SetValue2(COleVariant(“××”)); //再赋值

2、批量赋值

CString sCell; //定义字符串变量

for(int i=0; i<360; i++)

{

sCell.Format(“A%d”,i+2); //选择单元格

range = sheet.GetRange(COleVariant(sCell[u2] ),COleVariant(sCell[u3] ));

range.SetValue2(COleVariant((short)(1.5*i))); //再赋值

}

八、设定单元格字体,对齐方式,颜色,粗体,斜体,背景色,列宽,行高

Font ft; //定义字体变量

Interior it; //定义背景色变量

range = sheet.GetRange(COleVariant(“A1”),COleVariant(“A1”)); //先选择区域

range.SetHorizontalAlignment(_variant_t((long)-4131)); //水平居中对齐

range.SetVerticalAlignment(_variant_t((long)-4108)); //竖直居中对齐

range.SetColumnWidth(COleVariant(“20”)); //列宽

range.SetRowHeight(COleVariant(“25”)); //行高

ft.AttachDispatch(range.GetFont()); //匹配

ft.SetBold(_variant_t((long)0)); //设置粗体,0-不加粗;1-加粗

ft.SetItalic(_variant_t((long)0)); //设置斜体,0-不斜;1-斜

ft.SetSize(_variant_t((long)11)); //字大小

ft.SetColorIndex(_variant_t((long)5)); //字颜色

it.AttachDispatch(range.GetInterior());

it.SetColorIndex(_variant_t((long)8)); //背景色

 

说明:

对齐方式:(水平)居中:-4108 靠左:-4131 靠右:-4152

(竖直)居中:-4108 靠上:-4160 靠下:-4107

线颜色值:1-黑;2-白;3-红;5蓝;6黄;7-粉红;8-浅蓝;9-灰;10-绿;

九、获取单元格数据

COleVariant rValue,gValue; //定义COleVariant变量

CString quzhi; //定义字符串变量

range = sheet.GetRange(COleVariant(“A1”),COleVariant(“A1”));

rValue=COleVariant(range.GetValue(gValue)); //取得单元格数据

rValue.ChangeType(VT_BSTR); //数据转换格式

quzhi=rValue.bstrVal; //将单元格数据赋在字符串变量中

十、绘单元格边框

Range rg ; //定义变量

1、绘横线

CString strCell1strCell2,strCell3;

for (i=5;i<21;i++)

{

strCell1.Format(“I%d”,i*2);

strCell2.Format(“K%d”,i*2);

rg.AttachDispatch(sheet.GetRange(COleVariant(strCell1),

COleVariant(strCell2)),true);

rg.BorderAround(_variant_t((long)1),_variant_t((long)2),

_variant_t((long)1),vtMissing);

//线型 // 线宽 //颜色

}

2、绘竖线

for(i=0;i<20;i++)

{

strCell1.Format(“%c12”,(char)(‘I’+i));

strCell2.Format(“%c40″,(char)(‘I’+i));

rg.AttachDispatch(sheet.GetRange(COleVariant(strCell1)

,COleVariant(strCell2)),true);

rg.BorderAround(_variant_t((long)1),_variant_t((long)2),

_variant_t((long)3),vtMissing);

}

3、绘外框

strCell3=(CString)CHAR(i+74)+”40”;

rg.AttachDispatch(sheet.GetRange(COleVariant(“I10”),

COleVariant(strCell3)),TRUE);

rg.BorderAround(_variant_t((long)1),_variant_t((long)3),

_variant_t((long)5),vtMissing);

 

十一、保存结果

book.SaveAs(COleVariant(strPath),covOptional,

covOptional,covOptional,

covOptional,covOptional, (long)0,covOptional,covOptional,covOptional,

covOptional,covOptional);

十二、关闭表及释放变量

app.Quit();

sheet.ReleaseDispatch();

sheets.ReleaseDispatch();

book.ReleaseDispatch();

books.ReleaseDispatch();

app.ReleaseDispatch();

VC6.0无法打开文件和无法向工程添加文件的解决办法

今天用VC开发的时候,新建两个类后,发现没有要类视图那里显示,在文件那里也没看到,于是就想自己手动把这两个类加到工程中去,没想到一点添加文件就发生内存读写错误。开始以为是软件出错了,重启软件后,还是一样,接着发现连从VC 的“文件”-》的“打开”也没办法打开文件了,一样报内存读写错误。郁闷了半天,觉得可能是中毒了吧,开始找软件杀毒,弄来弄去还是出现同样的错误。

于是在网上找资料,找了很久终于让我找到了,原来是VC6.0和Visio两个软件(也可能是office 2010)有冲突,真是汗啊,都是微软的东西,居然有冲突,把Visio卸载掉,问题完全解决。 我实在是想不明白,自家的软件在自家的平台上运行,然后自己人还打起来了,只能说是无语了。

—以上摘自http://www.diybl.com/course/3_program/vc/vc_js/2008331/107733.html

解决方法:

第一步:下载“FileTool”,该文件是个压缩包,压缩包里是一个vc6.0写的工程文件,是微软提供的,看来微软是知道会出现问题的。

第二步:解压缩后用vc6.0编译该工程,生成一个dll文件。

第三步:将dll文件拷贝到vc安装目录下(安装目录下有个vc98文件夹,放到该文件夹里就行)。然后运行任意一个vc6.0工程项目,通过Tools(工具)->Customize(订制)->Add-ins And Macro Files(附加项和宏文件)点击“浏览”将刚才复制vc98文件夹里的DLL添加进去。这是就多了一个工具栏如图,“A”表示“添加”、“O”表示“打开”。以后就可以通过点击“A”把文件添加到工程了。

—以上摘自 http://blog.sina.com.cn/s/blog_4900be890100l3hi.html

【参考资料 感谢作者】

 

VC++操作Excel

1、必须先安装Excel;

2、在工程中导入Excel API:
ClassWizar->Add Class->选择excel.exe->选中全部->确定
自动添加excel.h、excel.cpp到工程

3、Ole初始化:
在InitInstance()函数,添加:AfxOleInit();

4、创建Excel模板文件:
新建一个空的xls文件,改名为tpl.xls,放到运行目录下。
API新建Excel文件时会以tpl.xls为模板。

5、读取Excel文件:

bool CMainFrame::LoadExcelFile(const char* pszExcelFile)
{
if (!pszExcelFile)
{
return false;
}

COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
CString sValue = “”;
_Application objApp;
Workbooks objBooks;
_Workbook objBook;
Worksheets objSheets;
_Worksheet objSheet;
Range objRange;
VARIANT vRet;
// 打开Excel文件
objApp.CreateDispatch(“Excel.Application”);
objBooks = objApp.GetWorkbooks();
objBook = objBooks.Open(pszExcelFile,  VOptional, VOptional, VOptional, VOptional,  VOptional, VOptional, VOptional, VOptional,  VOptional, VOptional, VOptional, VOptional,  VOptional, VOptional);
objSheets = objBook.GetWorksheets();
objSheet = objSheets.GetItem(COleVariant((short)1));

objRange = objSheet.GetUsedRange();
// 取行列数
vRet = objRange.GetValue(VOptional);

COleSafeArray oleSA(vRet);
long lNumRows;
long lNumCols;

oleSA.GetUBound(1, &lNumRows);
oleSA.GetUBound(2, &lNumCols);

if (lNumRows <= 1)
{
AfxMessageBox(“没有数据!”);
return true;
}

long index[2];
VARIANT vValue;
// 读取数据
for(int i=1; i<=lNumRows; ++i)
{
for(int j=1; j<=lNumCols; ++j)
{
sValue = “”;
index[0] = i;
index[1] = j;
oleSA.GetElement(index, &vValue);
switch(vValue.vt)
{
case VT_R8:
{
// 数字
sValue.Format(“%1.1f”,vValue.dblVal);
break;
}
case VT_BSTR:
{
// 文字
sValue=(CString)vValue.bstrVal;
break;
}
case VT_DATE:
{
// 日期
COleDateTime odt = COleDateTime(vValue.date);

sValue = odt.Format(“%Y-%m-%d %H:%M:%S”);
}
default:
{
break;
}
}
sValue.TrimLeft();
sValue.TrimRight();
}
}
// 关闭文件
objRange.Clear();
objBook.Close(COleVariant((short)FALSE),VOptional,VOptional);
objBooks.Close();
objApp.Quit();

return true;
}

6、新建、写入Excel文件:

bool CMainFrame::SaveExcel()
{
// 取模板文件
char szMainPath[MAX_PATH];

if (!GetModuleFileName(NULL, szMainPath, sizeof(szMainPath)))
{
return false;
}

char *pDest = strrchr(szMainPath, ‘\\’);

if (!pDest)
{
return false;
}
pDest[0] = ‘\0’;

if (szMainPath[strlen(szMainPath) – 1] != ‘\\’)
{
strcat(szMainPath, “\\tpl.xls“);
}
else
{
strcat(szMainPath, “tpl.xls”);
}
szMainPath[sizeof(szMainPath) – 1] = ‘\0’;
// 取新文件名
CFileDialog mFileDlg(FALSE, NULL,NULL,
OFN_ALLOWMULTISELECT,
_T(“Excel Files (*.xls)|*.xls|Excel2007 Files (*.xlsx)|*.xlsx|All Files (*.*)|*.*||”),
AfxGetMainWnd());
CString strPathName;

if (mFileDlg.DoModal ()==IDOK)
{
POSITION mPos = mFileDlg.GetStartPosition();

strPathName = mFileDlg.GetNextPathName(mPos);
}
else
{
return false;
}
strPathName.MakeLower();
if (strPathName.Find(“.xls”) == -1 && strPathName.Find(“.xlsx”))
{
strPathName += “.xls”;
}
// 打开新文件
COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
CString sValue=””;
_Application objApp;
_Workbook objBook;
Workbooks objBooks;
Worksheets objSheets;
_Worksheet objSheet;
Range objRange;

objApp.SetAlertBeforeOverwriting(FALSE);
objApp.SetDisplayAlerts(FALSE);

objApp.CreateDispatch(“Excel.Application”);
objBooks = objApp.GetWorkbooks();
objBook = objBooks.Open(szMainPath,  VOptional, VOptional, VOptional, VOptional,  VOptional, VOptional, VOptional, VOptional,  VOptional, VOptional, VOptional, VOptional,  VOptional, VOptional);
objSheets = objBook.GetWorksheets();
objSheet = objSheets.GetItem(COleVariant((short)1));

objRange.AttachDispatch(objSheet.GetCells(),true);
// 写数据
for (int i=1; i<10; ++i)
{
for (int j=1; j<10; ++j)
{
CString strItem;

strItem.Format(“数据 %d – %d”, i, j);

COleVariant vItem(strItem);

vItem.ChangeType(VT_BSTR);
objRange.SetItem(COleVariant((long)(i)),COleVariant((long)(j)),vItem);
}
}
// 保存文件
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

objBook.SaveAs(COleVariant(strPathName.GetBuffer(0)),covOptional,covOptional,covOptional,
covOptional,covOptional,(long)0,covOptional,covOptional,covOptional,covOptional,covOptional);
strPathName.ReleaseBuffer();
objRange.ReleaseDispatch();
// 关闭文件
objRange.Clear();
objBook.Close(COleVariant((short)FALSE),VOptional,VOptional);
objBooks.Close();
objApp.Quit();

return true;
}

上传控件(file类型的input控件)自定义样式出现“form.submit拒绝访问”错误

直接说解决办法,原理就是利用label控件。在点击label时,相当于触发上传控件的“浏览”按钮,且不会发生“拒绝访问”错误。

只有两步:

1、用CSS隐藏input控件,注意不能用display:none的方法,否则控件的功能也失效了。代码如下:

#upload_file{
position:absolute;
top:-9999px;
opacity:0;
filter:alpha(opacity:0);
}

2、为input控件添加label,属性for的值即为上传控件的ID,代码如下:

<label for=”upload_file”>上传新图标</label>

 

剩下的就是利用CSS美化这个label了。

JavaScript控制计算机 | JavaScript执行shell命令 | Javascript读写文件

其实,只要浏览器赋予网站的权限足够大,那么利用Javasript可对计算机实现非常多的控制。

比如,执行命令行命令(如关机命令、打开某个程序)、操作文件系统(如操作文件、操作目录)等。

这个过程有两个要解决的关键问题:

第一,如何让浏览器赋予特定网站足够的权限。

第二,Javascript代码如何编写。

下面分别介绍。

第一,让浏览器赋予我们的网站足够的权限。IE浏览器“工具”–Internet选项–安全,将站点添加至可信站点。对可信站点进行“自定义级别”,启用“对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本”。至此完成。

第二,JavaScript代码如何编写。提供下面两个函数供参考。

/*
* 说明:运行脚本命令或脚本文件
* 示例:shell_run(“shutdown -r -t 30”);
shell_run(“c:\\shutdown.bat”);
*/
function shell_run(shell_path) {
try {
var objShell = new ActiveXObject(“wscript.shell”);
objShell.Run(shell_path);
objShell = null;
}
catch (e) {
////////////////////////
}
}

/*
 * 创建文件并写入内容
 */
function CreateFile()
{
   var fso, tf;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   tf = fso.CreateTextFile("c:\\testfile.txt", true);
   // 写一行,并且带有新行字符。
   tf.WriteLine("Testing 1, 2, 3.") ;
   // 向文件写三个新行字符。  
   tf.WriteBlankLines(3) ;
   // 写一行。
   tf.Write ("This is a test.");
   tf.Close();
}

 

 

一点人生感悟

1、每天,形形色色的人,忙忙碌碌,究竟是为了什么?

2、人的思想、境界、层次,决定了人的成就。

3、不要把自己的职业想象的太神圣,其实都是为了活计而混口饭吃。

4、劳动者靠双手,资本家靠劳动者的双手。

5、遵循本心。

6、三思,而后,言、行。

7、停顿下来,仰望苍穹,思考人生。

表格单元格宽度的强制固定与网页对屏幕分辩率的自适应

今天,在完善一个原来项目的过程中,实现了两个想法:一个是表格单元格宽度的强制固定,另一个是网页对屏幕分辨率的自适应。下面分别介绍一下。

一、表格单元格宽度的强制固定

曾经碰到一个非常头疼的问题:一个table拆分为两个后,如何让两个table中的各个列精确对齐,看起来如同一个表。

这个问题,初想起来是蛮简单的:只要给两个table都添加相同的一堆<col>不就行了?

但实际操作起来却发现存在这样的问题:表格会根据单元格中填充内容的多少自动调整表格。

后来,我尝试着将table的各列的宽度直接作为行内style进行定义,结果也一样,表格仍然自动调整。

这里不再详述问题的解决过程。将几点重要经验分享给大家:

1、单元格的溢出处理
[css]
table{
width:1000px;
table-layout:fixed;
}
td{
overflow:hidden;
text-overflow:ellipsis;
}
[/css]

2、根据框模型,仔细分析宽度组成。这里重点观察:width是否如你所想的,包含了border、padding等。

小技巧:很多浏览器自带调试工具,用调试工具进行查看能发现意想不到的问题!

二、网页对屏幕分辩率的自适应

此项目要求在不同分辨率的屏幕上具有较为严格的一致性。这里给出解决思路供大家参考。

1、头部HEAD
[html]


[/html]
2、为要求的每种分辨率分别创建一个css文件

这些文件中只包含各分辨率下不同的部分,相同部分放在style.css中。

命名方式参考:style_pack_1920_1080.css, style_pack_1024_768.css。

3、利用js进行css文件引入控制

给出jquery代码:
[javascript]
function ajust_to_screen(){
var width = parseInt( $(‘body’).css(‘width’) );
var css_pack_file;
switch( width ){
case 1024:
css_pack_file = ‘style_pack_1024_768.css’;
break;
case 1920:
css_pack_file = ‘style_pack_1920_1080.css’;
break;
default:
css_pack_file = ‘style_pack_1920_1080.css’;
break;
}
$(‘style_pack’).attr( ‘href’, css_pack_file );
}
[/javascript]