VisualStudio2010自定义代码段新特性

【菜科解读】
2010年2月24日,北京,阴,今天是参加微软VSTS 2010 TTT培训的第二天,也是最后一天,这次来参加这个讲师培训收获良多,课程上的内容由于目前处于NDA保密状态,不方便发表出来,但很久没写文章也觉得愧对朋友们,所以接下来我会陆续写一些非本次TTT的关于VSTS 2010的文章,主要以VSTS 2010新特性为主,希望大家喜欢且对大家的实际工作有所帮助。
言归正传,本文要介绍的是VSTS 2010客户端IDE的一个新功能,根据字面意思我暂且翻译成自定义代码段,这个功能可以帮助开发人员记录经常要输入的文字,这些文字可以是代码,注释,版权信息等等,虽然该功能并非VS首创,但是也给新版VS增强了很多易用性,首先来看一下如何使用:
首先启动VS 2010,这里我安装的是VS 2010 旗舰版 Beta 2:
接下来在VS 2010中新建一个任意类型文件,这里我创建一个HTML文件:
在要插入代码的地方右击选择Insert Snippet ,或者可以使用快捷键Ctrl+K Ctrl+X进行同样操作:
然后选择要插入的内容即可:
这样就轻松完成了代码的插入,对于以上的简单代码大家可能并不能看出效率来,接下来我们来将自己常用的代码或项目中常用的代码添加到其中,以后使用的时候就非常方便,快捷,并且这个功能给很多类人带来了方便:
1. 讲师:做Demo的时候再也不用复制粘贴了,只要将Demo代码段做成类似的快捷代码就可以轻松完成Demo;
2. 开发人员:通过自定义快捷代码的方式,我们可以轻松与同事共享好的算法和常用的数据结构等。
开始先介绍一下这些预定义的代码的存储方式,我们在VS 2010菜单项中选择Tools,再选择Code Snippets Manager :
在这个管理器中我们可以看到所有预定义的可被快速插入的代码及文本:
我们随便选择一个代码到它的物理位置看看:
通过上图我们可以看到,代码段是其实就是定义在一个XML格式的以snippet为后缀的文件中,也许很多人看到上面大量的XML结构会头疼,但是,其实制作自己的自定义代码段很轻松,接卸来我们就来做一个测试例子。
还是以HTML代码为例,首先我们为了不影响且区分于VS自带的代码段,我们新建一个节点,选择Add 为我们要存储的代码段选择一个目录:
创建完成后如下:
这里选择目录的时候可以选择一个共享目录,如果是企业用户的话,可以在文件服务器上创建一个共享目录,方便大家共享自定义的方便代码段。
接着我们创建具体代码段文件,首先新建一个XML格式的文件:
接着,我们在新建的文件中使用自定义代码段的功能来创建我们自己的代码段文件,选择Insert Snippet ,再选择Snippet即可,为什么我们之前在HTML文件中没有发现这个节点呢?是因为VS 2010的代码段功能有一定的智能判断,会根据我们的文件类型来判断显示的代码段,所以只有在XML格式文件中我们才可以看到Snippet的快捷代码,插入完成后如下:
其中最主要的是Code节点,Code节点的Inner Text是我们使用该代码段插入的代码,而这里我们想让新建的代码段在HTML文档中可以使用,就要将Language属性改为html,如下:
修改完成后,另存到MyCode目录下,并以snippet为后缀:
保存完成后就可以在刚才的HTML中试试了,可以轻松插入代码:
关于自定义代码段,其中有一些XML节点有特殊的意思,有兴趣大家可以看看VS自带的那些代码段文件来定义出更好的自定义代码段,多谢!
VisualStudio2010,自定义,代码,段新,特性,用vmware运行自做的linux启动盘的引导代码
简单的引导代码如下所示: 1 org 07c00h ;告诉编译器加载到07c00h处 3 mov ax, cs 4 mov ds, ax 5 mov es, ax 7 call DispStr ;调用显示字符串函数 9 jmp $; 无限循环11 DispStr:12 mov ax, BootMessge13 mov bp, ax14 mov cx, 1615 mov ax, 01301h16 mov bx, 000ch17 mov dl, 018 int 10h19 ret20 BootMessge: db "hello, OS world!"21 times 510 - ($ - $$) db 022 dw 0aa55h这段代码时用nasm写的,它类似于masm的语言。
org 07c00h命令就是将命令后面的代码中的偏移地址都加上07c00h,这样程序就相当于在0000:7c00出执行了。
按书中所讲的,用命令nasm bootsector.asm -o boot.bin生成引导代码boot.bin,然后将boot.bin写入软盘的0面0磁道1扇区就可以了。
问题就来了,我没有软盘怎么搞,不过在wmware虚拟机中貌似可以用软盘的映像文件来启动,所以就想到自己制作一个映像文件来代替软盘来作为启动盘,不过怎么创建这个映像文件呢?以前记得用linux下的dd命令做过linux的启动盘,dd应该是可以制作的,于是在网上找了下dd制作映像文件,果然是可以的,制作方法如下:1 先制作一个空的软盘映像文件diska.img(1.44Mb的软盘映像文件):dd if=/dev/zero of=diska.img bs=512 count=28802 制作一个包含boot.bin的映像文件boot.img:dd if=boot.bin of=boot.img bs=512 count=13 将diska.img中1个扇区后面的数据拷贝到boot.img的后面dd if=diska.img of=boot.img skip=1 seek=1 bs=512 count=2879这样就做成了一个大小为1.44Mb的包含引导代码的映像文件。
后面的事就好办了,直接在wmware创建一个空的虚拟机,在设置中将Floppy的路径设置为上面制作的引导扇区的路径就ok了,如下图那样:设置Floppy连接,断开CD/DVD连接,启动虚拟机就可以看到下面的画面了: 总结:这个小的代码的编写和运行还是能让自己对系统启动有一个更深的认识,不过有个不懂的就是怎么用ISO镜像文件启动,怎么将引导代码写入ISO镜像文件,依然没有找到很好的方法解决。
用,vmware,运行,自做,的,linux,启动,盘,引导
VC++语言实现MFC剪贴板操作实例代码
下面的代码呈现了怎能将扩展图元文档复制到剪贴板:if(OpenClipboard());{EmptyClipboard();//创建图元文档DCCMetaFileDC * cDC = new CMetaFileDC();cDC->CreateEnhanced(GetDC(),NULL,NULL,"the_name");//调用绘图例程//关闭CMetafileDC并获得它的句柄HENHMETAFILE handle = cDC->CloseEnhanced();//复制到剪贴板SetClipBoardData(CF_ENHMETAFILE,handle);CloseClipboard();//删除dcdelete cDC;}下面的代码演示了从剪贴板获得图元文档并将其绘制到client DC上:if(OpenClipboard()){//获得剪贴板数据HENMETAFILE handle = (HENMETAFILE)GetClipboardData(CF_ENHMETAFILE);//呈现CClientDC dc(this);CRect client(0,0,200,200);dc.PlayMetaFile(handle,client);//关闭剪贴板CloseClipboard();}三、位图的操作位图的操作稍微复杂一点,下面那个例子呈现了怎能在剪贴板保存位图:if(OpenClipboard()){EmptyClipboard();CBitmap * junk = new CBitmap();CClientDC cdc(this);CDC dc;dc.CreateCompatibleDC( CRect client(0,0,200,200);junk->CreateCompatibleBitmap(&cdc,client.Width(),client.Height());dc.SelectObject(junk);DrawImage(&dc,CString("Bitmap"));//复制数据到剪贴板SetClipboardData(CF_BITMAP,junk->m_hObject);CloseClipboard();delete junk;}下面的代码呈现了怎能从剪贴板上获得位图数据:if(OpenClipboard()){//获得剪贴板数据HBITMAP handle = (HBITMAP)GetClipboardData(CF_BITMAP);CBitmap * bm = CBitmap::FromHandle(handle);CClientDC cdc(this);CDC dc;dc.CreateCompatibleDC( dc.SelectObject(bm);cdc.BitBlt(0,0,200,200,&dc,0,0,SRCCOPY);CloseClipboard();}四、设置并应用自定义各式应用RegisterClipboardFormat()参数,没出国疑问复制和粘贴任何你需求的数据TYPE。
比如咱们有以下唯一的数据TYPE:struct MyFormatDatalong val1;int val2;};咱们要把它复制到剪贴板,没出国疑问应用如下的代码:UINT format = RegisterClipBoardFormat("MY_CUSTOM_FORMAT");if(OpenClipboard()){MyFormatData data;data.val1 = 100;data.val2 = 200;HGLOBAL clipbuffer;EmptyClipboard();clipbuffer = GlobalAlloc(GMEM_DDESHARE, sizeof(MyFormatData));MyFormatData * buffer = (MyFormat数据*)GlobalLock(clipbuffer);//保存到内存*buffer = data;//保存到剪贴板GlobalUnlock(clipbuffer);SetClipboardData(format,clipbuffer);CloseClipboard();}读取数据应用以下代码:UINT format = RegisterClipboardFormat("MY_CUSTOM_FORMAT");MyFormatData data;if(Openclipboard()){HANDLE hData =GetClipboardData(format);MyFormatData * buffer = (MyFormatData*)GlobalLock(hData);data = *buffer;GlobalUnlock(hData);CloseClipboard();}五、感知剪贴板内容的改变经过win界面消息没出国疑问感知剪贴板内容也许除了改变,代码如下://In your initialization code call:SetClipboardViewer(); //将咱们的程式添加到剪贴板观察链//In your message map add:ON_MESSAGE(WM_DRAWCLIPBOARD, OnClipChange) //添加Message handle//Which is declared as:afx_msg void OnClipChange();Finally implement:void CDetectClipboardChangeDlg::OnClipChange(){CTime time = CTime::GetCurrentTime();SetDlgItemText(IDC_CHANGED_DATE,time.Format("%a, %b %d, %Y -- %H:%M:%S"));DisplayClipboardText(); VC++,语言,实现,MFC,剪贴板,操作,实例,代码,