精华内容
下载资源
问答
  • .NET文档界面排版

    千次阅读 2007-08-09 10:39:00
    文档界面就是所谓的MDI,他是从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,这是因为Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序。...

            多文档界面就是所谓的MDI,他是从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,这是因为Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序。在视窗系统3.1版本中,MDI得到了更大范围的应用。其中系统中的程序管理器和文件管理器都是MDI程序。
    Visual C#是微软公司推出的下一代主流程序开发语言,他也是一种功能十分强大的程序设计语言,正在受到越来越多的编程人员的喜欢。在Visual C#中,提供了为实现MDI程序设计的很多功能。本文就是通过一个具体的例子来详细的介绍在Visual C#中的MDI编程。

    一 程序设计及运行的环境:

    (1)视窗2000服务器版
    (2).Net FrameWork SDK Beta 2版

    二 程序设计的思路、主要步骤和实现方法:

    MDI编程主要就是要在主窗体中能够新建一个MDI窗体,并且能够对主窗体中的所有MDI窗体实现层叠、水平平铺和垂直平铺。虽然这些操作比较基本,但却是程序设计中的要点和重点。本文就按照上述功能的顺序来一一介绍。

    (1)首先要设定主窗体是一个MDI窗体的容器,因为只有如此才能够在此主窗体上面添加MDI窗体,从而实现对MDI编程,具体实现语句如下:
                 this.IsMdiContainer = true ;

    (2)在主窗体上面新建一个MDI窗体。在程序中,新建一个MDI窗体的命令是通过一个菜单的事件来实现的。在处理新建一个MDI窗体事件中,关键是要设定此MDI窗体的父窗体。其实MDI窗体和别的窗体没有什么不同,不同点就在MDI窗体有上一级窗体,即父窗体,而其他窗体是没有的,具体实现语句如下:
    private void New_Click ( object sender , EventArgs e )//这是一个菜单的事件
            
         Form frmTemp = new Form ( ) ;   //新建一个窗体     
         frmTemp.MdiParent = this ;  //定义此窗体的父窗体,从而此窗体成为一个MDI窗体 
          frmTemp.Text = "窗体0" + FormCount.ToString ( ) ; //设定MDI窗体的标题 
          FormCount++ ;
          frmTemp.Show ( ) ; //把此MDI窗体显示出来
    }

    (3)实现对MDI窗体的层叠

    对于在主窗体中实现对MDI窗体的层叠操作,在主程序中,是通过一个方法来实现的,这个方法就是LayoutMdi,他所带的参数是MdiLayout.Cascade,具体实现语句如下:
    private void Cascade_Click ( object sender , EventArgs e )
    // 实现对主窗体中的MDI窗体的层叠操作
    {
         this.LayoutMdi ( MdiLayout.Cascade ) ;
    }


    (4)实现对MDI窗体的水平平铺

    要在主窗体实现MDI窗体水平平铺,也是通过LayoutMdi方法,此时所带的参数是MdiLayout.TileHorizontal,具体实现语句如下:

    private void TileH_Click ( object sender , EventArgs e )
    // 实现对主窗体中的MDI窗体的水平平铺操作
    {
         this.LayoutMdi ( MdiLayout.TileHorizontal ) ;
    }


    (5)实现对MDI窗体的垂直平铺

    要在主窗体实现MDI窗体垂直平铺,也是通过LayoutMdi方法,此时所带的参数是MdiLayout.TileVertical,具体实现语句如下:

    private void TileV_Click ( object sender , EventArgs e )
    // 实现对主窗体中的MDI窗体的垂直平铺操作
    {
           this.LayoutMdi ( MdiLayout.TileVertical ) ;
    }


    (6)在有些MDI程序,当新建一个MDI窗体以后,往往会在某些菜单项的下面生产一个以此MDI窗体的名称为名称的子菜单项。在其他语言中要实现这种功能,可能就要在某些主菜单项下动态的加入子菜单了。但是在Visual C#中实现此种功能,就显得比较简单的,只有在要加入的主菜单项下加入下面一句程序就可以了:
    WindowMenu.MdiList = true ; 本程序中,是在"窗口"主菜单项下面加入MDI窗体的子菜单项的。
     

    展开全文
  • Python中文件输入输出

    2018-08-10 13:56:18
    Windows下读入utf-8格式的...用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会 在文件头前面加上几个不可见的字符(EF BB BF 这里指的是utf-8,unicode编码为feff),就是所谓的BOM(Byte Order Mark)...

    Windows下读入utf-8格式的txt文档是带“BOM”的,BOM是“Byte Order Mark”的缩写,用于标记文件的编码。并不是所有的文本编辑工具都能识别BOM标记.在用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会 在文件头前面加上几个不可见的字符(EF  BB BF 这里指的是utf-8,unicode编码为feff),就是所谓的BOM(Byte Order Mark)。

    1. r模式:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

        注意:当文件不存在时会报错,不会新建文件

    2. rb模式:以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。     

    Windows平台下 :

    如果以“文本”方式打开文件,当读取文件的时候,系统会将所有的"/r/n"转换成"/n";当写入文件的时候,系统会将"/n"转换成"/r/n"写入。
    如果以"二进制"方式打开文件,则读/写都不会进行这样的转换。 
    在Unix/Linux平台下: “文本”与“二进制”模式没有区别。

    也就是说在Windows下,以'/r/n'表示换行,在linux下以/n表示换行,在mac OS下以/r表示换行

    3. r+模式:打开一个文件用于读写。文件指针将会放在文件的开头。

        这种模式不能同时用于读写,例先读后写会报错   

    #!/usr/bin/python
    #coding= utf-8
    
    fd = open("chinese_test.txt","r+")
    s = fd.readline()
    fd.write('你好')
    fd.close()

       报错如下:IOError: [Errno 0] Error

       先写后读会写入乱码

       使用r+模式写入文件会默认从文件开头写入,从前向后依次覆盖,例:   

    #!/usr/bin/python
    #coding= utf-8
    
    fd = open("chinese_test.txt","r+")
    fd.write('你好'+'\n')
    fd.write('世界'+'\n')
    fd.write('你好地球')
    fd.close()
    
    fd = open("chinese_test.txt","r+")
    s = fd.readline()
    s1 = fd.readline()
    s2 = fd.readline()
    print s,
    print s1,
    print s2
    fd.close()
    
    fd = open("chinese_test.txt","r+")
    fd.write('问候'+'\n')
    fd.close()
    
    fd = open("chinese_test.txt","r+")
    s = fd.readline()
    s1 = fd.readline()
    s2 = fd.readline()
    print s,
    print s1,
    print s2
    fd.close()

       运行结果为:    

    你好
    世界
    你好地球
    问候
    世界
    你好地球

        首先向txt中写入三行 “你好” “世界” “你好地球”  然后读出,又重新写入一行“问候”,实际会覆盖txt中的第一行。

        注意这和w模式的不同,w模式下会清掉文件的整个内容

        要想实现同时进行读和写需要使用seek()函数(先读后写和先写后读都能解决问题),如下:    

    #!/usr/bin/python
    #coding= utf-8
    
    fd = open("chinese_test.txt","r+")
    fd.write('你好'+'\n')
    fd.write('世界'+'\n')
    fd.write('你好地球')
    print fd.tell()
    fd.seek(0,0)
    s = fd.readline()
    s1 = fd.readline()
    s2 = fd.readline()
    print s,
    print s1,
    print s2
    fd.close()

      seek()函数实现的功能是移动文件读取指针到指定位置  

      f.seek(p,0)  移动当文件第p个字节处,绝对位置

      f.seek(p,1)  移动到相对于当前位置之后的p个字节

      f.seek(p,2)  移动到相对文章尾之后的p个字节

      tell()函数可以用来显示当前指针的位置

    4. w模式

         打开只写文件,如果文件不存在则创建

    5. w+模式

        打开可读写文件,如果文件不存在则创建,w和w+模式都会把原来的文件内容擦除。如果想要同时读写的话 需要使用seek()函数。

    6. a模式

       写追加,打开文件不会覆盖,不能读,文件不存在创建

    7. a+模式

       写追加,可读写,注意用seek()函数,文件不存在创建

     

    展开全文
  • 一、介绍QQBot 是一个用 python 实现、基于腾讯 SmartQQ 协议简单 QQ 机器人,可运行 Linux 和 Windows 平台下,所有代码均集成一个 [qqbot.py][code] 文件中,代码量仅 400 多行(不包括注释)。...

    一、介绍

    QQBot 是一个用 python 实现的、基于腾讯 SmartQQ 协议的简单 QQ 机器人,可运行在 Linux 和 Windows 平台下,所有代码均集成在一个 [qqbot.py][code] 文件中,代码量仅 400 多行(不包括注释)。程序采用单线程的方式运行,且尽可能的减少了网络和登录错误(特别是所谓的 103 error )发生的概率。

    [code]: https://raw.githubusercontent.com/pandolia/qqbot/master/qqbot.py

    本项目 github 地址: https://github.com/pandolia/qqbot/

    你可以用 QQBot 来实现:

    * 监控、收集 QQ 消息

    * 自动消息推送

    * 聊天机器人

    * 通过 QQ 远程控制电脑、智能家电

    二、安装方法

    在 Python 2.7 下使用,用 pip 安装,安装命令:$ pip install qqbot

    也可以直接下载 [qqbot.py][code] 运行,但需先安装 [requests](https://pypi.python.org/pypi/requests) 库。

    三、使用方法

    ##### 1. 启动 QQBot

    在命令行输入: **qqbot** ,或直接运行 [qqbot.py][code] : **python qqbot.py** 。启动过程中会自动弹出二维码图片(Linux下需安装有 gvfs ,否则需要手动打开图片),需要用手机 QQ 客户端扫码并授权登录。启动成功后,会将本次登录信息保存到本地文件中,下次启动时,可以输入: **qqbot qq号码**,或:**python qqbot.py qq号码** ,先尝试从本地文件中恢复登录信息(不需要手动扫码),只有恢复不成功或登录信息已过期时才会需要手动扫码登录。

    ##### 2. 操作 QQBot

    QQ 机器人启动后,用另外一个 QQ 向本 QQ 发送消息即可操作 QQBot 。目前提供以下命令:

    1) 帮助:

    -help

    2) 列出 好友/群/讨论组:

    -list buddy/group/discuss

    3) 向 好友/群/讨论组 发送消息:

    -send buddy/group/discuss uin message

    其中 uin 是临时 qq 号,利用 -list 命令查看好友等的临时 qq 号。

    4) 停止 QQBot :

    -stop

    四、实现你自己的 QQ 机器人

    实现自己的 QQ 机器人非常简单,只需要继承 [qqbot.py][code] 中提供的 **QQBot** 类并重新实现此类中的消息响应方法 **onPullComplete** 方法。示例代码:from qqbot import QQBot

    class MyQQBot(QQBot):

    def onPollComplete(self, msgType, from_uin, buddy_uin, message):

    if message == '-hello':

    self.send(msgType, from_uin, '你好,我是QQ机器人')

    elif message == '-stop':

    self.stopped = True

    self.send(msgType, from_uin, 'QQ机器人已关闭')

    myqqbot = MyQQBot()

    myqqbot.Login()

    myqqbot.PollForever()

    以上代码运行后,用另外一个 QQ 向本 QQ 发送消息 **“-hello”**,则会自动回复 **“你好,我是 QQ 机器人”**,发送消息 **“-stop”** 则会关闭 QQ 机器人。

    五、 QQBot 类中的主要方法、属性

    #### 1. 构造方法、登录方法、主要属性>>> bot = QQBot()

    >>> bot.Login()

    ...

    构造方法生成一个 QQBot 实例,其实没做任何工作。全部的登录、获取 好友/群/讨论组 列表的工作在 **Login** 方法中完成。Login 方法会检查命令行参数 sys.argv 中是否提供了 qq 号码。若没有提供 qq 号码,则需要手动扫码登录。登录后会将登录信息保存在本地。若提供了 qq 号码,则会先尝试从本地恢复会话信息(不需要手动扫码),只有恢复不成功或登录信息已过期时才会需要手动扫码登录。

    QQBot 登录完成后,可以进行消息收发了,且 好友/群/讨论组 的列表保存在 **buddy, buddyStr, group, groupStr, discuss, discussStr** 属性当中。>>> bot.buddy

    ((1880557506, 'Jack'), (2776164208, 'Mike'), ..., (2536444957, 'Kebi'))

    >>> print bot.buddyStr

    好友列表:

    0, Jack (2348993434)

    1, Mike (348093248)

    ...

    #### 2. 消息收发>>> bot.poll()

    ('buddy', 207353438, 207353438, 'hello')

    >>> bot.poll()

    ('', 0, 0, '')

    >>> bot.send('buddy', 45789321, 'hello')

    向buddy45789321发送消息成功

    **poll** 方法向 QQ 服务器查询消息,如果有未读消息则会立即返回,返回值为一个四元 tuple :

    (msgType, from_uin, buddy_uin, message)

    其中 **msgType** 可以为 **'buddy'** 、 **'group'** 或 **'discuss'**,分别表示这是一个 **好友消息** 、**群消息** 或 **讨论组消息** ; **from_uin** 和 **buddy_uin** 代表消息发送者的 **uin** ,可以通过 uin 向发送者回复消息,如果这是一个好友消息,则 from_uin 和 buddy_uin 相同,均为好友的 uin ,如果是群消息或讨论组消息,则 from_uin 为该群或讨论组的 uin , buddy_uin 为消息发送人的 uin ; **message** 为消息内容,是一个 **utf8** 编码的 string 。

    如果没有未读消息,则 **poll** 方法会一直等待两分钟,若期间没有其他人发消息过来,则返回一个只含空值的四元 tuple :

    ('', 0, 0, '')

    **send** 方法的三个参数为 **msgType** 、 **to_uin** 和 **message** ,分别代表 **消息类型** 、**接收者的 uin** 以及 **消息内容** ,消息内容必须是一个 **utf8** 编码的 string 。

    如果发送消息的频率过快, qq 号码可能会被锁定甚至封号。因此每发送一条消息,会强制 sleep 3 秒钟,每发送 10 条消息,会强制 sleep 30 秒钟。同一条消息重复发送多次也可能被锁号或封号,因此每条消息发送之前都会在开头附加一个随机数字。

    这里需要注意的是,当 poll 方法因等待消息而阻塞时,不要试图在另一个线程中调用 send 方法发送消息,也不要试图用多线程的方式同时调用 send 方法,否则可能引起一些无法预料的错误。

    #### 3. 无限消息轮询>>> bot.PullForever()

    **PullForever** 方法会不停的调用 poll 方法,并将 poll 方法的返回值传递给 **onPullComplete** 方法,直到 stopped 属性变为 True 。如下:def PollForever(self):

    self.stopped = False

    while not self.stopped:

    pullResult = self.poll()

    self.onPollComplete(*pullResult)

    onPollComplete 方法是 QQ 机器人的灵魂。你可以自由发挥,重写此方法,实现更智能的机器人。

    六、参考资料

    QQBot 参考了以下开源项目:

    - [ScienJus/qqbot](https://github.com/ScienJus/qqbothttps://github.com/pandolia/qqbot/) (ruby)

    - [floatinghotpot/qqbot](https://github.com/floatinghotpot/qqbot) (node.js)

    在此感谢以上两位作者的无私分享,特别是感谢 ScienJus 对 SmartQQ 协议所做出的深入细致的分析。

    ### 七、反馈

    有任何问题或建议可以发邮件给我,邮箱: 。

    展开全文
  • 对非结构化数据搜索最常见方式是顺序扫描法,即对整个文档从头到尾逐字匹配检索,例如Windows的文件搜索或者Linuxgrep命令。这种方式适用于数据量较小的文件,当文件量过大时搜索将变得异常缓慢。另一种搜索...

    1、ElasticSearch

    概念特点

    全文搜索是对非结构化数据的一种搜索方式,所谓非结构化数据是指相对于结构化数据(如数据库)来说长度不固定或无固定格式的数据,例如文档、邮件等。

    对非结构化数据的搜索最常见的方式是顺序扫描法,即对整个文档从头到尾逐字匹配检索,例如Windows的文件搜索或者Linux的grep命令。这种方式适用于数据量较小的文件,当文件量过大时搜索将变得异常缓慢。另一种搜索方式全文搜索对非结构化数据按照一定的索引进行重新组织,从而达到按照索引对数据进行快速搜索的目的。

    常用的全文搜索框架是基于Lucene引擎的ElasticSearch(ES)和Solr,相比于支持多种数据格式的Solr,ES只支持JSON数据,但ES的实时搜索效率较高。它的相关概念和特点如下:

    • 分布式:节点Node是指单个保存数据和索引的服务器,每个节点在启动的时候会分配一个唯一标识符,也可以自定义名称。多个保存数据的节点就构成了集群,节点可以根据名称加入集群。
    • ES中索引Index是相似文档的集合。文档Document是索引的基本单位,ES以json格式保存每个文档。当数据过大超过单个节点的存储空间时,ES会将数据划分为多个分片并保存到不同的节点,并且对分片进行管理。为了提高可用性,还会对分片创建副本,当某几个主机出现问题时,由于副本的存在,系统仍然可用。并且由于分片可副本的存在,可以将搜索负荷分摊到不同的分配或副本,提高了系统的读写吞吐量。
    • 近实时:在索引创建之后ES不会立马写入磁盘,而是储存在缓存中,然后根据刷新策略(默认为1秒)定时将索引写入磁盘,因此搜索会存在1s左右的延迟。这是es对写入和查询一个平衡,这样设置既提升了es的索引写入效率同时也使得es能够近实时检索数据。
    • 多API:ES除了Java原生接口外,还支持RESTful类型的API
    • 面向文档:使用关系型数据库中的表时需要构建对应的实体类,而ES可以直接创建文档并进行存储
    • ES也有很多的短处,最明显的就是字段类型无法修改、写入性能较低和高硬件资源消耗

    倒排索引 inverted index

    如下所示为ElasticSearch实现搜索的方式–inverted index。对于正向索引forward index,我们是在文章中逐个查找关键字;而倒排索引则是利用关键词将文章串起来。例如我们在扫描第1篇文章时拆分为单个词组,其中有关键词Ada,则为Ada添加索引1,然后在扫描第2篇文章时也发现有Ada,同样将其添加到索引中。这样当我们检索Ada关键字时就可以很快地找到对应的文章。
    在这里插入图片描述

    2、SpringBoot中使用

    2.1、部署环境&依赖

    ElasticSearch官网下载所需版本的压缩包后在本地解压,对于Windows,在解压后的bin目录下找到elasticsearch.bat点击运行,ElasticSearch会在默认的9200端口启动。

    在Spring boot中使用ElasticSearch需要引入spring-boot-starter-data-elasticsearchjna两个依赖项

    dependencies {
    	implementation('org.springframework.boot:spring-boot-starter-data-elasticsearch')
    	implementation('net.java.dev.jna:jna:5.6.0')
    	......
    }
    

    在spring boot的application.properties中配置ElasticSearch如下

    # ElasticSearch服务器地址
    spring.data.elasticsearch.client.reactive.endpoints=localhost:9200
    # 连接超时时间
    spring.data.elasticsearch.client.reactive.connection-timeout=120
    

    2.2、对应Java类

    首先创建Article类用于表示存储的单个文档(Document)对象,通过注解@Document表示这是一个文档类。该类需要实现Serializable接口以及满足POJO要求(需要包含空构造函数与字段的getter、setter方法),此外增加一个toString方法用于将其打印字符串。我们可以对Article类的title、summary、content的三个字段进行索引,从而实现快速查找。

    package com.tory.blog.entity;
    
    import org.springframework.data.elasticsearch.annotations.Document;
    
    import javax.persistence.Id;
    import java.io.Serializable;
    
    @Document(indexName = "article")
    public class Article implements Serializable {
        @Id
        private String id;
        private String title;
        private String summary;
        private String content;
    
        public Article() {
        }
    
        public Article(String id, String title, String summary, String content) {
            this.id = id;
            this.title = title;
            this.summary = summary;
            this.content = content;
        }
    
    	//getter & setter...
    
        @Override
        public String toString() {
            return "Article{" +
                    "id='" + id + '\'' +
                    ", title='" + title + '\'' +
                    ", summary='" + summary + '\'' +
                    ", content='" + content + '\'' +
                    '}';
        }
    }
    

    接着定义ArticleRepository接口用于操作ElasticSearch,该接口继承自ElasticsearchRepository。和SpringDataJPA一样,我们只需要在接口中按照规则写好方法名而不必手动去实现,例如这里声明了根据文章标题对文档进行检索findDistinctArticleByTitleContaining()

    package com.tory.blog.repository;
    
    import com.tory.blog.entity.Article;
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.Pageable;
    import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
    
    public interface ArticleRepository extends ElasticsearchRepository<Article, String> {
        /**
         * 根据Title、Summary、Content分页查询Article
         *
         * @param title
         * @return Page<Article>
         */
        Page<Article> findDistinctArticleByTitleContaining(String title, Pageable pageable);
    }
    

    2.3、进行搜索

    首先通过articleRepository.save()存入三个文档对象

    @Autowired
        private ArticleRepository articleRepository;
    
        @BeforeEach
        void setUp() {
            articleRepository.deleteAll();
            articleRepository.save(new Article("1", "静夜思", "李白的诗", "床前明月光,疑是地上霜。"));
            articleRepository.save(new Article("2", "青花瓷", "周杰伦的歌", "素胚勾勒出青花笔锋浓转淡。"));
            articleRepository.save(new Article("3", "青玉案", "辛弃疾的词", "东风夜放花千树,更吹落星如雨。"));
        }
    

    之后在Controller中定义searchArticle()方法,通过调用findDistinctArticleByTitleContaining()根据title对文档进行搜索,注意该方法返回的是分页之后的查询结果,除了title之外还需要pageable对象作为参数,通过PageRequest.of()创建。

    @RequestMapping("article")
    @RestController
    public class ArticleController {
        @Autowired
        private ArticleRepository articleRepository;
    
        @GetMapping("search")
        public List<Article> searchArticle(@RequestParam("title") String title){
            Pageable pageable= PageRequest.of(0,20);	//选择第0页,每页20条结果。
            Page<Article> blogPage= articleRepository.findDistinctArticleByTitleContaining(title,pageable);
            return blogPage.getContent();
        }
    }
    

    接着启动项目,访问http://localhost:8080/blog/article/search?title=青,对title含有“青”字的文章进行搜索,返回json结果如下:
    在这里插入图片描述

    展开全文
  • Windows 10 免费升级已经接近尾声了, 一周年更新即将到来之际, 特此编辑入门文档帮助广大用户熟悉操作 Windows 10, 从用户视角阐述 Windows 10 功能和使用, 大部分操作附有截图以减少文字枯燥描述, 解答...
  • CAD快捷键文档

    2011-12-17 19:02:10
    所谓的快捷命令,是AutoCAD为了提高绘图速度定义的快捷方式,它用一个或几个简单的字母来代替常用的命令,使我们不用去记忆众多的长长的命令,也不必为了执行一个命令,菜单和工具栏上寻寻匿匿。所有定义的快捷...
  • . 代表当前目录 .. 代表上一层目录,当前目录的父...如Windows中的“我的文档”目录,就是Windows为我们设计的宿主目录。 Linux中每个用户都有自己的宿主目录,这个目录对于普通用户来说,/home/username/,而对于
  • 文档界面就是所谓的MDI,他是从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,这是因为Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序。...
  • 凭借着技术方面优势,他们对主要章节做了技术评述,对英文原版书中的错误做了订正,对本书配套光盘中的所有程序都在Windows 7企业版上使用Visual Studio 2008调试通过。  我为这本《Windows程序设计》经典大作能...
  • C# 中的MDI编程

    2010-11-19 09:20:00
    文档界面就是所谓的MDI,他是从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,这是因为Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序。...
  • 文档界面就是所谓的MDI,他是从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,这是因为Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序。...
  • Visual C#中的MDI编程

    2009-01-09 08:42:00
    文档界面就是所谓的MDI,他是从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,这是因为Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序。...
  • C#中的MDI编程

    千次阅读 2006-07-07 11:33:00
    文档界面就是所谓的MDI,他是从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,这是因为Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序。...
  • 文档界面就是所谓的MDI,他是从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,这是因为Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序。...
  • mssql 微软 只能能运行在windows平台,体积比较庞大,占用许多系统资源, 但使用很方便,支持命令和图形化管理,收费。 中型企业 Mysql 甲骨文 是个开源数据库server,可运行在多种平台, 特点是响应速度特别快,...
  • 文档界面就是所谓的MDI,他是从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,这是因为Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序。...
  • Visual C#的MDI编程实例讲解http://www.sina.com.cn 2001/11/22 14:45 赛迪网 文/王天 多文档界面就是所谓的MDI,他是从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,这是因为Excel电子表格用户...
  • linux宿主目录、Vi和Vim关系

    千次阅读 2015-12-21 22:47:57
    windows中的“我的文档”,就是windows为我们设计的宿主目录。  linux中每个用户都有自己的宿主目录,这个目录对于普通用户来说,home/username,而对于root用户来说,/root。所以当用户为root时,~与/root...
  • 事实上每一个HTML文档都是一种静态网页文件,这个文件里面包含了HTML指令代码,严格来说这些指令代码并不是一种程序语言,它只是一种排版网页资料显示位置标记结构语言,易学易懂,非常简单。HTML普遍应用...
  • 大多数的所谓的个人知识管理软件,实际上还停留第一阶段, 而针式PKM,则更注重文档的归类、统计分析、辅助学习等, 避免浪费了很多时间收集的资料,实际上只是活硬盘空间的垃圾。 并且多数的其它软件以...
  • * 修正了“在文件中替换”不能正确分析子目录问题 * 脚本现在遵从文件只读设置 * 修正了宏命令 UnixReOff 被截断问题 v14.20.1 - FTP * 如果目录路径过长会导致 FTP 对话框问题 * Windows 2000 下,FTP ...
  • 一直在找这本Ivor Horton(霍顿)写《Visual C++2008入门经典》中文版书,据说非常经典。...第23章 在Windows Forms 应用程序访问数据源 附录A C++关键字 附录B ASCII码 附录C Windows消息类型
  • NoSQL云数据库mongoDBC#示例(vs2005)

    热门讨论 2010-10-22 08:33:43
     存储集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized dOcument Format)。  MongoDB服务端可运行...
  • 这儿所谓的“接口”是对对象物理“接口”一种纯粹的抽象。一旦理解了多形性的概念,接口的含义就很容易解释了。本章也向大家介绍了Java 1.1的“内部类”。 (8) 第8章:对象的容纳 对一个非常简单的程序来说,它可能...
  • 比如在Windows系统的“我的文档”,“视频”,“图片”等目录位置。 对于一个大型项目,系统的标准目录是保存数据,配置信息的一个非常有用的地方。例如,一个应用程序需要将下载好的文档保存在本地文件系统的...
  • 一个牛人提供GIS源码(很好)

    千次下载 热门讨论 2010-08-25 22:49:21
    同时还赠送了一个基于SF6MAPX打包文件以及整个校园地图文件,提供了开放环境需要插件支持文件(System目录下),同时由于文件大小原因,删除了许多Img目录下图片并且数据库删除了部分Img记录(不然会出错...
  • 具体而言,PGP是通过公钥环中下述3个字段来实现Web of Trust信任模型:(1)密钥合法性字段(key legitimacy field):指示用户公钥合法性可信等级。信任级别越高,则用户标识UserID与密钥间绑定关系...
  • 装载(load)

    2015-02-04 17:22:18
    这篇文档的作用,就是阐明Linux和Windows究竟是如何将一个程序装载到内存中的。  Linux下,可执行文件的保存格式是ELF(Executable Linkable Format),而Windows可执行文件为PE(Portable Executable)。EL
  • Linux下oSIP编译使用应该是很简单,其Install说明文档里也介绍比较清楚,本文主要就oSIP在Windows平台下VC6.0开发环境下使用作出描述。 虽然oSIP开发人员也说明了...

空空如也

空空如也

1 2 3 4 5
收藏数 87
精华内容 34
关键字:

在windows中所谓的文档文件