用Qt写的一个仿Windows记事本程序

闲得无聊加上自己喜欢Qt所以就写了这样一个仿windows记事本的程序,全部功能经测试可用.Qt版本5.5+win7x64

其中有部分逻辑比较乱,大家多多交流

备用链接:https://github.com/piaodonkey/notepad

.pro部分:

#-------------------------------------------------
#
# Project created by QtCreator 2015-09-12T21:33:50
#
#-------------------------------------------------

QT       += core gui
QT       +=printsupport
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
RC_FILE = myico.rc
TARGET = untitled30
TEMPLATE = app

SOURCES += main.cpp        mainwindow.cpp

HEADERS  += mainwindow.h
CONFIG+=c++11

RESOURCES +=     dell.qrc
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtWidgets>
#include <QMainWindow>
#include <QPrinter>
#include <QtPrintSupport>
//#include <QFileDialog>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
      void setTex(const QString &temp);
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
protected:

      bool eventFilter(QObject *, QEvent *);
private:

    QString tempText;
    QAction *printpdfAction,*newAction,*openAction,*saveAction,*saveAsAction,*printAction,*exitAction,
            *undoAction,*cutAction,*copyAction,*patseAction,*delAction,*findAction,*findNextAction,
            *replaceAction,*selAllAction,*dateTAction,*autoLAction,*fontAction,*statusAction,*helpAction,*aboutAction,*jump2Action;
     QFileDialog *fDialog;
    QTextEdit *textEdit;
    void initAction();
    void initMenu();
    void find();
    QString findString;
    QList<QAction*> fileL,editL,styleL,viewL,helpL,statusL;
    QMenu *fileM,*editM,*styleM,*viewM,*helpM;
    void init();
    void conn();
    QString curFile;
    void setCunrrentFile(const QString &);
    void closeEvent(QCloseEvent *e);
    bool saveFile(const QString &);
    void print();
private slots:
    bool saveAs();

    void openFile();
    void newFile();
    bool maybeSave();
    void setSB();
    bool save();

    //void textModifyed();
};

#endif // MAINWINDOW_H
main.cpp

#include "mainwindow.h"
#include <QApplication>
#include <QString>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.setTex(QString::fromLocal8Bit(argv[1]));
    w.show();
    return a.exec();
}
mainwindow.cpp

#include "mainwindow.h"
#include <QtPrintSupport>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //setWindowTitle("未命名[*]");
    initMenu();
    //statusAction->setCheckable(true);
    textEdit=new QTextEdit(this);
    setCentralWidget(textEdit);
    statusBar()->showMessage("Ready");
    fDialog=new QFileDialog(this);
    resize(600,600);
    setCunrrentFile("");
    setUnifiedTitleAndToolBarOnMac(true);
    conn();
    textEdit->installEventFilter(this);
    this->setAcceptDrops(false);
    textEdit->setAcceptDrops(false);
    this->setWindowIcon(QIcon(":/1.ico"));

}

void MainWindow::setTex(const QString &temp)
{
   // QMessageBox::about(this,temp,temp);
    tempText=temp;
    if(!tempText.isEmpty())
        openFile();
   // tempText.clear();
}

bool MainWindow::eventFilter(QObject *obj, QEvent *e)
{
    if(obj==textEdit)
    {

            if(textEdit->textCursor().hasSelection())
            {
                delAction->setEnabled(true);
                //qDebug()<<"selected";
                return true;

            }
            else
            {
                delAction->setDisabled(true);
                return false;
            }

    }
    else
        return QMainWindow::eventFilter(obj,e);
}

void MainWindow::conn()
{
    connect(printAction,&QAction::triggered,this,[=](){
            QPrinter printer;
            QPrintDialog *dialog = new QPrintDialog(&printer, this);
            dialog->setAttribute(Qt::WA_DeleteOnClose);
           // dialog->setWindowTitle(tr("Print Document"));
            if (textEdit->textCursor().hasSelection())
                dialog->addEnabledOption(QAbstractPrintDialog::PrintSelection);
            if (dialog->exec() == QDialog::Accepted)
                textEdit->print(&printer);
    });
    connect(helpAction,&QAction::triggered,this,[=](){
        QMessageBox::information(this,"帮助","如有疑问请联系QQ:2850125339");
    });
    connect(aboutAction,&QAction::triggered,this,[=](){
        QMessageBox::about(this,"关于",static_cast<QString>(QSysInfo::windowsVersion()));
    });
    connect(statusAction,&QAction::toggled,this,&MainWindow::setSB);//设置状态栏
    connect(autoLAction,&QAction::toggled,this,[=](){
              textEdit->setWordWrapMode(static_cast<QTextOption::WrapMode>(autoLAction->isChecked()));

    });
    connect(exitAction,&QAction::triggered,this,&MainWindow::close);
    connect(newAction,&QAction::triggered,this,&MainWindow::newFile);
    connect(openAction,&QAction::triggered,this,&MainWindow::openFile);

    connect(saveAsAction,&QAction::triggered,this,&MainWindow::saveAs);
    connect(saveAction,&QAction::triggered,this,&MainWindow::save);
    connect(textEdit,&QTextEdit::textChanged,this,[=](){setWindowModified(textEdit->document()->isModified());});
    connect(printpdfAction,&QAction::triggered,this,&MainWindow::print);
    connect(textEdit,SIGNAL(undoAvailable(bool)),undoAction,SLOT(setEnabled(bool)));
    connect(undoAction,&QAction::triggered,textEdit,&QTextEdit::undo);
    connect(textEdit,SIGNAL(copyAvailable(bool)),cutAction,SLOT(setEnabled(bool)));
    connect(textEdit,SIGNAL(copyAvailable(bool)),copyAction,SLOT(setEnabled(bool)));

    connect(cutAction,&QAction::triggered,textEdit,&QTextEdit::cut);
    connect(copyAction,&QAction::triggered,textEdit,&QTextEdit::copy);
    connect(patseAction,&QAction::triggered,textEdit,&QTextEdit::paste);
    connect(delAction,&QAction::triggered,textEdit,[=](){textEdit->textCursor().removeSelectedText();});
    connect(findAction,&QAction::triggered,this,&MainWindow::find);
    connect(findNextAction,&QAction::triggered,this,[=](){
        textEdit->find(findString);
    });
    connect(replaceAction,&QAction::triggered,textEdit,[=](){
        QDialog *inputDia=new QDialog(this);
        inputDia->setWindowModality(Qt::ApplicationModal);
        inputDia->setAttribute(Qt::WA_DeleteOnClose);
        inputDia->setWindowTitle(tr("替换对话框"));
        QLabel *label=new QLabel(tr("查找内容:"),inputDia);
        QLabel *label1=new QLabel(tr("替换内容:"),inputDia);
        QLineEdit *line=new QLineEdit(inputDia);
        QLineEdit *line1=new QLineEdit(inputDia);
        QPushButton *ok=new QPushButton(tr("替换"),inputDia);
        QPushButton *cancel=new QPushButton(tr("取消"),inputDia);
        QHBoxLayout *layout=new QHBoxLayout;
        QHBoxLayout *layout3=new QHBoxLayout;
        layout->addWidget(label);
        layout3->addWidget(label1);
        layout->addWidget(line);
        layout3->addWidget(line1);
        QHBoxLayout *layout1=new QHBoxLayout;
       // layout1->addLayout(layout);
        layout1->addWidget(ok);
        layout1->addWidget(cancel);
        QVBoxLayout *layout2=new QVBoxLayout;
        layout2->addLayout(layout);
        layout2->addLayout(layout3);
        layout2->addLayout(layout1);
        inputDia->setLayout(layout2);
        inputDia->show();
        connect(ok,&QPushButton::clicked,textEdit,[=](){
            if(textEdit->find(line->text()))
            {
                textEdit->insertPlainText(line1->text());
            }
            ;});
        connect(cancel,&QPushButton::clicked,inputDia,&QDialog::close);
    });
    connect(selAllAction,&QAction::triggered,textEdit,[=](){
        textEdit->selectAll();
    });
    connect(dateTAction,&QAction::triggered,textEdit,[=](){
        //textEdit->append(QTime::currentTime().toString());
        textEdit->append(QDateTime::currentDateTime().toString());

    });
    connect(fontAction,&QAction::triggered,this,[=](){
        bool ok;
        QFont font = QFontDialog::getFont(&ok, this);
        if (ok) {
            // font is set to the font the user selected
            textEdit->setFont(font);
        }
    });
}
void MainWindow::find()
{
    //QString findString;
    QDialog *inputDia=new QDialog(this);
    inputDia->setWindowModality(Qt::ApplicationModal);
    inputDia->setAttribute(Qt::WA_DeleteOnClose);
    inputDia->setWindowTitle(tr("查找对话框"));
    QLabel *label=new QLabel(tr("查询内容:"),inputDia);
    QLineEdit *line=new QLineEdit(inputDia);
    QPushButton *ok=new QPushButton(tr("查询下一个"),inputDia);
    QPushButton *cancel=new QPushButton(tr("取消"),inputDia);
    QHBoxLayout *layout=new QHBoxLayout;
    layout->addWidget(label);
    layout->addWidget(line);
    QHBoxLayout *layout1=new QHBoxLayout;
   // layout1->addLayout(layout);
    layout1->addWidget(ok);
    layout1->addWidget(cancel);
    QVBoxLayout *layout2=new QVBoxLayout;
    layout2->addLayout(layout);
    layout2->addLayout(layout1);
    inputDia->setLayout(layout2);
    inputDia->show();
    connect(ok,&QPushButton::clicked,textEdit,[=](){
        findString=line->text();
    textEdit->find(line->text());});
    connect(cancel,&QPushButton::clicked,inputDia,&QDialog::close);
}

void MainWindow::print()
{
    QString fileName = QFileDialog::getSaveFileName(this, tr("导出PDF文件"), QString(), "*.pdf");
        if (!fileName.isEmpty()) {
            // 如果文件后缀为空,则默认使用.pdf
            if (QFileInfo(fileName).suffix().isEmpty())
                fileName.append(".pdf");
            QPrinter printer;
            // 指定输出格式为pdf
            printer.setOutputFormat(QPrinter::PdfFormat);
            printer.setOutputFileName(fileName);
            textEdit->print(&printer);

        }

}
void MainWindow::setCunrrentFile(const QString &fileName)
{
     curFile=fileName;
     textEdit->document()->setModified(false);
     this->setWindowModified(false);
     QString showName=curFile;
     if(curFile.isEmpty())
     {
         showName="未命名";
     }
     setWindowFilePath(showName);
}
bool MainWindow::saveFile(const QString &fileName)
{

    QFile file(fileName);
    if(!file.open(QIODevice::WriteOnly))
    {
        QMessageBox::critical(this,fileName,"写入错误",QMessageBox::Ok);
        return false;
    }
    QTextStream out(&file);
    //textEdit->clear();
#ifndef QT_NO_CURSOR
QApplication::setOverrideCursor(Qt::WaitCursor);
#endif
statusBar()->showMessage("保存文件...");
//while(!in.atEnd())
//{
//textEdit->append( in.readLine());
  // if(fDialog->selectedNameFilter())
    out<<textEdit->toPlainText();
   // out<<textEdit->toHtml();
//}
statusBar()->showMessage("保存完毕",2000);
this->setWindowModified(false);
textEdit->document()->setModified(false);
#ifndef QT_NO_CURSOR
QApplication::restoreOverrideCursor();
#endif

return true;
}
bool MainWindow::save()
{
    if(curFile.isEmpty())
    {
        return saveAs();
    }
    else
    {
        saveFile(curFile);
        return true;
    }

}
bool MainWindow::saveAs()
{
    QFileDialog dialog(this);
    dialog.setAcceptMode(QFileDialog::AcceptSave);
    dialog.setNameFilter("文本文档(*.txt)");
    QStringList files;
    if(dialog.exec())
        files=dialog.selectedFiles();
    else
        return false;
    return saveFile(files.at(0));
}
void MainWindow::closeEvent(QCloseEvent *e)
{
   if(maybeSave())
   {
       e->accept();
   }
   else
       e->ignore();
}
void MainWindow::openFile()
{
    if(maybeSave())
    {
        QString text;
        if(tempText.isEmpty())
        {
             text=QFileDialog::getOpenFileName(this,"打开文件",QDir::currentPath(),tr("文本文件 (*.txt);;图像文件 (*.png *.jpg *.bmp *.gif *.jpeg);;所有文件 (*.*)"));
             tempText=text;
        }
        setCunrrentFile(tempText);
       //
        if(!tempText.isEmpty())
        {
            QFile file(tempText);
            if(!file.open(QIODevice::ReadOnly))
            {
                QMessageBox::critical(this,"错误",text.append("打开错误!"),QMessageBox::Ok);
                return;
            }
            QTextStream in(&file);
            textEdit->clear();

#ifndef QT_NO_CURSOR
    QApplication::setOverrideCursor(Qt::WaitCursor);
#endif
    statusBar()->showMessage("载入文件...");
    while(!in.atEnd())
    {
        textEdit->append( in.readLine());
    }
    statusBar()->showMessage("载入完毕",2000);
    this->setWindowModified(false);
    textEdit->document()->setModified(false);
#ifndef QT_NO_CURSOR
    QApplication::restoreOverrideCursor();
#endif

        }
    }
     tempText.clear();
}
void MainWindow::newFile()
{
    if(maybeSave())
    {
        textEdit->clear();
        setWindowTitle("未命名[*]");
    }
}
bool MainWindow::maybeSave()
{
    if(textEdit->document()->isModified())
    {
        QMessageBox::StandardButton ret;
        ret=QMessageBox::warning(this,this->windowTitle(),"已修改,是否保存",QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel);
        if(ret==QMessageBox::Save)
        {
            return save();
        }
        else if(ret==QMessageBox::Cancel)
        {
            return false;
        }

    }
    return true;
}
void MainWindow::setSB()
{
    if(statusAction->isChecked())
    {
        statusBar();
        //statusAction->setChecked(true);
        //qDebug()<<statusAction->isCheckable()<<statusAction->isChecked();
    }
    else
    {
        setStatusBar(0);
        //statusAction->setChecked(false);
    }

}
void MainWindow::initMenu()
{

    initAction();

    fileM=menuBar()->addMenu(tr("文件(&F)"));
    fileM->addActions(fileL);

    editM=menuBar()->addMenu(tr("编辑(&E)"));
    editM->addActions(editL);

    styleM=menuBar()->addMenu(tr("格式(O)"));
    styleM->addActions(styleL);

    viewM=menuBar()->addMenu(tr("查看(&V)"));
    viewM->addActions(viewL);

    helpM=menuBar()->addMenu(tr("帮助(&H)"));
    helpM->addActions(helpL);

}
void MainWindow::initAction()
{

    newAction=new QAction(QIcon(":/Action/new"),tr("&新建"),this);
    newAction->setStatusTip(tr("新建文件"));
    newAction->setShortcuts(QKeySequence::New);

    openAction=new QAction(QIcon(":/Action/open"),tr("&打开"),this);
    openAction->setStatusTip(tr("打开文件"));
    openAction->setShortcuts(QKeySequence::Open);

    saveAction=new QAction(QIcon(":/Action/save"),tr("&保存"),this);
    saveAction->setStatusTip(tr("保存文件"));
    saveAction->setShortcuts(QKeySequence::Save);

    saveAsAction=new QAction(QIcon(":/Action/saveAs"),tr("&另存为"),this);
    saveAsAction->setStatusTip(tr("另存文件"));
    saveAsAction->setShortcuts(QKeySequence::SaveAs);

    printAction=new QAction(QIcon(":/Action/print"),tr("&打印"),this);
    printAction->setStatusTip(tr("打印文件"));
    printAction->setShortcuts(QKeySequence::Print);

    printpdfAction=new QAction(QIcon(":/Action/printPdf"),tr("&打印PDF"),this);
    printpdfAction->setStatusTip(tr("打印成PDF文件"));

    exitAction=new QAction(QIcon(":/Action/exit"),tr("&退出"),this);
    exitAction->setStatusTip(tr("退出..."));
    exitAction->setShortcuts(QKeySequence::Quit);

    undoAction=new QAction(QIcon(":/Action/undo"),tr("&撤销"),this);
    undoAction->setStatusTip(tr("撤销"));
    undoAction->setShortcuts(QKeySequence::Undo);
    undoAction->setDisabled(true);
   // undoAction->setSeparator(true);

    cutAction=new QAction(QIcon(":/Action/cut"),tr("&剪切"),this);
    cutAction->setStatusTip(tr("剪切"));
    cutAction->setShortcuts(QKeySequence::Cut);
    cutAction->setDisabled(true);

    copyAction=new QAction(QIcon(":/Action/copy"),tr("&复制"),this);
    copyAction->setStatusTip(tr("复制"));
    copyAction->setShortcuts(QKeySequence::Copy);
    copyAction->setDisabled(true);

    patseAction=new QAction(QIcon(":/Action/patse"),tr("&粘贴"),this);
    patseAction->setStatusTip(tr("粘贴"));
    patseAction->setShortcuts(QKeySequence::Paste);
    //patseAction->setDisabled(true);
    if (const QMimeData *md = QApplication::clipboard()->mimeData())
                    patseAction->setEnabled(md->hasText());

    delAction=new QAction(QIcon(":/Action/del"),tr("&删除"),this);
    delAction->setStatusTip(tr("删除"));
    delAction->setShortcuts(QKeySequence::Delete);
    delAction->setDisabled(true);

    findAction=new QAction(QIcon(":/Action/find"),tr("&查找"),this);
    findAction->setStatusTip(tr("查找"));
    findAction->setShortcuts(QKeySequence::Find);

    findNextAction=new QAction(QIcon(":/Action/findNext"),tr("&查找下一个"),this);
    findNextAction->setStatusTip(tr("查找下一个"));
    findNextAction->setShortcuts(QKeySequence::FindNext);

    replaceAction=new QAction(QIcon(":/Action/replace"),tr("&替换"),this);
    replaceAction->setStatusTip(tr("替换"));
    replaceAction->setShortcuts(QKeySequence::Replace);

    jump2Action=new QAction(QIcon(":/Action/jump2"),tr("&转到"),this);
    jump2Action->setStatusTip(tr("转到"));
    jump2Action->setShortcut(QKeySequence("Ctrl+G"));
    jump2Action->setDisabled(true);

    selAllAction=new QAction(QIcon(":/Action/selAll"),tr("&全选"),this);
    selAllAction->setStatusTip(tr("全选"));
    selAllAction->setShortcuts(QKeySequence::SelectAll);

    dateTAction=new QAction(QIcon(":/Action/dateT"),tr("&时间日期"),this);
    dateTAction->setStatusTip(tr("时间/日期"));
    dateTAction->setShortcut(QKeySequence("Ctrl+T"));

    autoLAction=new QAction(tr("&自动换行"),this);
    autoLAction->setStatusTip(tr("自动换行"));
    autoLAction->setShortcut(QKeySequence("Ctrl+W"));
    autoLAction->setCheckable(true);
    autoLAction->setChecked(true);

    fontAction=new QAction(QIcon(":/Action/font"),tr("&字体"),this);
    fontAction->setStatusTip(tr("字体"));
    fontAction->setShortcut(QKeySequence("Ctrl+F"));

    //statusAction=new QAction(QIcon(":/Action/status"),tr("&状态栏"),this);
    statusAction=new QAction(tr("&状态栏"),this);
    statusAction->setStatusTip(tr("状态栏"));
    statusAction->setShortcut(QKeySequence("S"));
    statusAction->setCheckable(true);
    statusAction->setChecked(true);

    helpAction=new QAction(QIcon(":/Action/help"),tr("&帮助"),this);
    helpAction->setStatusTip(tr("帮助"));
    helpAction->setShortcuts(QKeySequence::HelpContents);

    aboutAction=new QAction(QIcon(":/Action/about"),tr("&关于"),this);
    aboutAction->setStatusTip(tr("关于"));
    aboutAction->setShortcut(QKeySequence("Ctrl+A"));

    //initShortCuts();

    fileL<<newAction<<openAction<<saveAction<<saveAsAction<<menuBar()->addSeparator()<<printAction<<printpdfAction<<menuBar()->addSeparator()<<exitAction;

    editL<<undoAction<<menuBar()->addSeparator()<<cutAction<<copyAction<<patseAction<<delAction<<menuBar()->addSeparator()<<findAction<<findNextAction<<replaceAction<<jump2Action<<menuBar()->addSeparator()<<selAllAction<<dateTAction;
    styleL<<autoLAction<<fontAction;
    viewL<<statusAction;
    helpL<<helpAction<<aboutAction;
    statusL<<statusAction;

}
MainWindow::~MainWindow()
{

}
资源文件

<RCC>
    <qresource prefix="/">
        <file>1.ico</file>
    </qresource>
</RCC>

其中1.ico文件和完整的程序代码包在附件里

其中文档没有做,大部分都是调用的api 很容易理解

时间: 2024-10-28 10:17:38

用Qt写的一个仿Windows记事本程序的相关文章

【J2SE】java仿windows记事本

基于J2SE实现的一个记事本程序. 运行程序截图: 工程目录结构: 程序代码: package com.hblg; import java.awt.BorderLayout; import java.awt.FileDialog; import java.awt.Font; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.aw

用qt写的一个简单到不能在简单的上位机

学QT时,写的一个简单得不能再简单的串口上位机,用来控制单片机上的2个LED.假设一个是只有开和关的状态.一个可以调节亮度.上位机的界面如下图: 其中,波特率,数据位,停止位下拉值在设计师里面添加.剩下的功能,基本由代码实现.通信使用的协议也是随便写的.很简单和随意.图片是老弟手绘的. 下面贴代码 (*^__^*) #include "mainwindow.h" #include "ui_mainwindow.h" #include <QtSerialPort

一个远程启动windows c++程序引发的技术决策现象

还是因为那个8点半前要启动近百套报盘程序的问题,差不多两周前表示自己会抽空给解决掉,一次性启动,直到昨天才差不多能够抽点时间出来开始想怎么解决的问题. 这个问题的复杂点在于除了启动exe外,还需要鼠标点击界面上的登录并输入用户名密码,然后选择通道进行启动,一个程序可能会有多个通道.其次,它是用vc ++写的,但是笔者并没有c++的开发经验,所以即使拿到直接的dll也没有用. 所以,一开始考虑通过windows远程桌面登录,并在登录的时候自动启动程序,于是baidu/bing了下,确实有,类似如下

从零开始写个一个豆瓣电影 (小程序教程1)

微信小程序内测至今也有20天左右,也有很多人作出了很多不错的DEMO并发布到github了.前几日看见了豆瓣电影这个demo,感觉很不错,也跟着做了一个,作为复习巩固文档API用. 废话不多说,直接进入正题: 第一节只写一个首页的展示,数据用的是自己写的虚拟的数据 新建一个demo,不要使用微信自带的DEMO,直接从零开始写起: 首先创建3个文件: app.json app.js apps.wxss app.json  : 主要写配置项:内容如下,具体的每个key值对应的意思,这里就不再细说了,

自己写的一个POC管理小程序

文件下载地址:https://files.cnblogs.com/files/Spec/specpoc.zip 支持对单个地址进行漏洞攻击测试,文件批量攻击测试,调用zoomeye接口测试 zoomeye接口调用参考 :pocsuite3 单个地址本地测试: 题外话:一直想用python写一款自己的漏洞管理工具,奈何水平不高,只能一边参考别人源码,一边学习,故此写出这个及其简陋的工具,也算是自己的一个框架吧,今后会不断的去完善,如果想要一款完善的POC管理工具,建议pocsuite3,花了一些时

Java写的一个计算器模拟小程序

下个周六又要参加自考实践上机考试了,时间过的好快,天冷了人也变懒惰了,有时候什么也不想干,今晚刚好有时间就抽空把JAVA的试题拿出来再复习复习,看书比较困乏索性就敲敲代码吧,说实话我对JAVA不是很熟,如果不是因为考试要考,我也没时间接触它,毕竟做运维的,我更喜欢shell,PYTHON之类的.算了,还是把刚敲的代码放这里保存下,省的以后又找不到了.刚入门也就这样了. 题目: 编写一个计算器模拟程序.界面采用4行3列布局,界面设有3个文字标签(运算数1.运算数2.计算结果).3个文本框和3个加.

结对人项目记事本程序

一.题目简介 所选项目名称:编写一个记事本程序 项目需求描述:现在网络上各种文档编辑器数不胜数,有EmEditor,UEStudio,GridinSoft Notepad,Notepad++,win32pad,SkimEdit,UniRed,xint.功能也是应有尽有,有能改变字体的,有能改变文字颜色的.但是,这些软件又存在各种各样的瑕疵或问题:有的文件体积相对于一般文字编辑来说太大:有的功能太繁杂,使初级使用者一时难以掌握.仅从日常应用方面来说,一个文本编辑器只需一些简单实用的功能就够了.本程

一个简易的日志程序

在程序开发过程中,我们经常要记录各种操作信息以及系统信息到日志中,以便于以后查找相关记录或者在遇到程序出现错误时查找错误的原因.一般日志存储于两种介质中:一.存储入数据库,另一种存储于文本文档中.我们最常用的插件有log4.net等.但是对我们日常的小程序来说,它可能过重,所以我自己在自己的开发中写了一个简单的小程序以适应小程序的需要. 为方便自己以后查找,记录代码如下: 1 using System; 2 using System.Collections.Generic; 3 using Sy

写了一个Windows API Viewer,提供VBA语句的导出功能。提供两万多个API的MSDN链接查询

世面上的API Viewer已经不少了,但给VBA用的几乎没有.我自己写了一个Windows API Viewer,提供VBA语句的导出功能,并可以提供两万多个API的MSDN链接查询. 环境需求:Windows 7.1 SP1及以上操作系统,安装.Net 4.5.2及以上框架. 下载地址:API Viewer v1.1 下载