| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6530 人关注过本帖, 1 人收藏
标题:小鱼儿C++处女作(vc word 操作封装)
只看楼主 加入收藏
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
结帖率:95.74%
收藏(1)
 问题点数:0 回复次数:29 
小鱼儿C++处女作(vc word 操作封装)
本人先声明这个程序是参考了 汪自军
封装类 来写的。

如果程序对你有所帮助,我将感到很荣幸。。
期末到了 希望大家都不要挂科哦,反正我只有英语考了,貌似及格没有压力啊。。。。

程序代码:
#ifndef CMYWORD_H
#define CMYWORD_H

#include "msword.h"
#include <ATLBASE.H>


//段落对齐的属性
enum Alignment{wdAlignParagraphCenter=1,wdAlignParagraphRight,wdAlignParagraphJustify};

//保存Word类型
/*
wdFormatDocument  标准的doc文档
wdFormatWebArchiv 单个文件网页
wdFormatHTML    网页
wdFormatFilteredHTML    去掉一些微软信息的网页
wdFormatTemplate    模版
*/

enum SaveType{
    wdFormatDocument=0,
    wdFormatWebArchive=9,
    wdFormatHTML=8,
    wdFormatFilteredHTML=10,
    wdFormatTemplate=1
};

class CmyWord
{
    //一些对象申明
public:
    _Application app;//创建word
    Documents docs;//word文档集合
    _Document doc;//一个word文件
    _Font font;//字体对象
    Selection sel;//选择编辑对象 没有对象的时候就是插入点
    Table tab;//表格对象
    Range range;
    

public:
    CmyWord();//构造函数
    virtual ~CmyWord();//析构函数

    void ShowApp(BOOL flag);
    void AppClose();
    BOOL InitCOM();//对COM进行初始化
    BOOL CreateAPP();//创建一个word程序
    BOOL CreateDocument();//创建word文档
    BOOL Create();//创建一个word程序和Word文档
    

    BOOL Open(CString FileName,BOOL ReadOnly = FALSE,BOOL  AddToRecentFiles = FALSE);//打开一个word文档;
    BOOL Close(BOOL SaveChange=FALSE);//关闭一个word文档
    BOOL Save();//保存文档
    BOOL SaveAs(CString FileName,int SaveType=0);//保存类型

    //////////////////////////文件写操作操作/////////////////////////////////////////////

    void WriteText(CString Text);//写入文本
    void NewLine(int nCount=1);//回车换N行
    void WriteTextNewLineText(CString Text,int nCount=1);//回测换N行写入文字

    //////////////////////////////////////////////////////////////////////////

    //////////////////////////字体设置////////////////////////////////////////

    void SetFont(CString FontName,int FontSize=9,long FontColor=0,long FontBackColor=0);
    void SetFont(BOOL Blod,BOOL Italic=FALSE,BOOL UnderLine=FALSE);
    void SetTableFont(int Row,int Column,CString FontName,int FontSize=9,long FontColor=0,long FontBackColor=0);

    //void SetTableFont();//统一对表格的文字做出处理.

        /////////////////////////表格操作/////////////////////////////////////

    void CreateTable(int Row,int Column);
    void WriteCellText(int Row,int Column,CString Text);

    /////////////////////////////设置对齐属性///////////////////////////////////////

    void SetParaphformat(int Alignment);


    /////////////////////////////一些常用操作///////////////////////////////////////

    //查找字符串 然后全部替换
    void FindWord(CString FindW,CString RelWord);

    //获取Word 纯文本内容
    void GetWordText(CString &Text);

    //Word 打印
    void PrintWord();

};

#endif

程序代码:
#include "StdAfx.h"
#include "CmyWord.h"


//声明 vOpt 最好用这下面这个 因为我自己喜欢用 CComVariant vOpt;出写 可能在一些特殊环境会出现错误
//COleVariant vOpt(( long )DISP_E_PARAMNOTFOUND,  VT_ERROR);
//---------------------------------------------------------------------------------------------------------
//                       小鱼儿 Word 封装类初步完成 2012 1,4  2:04
//
//1 我只学习封装了一些Word中比较使用的东西,后续还会继续改进,看哪些需要的东西要进来。来方便我们的工作学习
//2 这个我第一次用c++ 来写程序, 也是我c++入门的程序吧。有什么指点请加我QQ879801208 无聊勿加
//3 程序代码可能没有全部测试 如果有问题 谢谢指正。
//4 如果有高手想指点我一下 我是非常高兴的。。。。
//---------------------------------------------------------------------------------------------------------
CmyWord::CmyWord()
{
    InitCOM();
}

CmyWord::~CmyWord()
{
    //释放资源最好从 小到大的顺序来释放。这个和c里面一些释放资源的道理是一样的
    //和c+= 先析构儿子 再析构父亲是一样的。
  CoUninitialize();
  font.ReleaseDispatch();
  range.ReleaseDispatch();
  tab.ReleaseDispatch();
  doc.ReleaseDispatch();
  docs.ReleaseDispatch();
  app.ReleaseDispatch();
  sel.ReleaseDispatch();
}

BOOL CmyWord::InitCOM()
{
    if(CoInitialize(NULL)!=S_OK)
    {
        AfxMessageBox("初始化com库失败");
        return 0;
    }
    else
    {
        return TRUE;
    }
}

BOOL CmyWord::CreateAPP()
{
    if(!app.CreateDispatch("Word.Application"))
    {
        AfxMessageBox("你没有安装OFFICE");
        return FALSE;
    }
    else
    {
        app.SetVisible(TRUE);
        return TRUE;
    }
}

//我的类默认是打开的,而Word 中默认看不见的。
void CmyWord::ShowApp(BOOL flag)
{
    if(!app.m_lpDispatch)
    {
        AfxMessageBox("你还没有获得Word对象");
        return;
    }
    else
    {
        app.SetVisible(flag);
    }
}
BOOL CmyWord::CreateDocument()
{
    if(!app.m_lpDispatch)
    {
        AfxMessageBox("Application为空,Documents创建失败!", MB_OK|MB_ICONWARNING);
        return FALSE;
    }
    else
    {
        docs=app.GetDocuments();
        if(docs.m_lpDispatch==NULL)
        {
            AfxMessageBox("创建DOCUMENTS 失败");
            return FALSE;
        }
        else
        {
            CComVariant Template(_T(""));//创建一个空的模版
            CComVariant NewTemplate(false);
            CComVariant DocumentType(0);
            CComVariant Visible;//不处理 用默认值
            doc = docs.Add(&Template,&NewTemplate,&DocumentType,&Visible);
            if(!doc.m_lpDispatch)
            {
                AfxMessageBox("创建word失败");
                return FALSE;
            }
            else
            {
                sel = app.GetSelection();//获得当前Word操作。开始认为是在doc获得selection。仔细想一下确实应该是Word的接口点
                if(!sel.m_lpDispatch)
                {
                    AfxMessageBox("selection 获取失败");
                    return FALSE;
                }
                else
                {
                    return TRUE;
                }
            }
        }
    }
}

BOOL CmyWord ::Create()
{
    if(CreateAPP())
    {
        if(CreateDocument())
        {
            return TRUE;
        }
        else
            return FALSE;
    }
    else
        return FALSE;
}

BOOL CmyWord::Open(CString FileName,BOOL ReadOnly /* = FALSE */,BOOL AddToRecentFiles /* = FALSE */)
{

    CComVariant Read(ReadOnly);
    CComVariant AddToR(AddToRecentFiles);
    CComVariant Name(FileName);

    COleVariant vTrue((short)TRUE), vFalse((short)FALSE);
    COleVariant varstrNull("");
    COleVariant varZero((short)0);
    COleVariant varTrue(short(1),VT_BOOL);
    COleVariant varFalse(short(0),VT_BOOL);
    COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

    if(!app.m_lpDispatch)
    {
        if(CreateAPP()==FALSE)
        {
            return FALSE;
        }
    }
    if(!docs.m_lpDispatch)
    {
        docs=app.GetDocuments();
        if(!docs.m_lpDispatch)
        {
            AfxMessageBox("DocuMent 对象创建失败");
            return FALSE;
        }
    }
    CComVariant format(0);//打开方式 0 为doc的打开方式
    doc=docs.Open(&Name,varFalse,&Read,&AddToR,vOpt,vOpt,
        vFalse,vOpt,vOpt,&format,vOpt,vTrue,vOpt,vOpt,vOpt,vOpt);
    if(!doc.m_lpDispatch)
    {
        AfxMessageBox("文件打开失败");
        return FALSE;
    }
    else
    {
        sel=app.GetSelection();
        if(!sel.m_lpDispatch)
        {
            AfxMessageBox("打开失败");
            return FALSE;
        }
        return TRUE;
    }
}

BOOL CmyWord::Save()
{
    if(!doc.m_lpDispatch)
    {
        AfxMessageBox("Documents 对象都没有建立 保存失败");
        return FALSE;
    }
    else
    {
        doc.Save();
        return TRUE;
    }
}

BOOL CmyWord::SaveAs(CString FileName,int SaveType/* =0 */)
{
    CComVariant vTrue(TRUE);
    CComVariant vFalse(FALSE);
    CComVariant vOpt;
    CComVariant cFileName(FileName);
    CComVariant FileFormat(SaveType);
    doc=app.GetActiveDocument();
    if(!doc.m_lpDispatch)
    {
        AfxMessageBox("Document 对象没有建立 另存为失败");
        return FALSE;
    }
    else
    {  
        //最好按照宏来写 不然可能出现问题、 毕竟这个是微软写的
        /*ActiveDocument.SaveAs FileName:="xiaoyuer.doc", FileFormat:= _
    wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
    True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
    False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False*/


        doc.SaveAs(&cFileName,&FileFormat,&vFalse,COleVariant(""),&vTrue,
            COleVariant(""),&vFalse,&vFalse,&vFalse,&vFalse,&vFalse,&vOpt,&vOpt,&vOpt,&vOpt,&vOpt);
        
    }
    return TRUE;
}

BOOL CmyWord::Close(BOOL SaveChange/* =FALSE */)
{
    CComVariant vTrue(TRUE);
    CComVariant vFalse(FALSE);
    CComVariant vOpt;
    CComVariant cSavechage(SaveChange);
    if(!doc.m_lpDispatch)
    {
        AfxMessageBox("_Document 对象获取失败,关闭操作失败");
        return FALSE;
    }
    else
    {
        if(TRUE==SaveChange)
        {
            Save();
        }
//下面第一个参数填vTrue 会出现错误,可能是后面的参数也要对应的变化
//但vba 没有给对应参数 我就用这种方法来保存

        doc.Close(&vFalse,&vOpt,&vOpt);
    }
    return TRUE;
}

void CmyWord::WriteText(CString Text)
{
    sel.TypeText(Text);
}

void CmyWord::NewLine(int nCount/* =1 */)
{
    if(nCount<=0)
    {
        nCount = 0;
    }
    else
    {
        for(int i=0;i<nCount;i++)
        {
            sel.TypeParagraph();//新建一段
        }
    }
}

void CmyWord::WriteTextNewLineText(CString Text,int nCount/* =1 */)
{
    NewLine(nCount);
    WriteText(Text);
}

void CmyWord::SetFont(BOOL Blod,BOOL Italic/* =FALSE */,BOOL UnderLine/* =FALSE */)
{
    if(!sel.m_lpDispatch)
    {
        AfxMessageBox("编辑对象失败,导致字体不能设置");
        return;
    }
    else
    {
        sel.SetText("F");
        font=sel.GetFont();//获得字体编辑对象;
        font.SetBold(Blod);
        font.SetItalic(Italic);
        font.SetUnderline(UnderLine);
        sel.SetFont(font);
    }
}

void CmyWord::SetFont(CString FontName,int FontSize/* =9 */,long FontColor/* =0 */,long FontBackColor/* =0 */)
{
    if(!sel.m_lpDispatch)
    {
        AfxMessageBox("Select 为空,字体设置失败!");
        return;
    }
    //这里只是为了获得一个对象,因为没有对象你哪里来的设置呢.
    //因为是用GetFont来获取的对象的。
    //所以用SetText来获得字体属性
    sel.SetText("a");
    font=sel.GetFont();//获取字体对象
    font.SetSize(20);
    font.SetName(FontName);
    font.SetColor(FontColor);
    sel.SetFont(font);//选择对象
}

void CmyWord::SetTableFont(int Row,int Column,CString FontName,int FontSize/* =9 */,long FontColor/* =0 */,long FontBackColor/* =0 */)
{
    Cell c=tab.Cell(Row,Column);
    c.Select();
    _Font ft=sel.GetFont();
    ft.SetName(FontName);
    ft.SetSize(FontSize);
    ft.SetColor(FontColor);
    Range r=sel.GetRange();
    r.SetHighlightColorIndex(FontBackColor);
}

void CmyWord::CreateTable(int Row,int Column)
{
    doc=app.GetActiveDocument();
    Tables tbs=doc.GetTables(); 
    CComVariant Vopt;
    if(!tbs.m_lpDispatch)
    {
        AfxMessageBox("创建表格对象失败");
        return;
    }
    else
    {
        tbs.Add(sel.GetRange(),Row,Column,&Vopt,&Vopt);
        tab=tbs.Item(1);//如果有多个表格可以通过这个来找到表格对象。
    }
    
}

void CmyWord::WriteCellText(int Row,int Column,CString Text)
{
    Cell c=tab.Cell(Row,Column);
    c.Select();//选择表格中的单元格
    sel.TypeText(Text);
}

void CmyWord::SetParaphformat(int Alignment)
{
    _ParagraphFormat p=sel.GetParagraphFormat();
    p.SetAlignment(Alignment);
    sel.SetParagraphFormat(p);
}


void CmyWord::FindWord(CString FindW,CString RelWord)
{
    sel=app.GetSelection();
    Find myFind=sel.GetFind();
    if(!myFind.m_lpDispatch)
    {
        AfxMessageBox("获取Find 对象失败");
        return;
    }
    else
    {
        //下面三行是按照vba 写的
        myFind.ClearFormatting();
        Replacement repla=myFind.GetReplacement();
        repla.ClearFormatting();

        COleVariant Text(FindW);
        COleVariant re(RelWord);
        COleVariant vTrue((short)TRUE), vFalse((short)FALSE);
        COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
        CComVariant v(1);
        CComVariant v2(2);
        CComVariant v3(_T(""));
        //下面的Replace 对应的替换的范围是哪里.
        // 1 代表一个 2 代表整个文档
        //myFind.Execute(Text,vFalse,vFalse,vFalse,vFalse,vFalse,vTrue,&v,vFalse,re,&v2,vOpt,vOpt,vOpt,vOpt);
        myFind.Execute(Text,vFalse,vFalse,vFalse,vFalse,vFalse,
            vTrue,&v,vFalse,&re,&v2,vOpt,vOpt,vOpt,vOpt);
    }
}

void CmyWord::GetWordText(CString &Text)
{
    //CComVariant vOpt;
    COleVariant vOpt(( long )DISP_E_PARAMNOTFOUND,  VT_ERROR); 
    doc=app.GetActiveDocument();//获得当前激活文档 就是当前正在编辑文档
    if(!doc.m_lpDispatch)
    {
        AfxMessageBox("获取激活文档对象失败");
        return;
    }
    else
    {
        range=doc.Range(vOpt,vOpt);
        Text=range.GetText();
        AfxMessageBox(Text);
    }
}

//打印代码我直接Cppy 别人的 因为我没有打印机所以不好做测试
//这里只是为了方便大家

void CmyWord::PrintWord()
{
    doc = app.GetActiveDocument();
    if(!doc.m_lpDispatch)
    {
        AfxMessageBox("获取激活文档对象失败");
        return;
    }
    else
    {
        COleVariant covTrue((short)TRUE),
        covFalse((short)FALSE),
        covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

        doc.PrintOut(covFalse,              // Background.
            covOptional,           // Append.
            covOptional,           // Range.
            covOptional,           // OutputFileName.
            covOptional,           // From.
            covOptional,           // To.
            covOptional,           // Item.
            COleVariant((long)1),  // Copies.
            covOptional,           // Pages.
            covOptional,           // PageType.
            covOptional,           // PrintToFile.
            covOptional,           // Collate.
            covOptional,           // ActivePrinterMacGX.
            covOptional,           // ManualDuplexPrint.
            covOptional,           // PrintZoomColumn  New with Word 2002
            covOptional,           // PrintZoomRow          ditto
            covOptional,           // PrintZoomPaperWidth   ditto
            covOptional);          // PrintZoomPaperHeight  ditto*/
    }

}


void CmyWord::AppClose()
{
    COleVariant vOpt(( long )DISP_E_PARAMNOTFOUND,  VT_ERROR);
    if(!app.m_lpDispatch)
    {
        AfxMessageBox("获取Word 对象失败,关闭操作失败");
        return;
    }
    else
    {
        app.Quit(vOpt,vOpt,vOpt);
        //这里释放资源好像不是很好,所以我就在析构函数去处理了。
    }
}



我的工程 是vc6 控制台 支持MFC
http://
word操作封装类.zip


[ 本帖最后由 小鱼儿c 于 2012-1-4 02:38 编辑 ]
搜索更多相关主题的帖子: word 小鱼儿 处女作 压力 声明 
2012-01-04 02:30
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
我粘贴的微软的一些东西
若要开发使用 Microsoft Office Word 的解决方案,可以与 Word 对象模型提供的对象进行交互。Word 对象是按层次顺序排列的,层次结构顶端的两个主类是 Application 和 Document 类。这两个类非常重要,原因是在大部分时间里,您要么是在使用 Word 应用程序本身,要么是以某种方式处理 Word 文档。

Word 对象模型严格遵循用户界面。Application 对象表示整个应用程序,每个 Document 对象表示单个 Word 文档,Paragraph 对象对应于单个段,以此类推。这些对象各自都有很多方法和属性,您可以使用这些方法和属性操作对象或与对象交互。

Microsoft Visual Studio 2005 Tools for the Microsoft Office System (VSTO 2005) 将这些本机对象中的很多对象扩展为可在文档级自定义项中使用的宿主项和宿主控件。这些控件具有额外的功能,例如数据绑定功能和事件。例如,本机 Word Microsoft.Office.Interop.Word.Bookmark 对象被扩展为 Microsoft.Office.Tools.Word.Bookmark 控件,该控件可与数据绑定并公开事件。有关宿主项和宿主控件的更多信息,请参见 宿主项和宿主控件概述。

有关 Word 2003 对象模型的完整信息,请参见随 Word 一起安装的 Visual Basic for Applications (VBA) 文档,或参见“Welcome to the Microsoft Office Word 2003 VBA Language Reference”(欢迎使用 Microsoft Office Word 2003 VBA 语言参考)(http://go.)。有关 Word 2007 对象模型的完整信息,请参见随 Word 一起安装的 VBA 文档,或参见 MSDN 网站 (http://go.) 上的 2007 Microsoft Office system 开发人员内容。

在 Word 项目中访问对象
在使用 Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System (VSTO 2005 SE) 创建新的 Word 应用程序级项目时,Visual Studio 将自动创建一个 ThisAddIn.vb 或 ThisAddIn.cs 代码文件。可以使用 Me.Application 或 this.Application 访问 Application 对象。

在使用 VSTO 2005 创建新的 Word 文档级项目时,可以选择创建新的 Word 应用程序项目或 Word 模板项目。无论是创建文档项目还是模板项目,VSTO 2005 都将在新的 Word 项目中自动创建一个 ThisDocument.vb 或 ThisDocument.cs 代码文件。您可以使用 Me 或 this 对象引用来访问 Application 和 Document 对象。

乍一看,Word 对象模型中似乎有许多重叠。例如,Document 和 Selection 对象都是 Application 对象的成员,但是 Document 对象还是 Selection 对象的成员。Document 和 Selection 对象都包含 Bookmark 和 Range 对象。存在重叠是因为您可以通过多种方式来访问相同类型的对象。例如,您向一个 Range 对象应用格式化,但是您可能想要访问当前选择的范围、特定的段落、小节或整个文档。

用心做一件事情就这么简单
2012-01-04 02:33
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
最好学习方法还是看word 2003 宏。
它里面的宏大小怎么看呢,网上的人都用VBA 中的MSGBOX 其实没必要 直接对这个宏 点右键  选择开始显示信息 就可以看到他的大小了。

好了 搞完 睡觉了。。。

用心做一件事情就这么简单
2012-01-04 02:37
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
接分...感谢分享 楼主辛苦了
收到的鲜花
  • 小鱼儿c2012-01-04 11:27 送鲜花  2朵   附言:没有说送分啊。。。。
  • 小鱼儿c2012-01-04 11:28 送鲜花  2朵   附言:没有说送分啊。。。。
2012-01-04 08:37
lljz
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-1-4
收藏
得分:0 
正在读
2012-01-04 10:15
smallmoon521
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:517
专家分:1373
注 册:2008-4-21
收藏
得分:0 
以下是引用hahayezhe在2012-1-4 08:37:00的发言:

接分...感谢分享 楼主辛苦了
悲剧乎,没分可接,呵呵

顶一个,不错. 话说VX生成代码的能力与eclipse比,还是欠火候,不过比当年没有时,要好多了

为游戏狂~~!!    大家努力编哈!
2012-01-04 10:19
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
以下是引用smallmoon521在2012-1-4 10:19:37的发言:

悲剧乎,没分可接,呵呵

顶一个,不错. 话说VX生成代码的能力与eclipse比,还是欠火候,不过比当年没有时,要好多了


这个没有看的很明白,你说的是vc系列吗 和这个eclipse(我还真的没有用过)。
vc6 +assit+winTab + 显示列号 +打上补丁 蛮好用的啊。

用心做一件事情就这么简单
2012-01-04 11:33
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
可不可以给点分啊
收到的鲜花
  • 小鱼儿c2012-01-05 00:35 送鲜花  7朵   附言:给你一个最高分,不要再要了,我没有了。 ...

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2012-01-04 11:40
smallmoon521
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:517
专家分:1373
注 册:2008-4-21
收藏
得分:0 
以下是引用小鱼儿c在2012-1-4 11:33:44的发言:

 
 
这个没有看的很明白,你说的是vc系列吗 和这个eclipse(我还真的没有用过)。
vc6 +assit+winTab + 显示列号 +打上补丁 蛮好用的啊。
恩,VX就是那个assit,以前没有时,因为只有保留字才是蓝色的,自己写的类等,都是黑的,
满屏黑的,表达式,函数,全是黑的... 不过那时也挺过来了,呵呵.
eclipse没用过应该听过吧? 是个IDE,一般用于Java, 也可以安C/C++的插件,使之支持C.
eclipse生成代码的能力是霸气的一B啊. 对private变量生成public访问方法就不说了,在grails里,基本的增删改查代码都是自动生成的
而且有各种提示,且给出解决方案;修改变量名等,可视化操作....等等,
个人认为,eclipse是Java IDE的神器了(可能是我没用过其他java IDE的原故吧)
其插件化的理念也是很霸气的,象OD,VIM在插件支持上做的都很好,其软件的可定制性提高了,适用于不同需求的人
软件的生命期也延长了.
说多了,呵呵,WinTab没用过,显示列号还是行号? 怎么弄?

为游戏狂~~!!    大家努力编哈!
2012-01-04 17:39
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
回复 9楼 smallmoon521
嘿嘿,我也是在别人论坛里面发现的。
下一个插件,你要的话我给你连接。

Wintab 方面切换页面。

用心做一件事情就这么简单
2012-01-05 00:35
快速回复:小鱼儿C++处女作(vc word 操作封装)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027889 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved