自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(0)
  • 资源 (32)
  • 收藏
  • 关注

空空如也

使用windows平台IWebBrowser2接口动态创建Web浏览器

使用windows平台IWebBrowser2接口动态创建Web浏览器 wtl平台(使用MFC类似),使用IWebBrowser2创建IE控件,然后浏览网页,当然也可以显示内存中的html字符流。 支持更改右键,支持禁用滚动条,支持word-break,功能强大,可扩展性强。方便自己修改后放入自己的代码中。js代码可回调c++代码。

2012-05-23

同一台unix机器进程间同时传递多个fd

1.在继承自bsd的系统可以同时发送多个,其它平台不能。 2.在我的机器上(x86_64bit,linux2.6.37.6)测试成功,功能函数封装在TransFD.c中. 3.测试过程, 进程A连续向进程B发起tcp连接,进程B接收到A的连接,进程B把A与B的多个连接fd同时发给 进程C,进程C然后一次接收出这些fd并根据数量依次接收每个fd的内容。 --JEF --20110709

2011-08-23

linux平台加密程序ende

写了个linux平台加密程序ende 共两个程序 (一) 用tar打包压缩一个文件夹后用openssl的AES256加密 #!/bin/bash # Use openssl to encrypt one folder. # # Usage: # en infolder # Result: # infolder.tar.gz.aes256cbc # # Note: # 1) tar zcvf => openssl # 2) Don't use space in folder[or path]! # # Version: # v0.1[20110721] # Author: # JEF [dungeonsnd@126.com] # (二) 用openssl的AES256-cbc解密一个文件成一个tar.gz包,然后解包成一个文件夹 #!/bin/bash # Use openssl to decrypt one folder. # Usage: # en InFolder.tar.gz.aes256cbc # Note: # 1) Don't use space in InFolder! # 2) openssl => tar zxvf # # # Version: # v0.1[20110721] # Author: # JEF [dungeonsnd@126.com] # ============================================================== (三) 使用试例 view plain dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t> ll total 4 drwxr-xr-x 2 dnd users 4096 Jul 22 11:46 myfolder dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t> cd myfolder/ dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t/myfolder> ll total 8 -rw-r--r-- 1 dnd users 4 Jul 22 11:46 infile2.txt -rw-r--r-- 1 dnd users 21 Jul 22 11:46 infile.txt dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t/myfolder> cat infile.txt abc你好?? !!好啊 dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t/myfolder> cat infile2.txt aaa dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t/myfolder> cd .. dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t> ll total 4 drwxr-xr-x 2 dnd users 4096 Jul 22 11:46 myfolder dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t> en myfolder/ =========================================== [Now,tar will compress myfolder to myfolder.tar.gz,please wait......] myfolder/ myfolder/infile.txt myfolder/infile2.txt =========================================== [Now,openssl will encrypt myfolder.tar.gz to myfolder.tar.gz.aes256cbc,please wait......] enter aes-256-cbc encryption password: Verifying - enter aes-256-cbc encryption password: =========================================== [Now,script finished successfully!] dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t> dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t> ll total 8 drwxr-xr-x 2 dnd users 4096 Jul 22 11:46 myfolder -rw-r--r-- 1 dnd users 325 Jul 22 13:14 myfolder.tar.gz.aes256cbc dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t> mv myfolder myfolder.bk dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t> ll total 8 drwxr-xr-x 2 dnd users 4096 Jul 22 11:46 myfolder.bk -rw-r--r-- 1 dnd users 325 Jul 22 13:14 myfolder.tar.gz.aes256cbc dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t> de myfolder.tar.gz.aes256cbc =========================================== [Now,openssl will decrypt myfolder.tar.gz.aes256cbc to myfolder.tar.gz,please wait......] enter aes-256-cbc decryption password: =========================================== [Now,tar will extract myfolder.tar.gz to myfolder.,please wait......] myfolder/ myfolder/infile.txt myfolder/infile2.txt =========================================== [Now,script finished successfully!] dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t> ll total 12 drwxr-xr-x 2 dnd users 4096 Jul 22 11:46 myfolder drwxr-xr-x 2 dnd users 4096 Jul 22 11:46 myfolder.bk -rw-r--r-- 1 dnd users 325 Jul 22 13:14 myfolder.tar.gz.aes256cbc dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t> cd myfolder dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t/myfolder> ll total 8 -rw-r--r-- 1 dnd users 4 Jul 22 11:46 infile2.txt -rw-r--r-- 1 dnd users 21 Jul 22 11:46 infile.txt dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t/myfolder> cat infile.txt abc你好?? !!好啊 dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t/myfolder> cat infile2.txt aaa dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t/myfolder> dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t/myfolder> ll /usr/bin/en -rwxr-xr-x 1 root root 827 Jul 22 13:00 /usr/bin/en dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t/myfolder> ll /usr/bin/de -rwxr-xr-x 1 root root 715 Jul 22 13:00 /usr/bin/de dnd@linux-ibzb:~/doc/fromdisk/Tech/MySrc/t/myfolder> 可以看到,加密一个文件夹使用如下命令: en foldername 而解决刚才的文件夹使用如下命令 de filename 另外,如果想使用另外的加密算法要改这两个脚本。目前是使用openssl库的,AES256-cbc. 所以你的linux机器上一定要安装成功openssl(直接在终端敲入"openssl",如果成功进入openssl程序则说明安装好了openssl了,那么这两个脚本可以直接用,否则要先到openssl官网下载并安装之). 详细用法见作者博客。

2011-07-22

python发送邮件的脚本 v0.3

---------------------------------------------------------------------- python发送邮件的脚本 作者: jeffery ( email:dungeonsnd@126.com, msn:dungeonsnd@hotmail.com, csdn blog:http://blog.csdn.net/dungeonsnd) 时间: 2011-07-10 地点: GZ ---------------------------------------------------------------------- linux不乏发送邮件的程序,但是太复杂了,我也不想研究。本着"自立更生艰苦奋斗"的精神所以自己在火车上花了半天时间用python写了个发送邮件的脚本。 发现任何问题欢迎大家给我发邮件。可以从我的资源里下载。 程序功能: 发送邮件附件,可以一次发送一个目录(如果包含子目录,那么不会发送该子目录)或一个单独文件。 版本: v0.3 作者:jef 时间:20110710 版本历史: v0.1 第一版本 v0.2 修改了密码输入 v0.3 1. 把-d选项去掉,让用户直接输入sm directory|file,省了"-d "这几个字母,如果没有输入这个参数,那么会去配置文件中寻找 diretory项。 2. 增加输出 发送起止时间和总共用时。 作者邮箱:dungeonsnd@126.com 说明: 1. 代码可以从作者的CSDN资源里下载到(http://download.csdn.net/user/dungeonsnd) 2 . 程序有时会提示'Offline now! Please check the internet connection first!'说明没有联网,但你实际上可以打开网页。 其实是由于你的DNS的原因,如果你用curl www.sina.com也会提示无法联网,如果出现这种情况,请尝试把main函数中的internet_on()调用给注释掉再运行。 -------------------------------------------------------------------------------------

2011-07-10

python发送邮件的脚本

---------------------------------------------------------------------- 半天时间写了个python发送邮件的脚本 作者: jeffery ( email:dungeonsnd@126.com, msn:dungeonsnd@hotmail.com, csdn blog:http://blog.csdn.net/dungeonsnd) 时间: 2011-06-19 地点: SH ---------------------------------------------------------------------- linux不乏发送邮件的程序,但是太复杂了,我也不想研究。本着"自立更生艰苦奋斗"的精神所以自己在火车上花了半天时间用python写了个发送邮件的脚本。 这是第一版,可能有bug,待以后改进,发现任何问题欢迎大家给我发邮件。可以从我的资源里下载。 程序功能: 发送邮件附件,可以一次发送一个目录或一个单独文件。 版本: v0.1 作者:jef 时间:20110619 作者邮箱:dungeonsnd@126.com 运行环境: 在opensuse11上运行通过。理论上可运行在任何一台linux上,但是安装python脚本解释器开发包。

2011-06-19

Linux及Windows平台下P2P模式IM软件的网络模型设计

一种Linux及Windows平台下P2P模式IM软件的网络模型设计. 如果有兴趣,请与作者联系。 另外,请见我的csdn博客。 http://hi.csdn.net/space-2612026-do-album-picid-818463.html

2011-05-23

P2P通信加密方案设计

一种基于P2P通信加密方案的设计. 如果有兴趣,请与作者联系。

2011-04-13

基于P2P的IM软件设计

一种基于P2P的IM软件架构设计参考文档。 有兴趣请与作者联系。

2011-04-13

MultiTheads

/****************************************************** MultiTheads项目说明 ******************************************************/ /** 项目名称: MultiTheads 版本号: v1.0.0 第一作者: Jef 地址: 中国/江苏 日期: 20110114 电子邮箱: dungeonsnd@126.com 版权: 1.您可以修改及免费使用本程序。 2.修改之后附上您的个人信息发送到上面的作者邮箱,作者负责在全面测试后发布您修改后的新版本。 3.您使用本程序而导致任何伤害以及经济损失,由过错方依法承担所有责任,一概与第一作者及合作单位无关。 4.如果您使用本程序则表示您已经同意此版本协议!否则请勿使用! 项目功能: MultiTheads_v1.0.0演示最简单的多线程处理事务事例。说明了GUI多线程程序设计的基本原则,即主线程(也称为用户线程)负责显示和接收用户输入的GUI界面, 而新建立线程(工作者线程)负责处理不同的耗时事务. 版本历史: v1.0.0 20110114 第一版本 运行步骤: 请用visual studio 2010或更高版本打开. 在WINDOWS XP SP2+VS2010上编译运行通过. 提示: 程序运行之后共包括11个线程.1个主线程(用户线程),负责显示和接收用户输入的GUI界面. 0~9共10个新建立线程(工作者线程)负责处理不同的事务. 每个工作者线程处理完自己的事务后退出. 程序运行之后虽然进行大量的事务处理(程序中用Sleep放弃当前线程的CPU时间片来模拟较长时间的数据计算和I/O读写等操作), 但是用户界面不会失去响应. 因为用户线程不会做长时间的处理,本程序用户线程唯一的任务是响应用户输入(移动窗口及单击按钮)和 向用户输出(当前的每个线程处理情况). **/

2011-01-14

vs2010写的一个简单的FTP客户端

版本:v1.0.0 时间: 20101106 开发环境: Windows sp3+Visual studio 2010。测试时使用了vmWare Workstation及FileZilla_Server-0_9_37。 更新日志: v1.0.0 20101106 创建第一版本 说明及使用: FtpC是用vs2010写的一个简单的FTP客户端,说明CFtpConnection的基本用法,大家可参照它写出长期自动获取远程FTP服务器上数据的应用。如果你用vc6.0,只要把这个工程中的原理性代码复制过去就行了。 测试时FTP服务器我用的是FileZilla_Server-0.9.37,这是国外一款非常不错的开源免费跨平台的FTP服务器(你也可以去官网下载它的客户端)。你也可以使用其它的FTP服务器软件测试。 欢迎登录我的CSDN资源下载更多实用小程序,请在google里搜索"csdn dungeonsnd"。

2010-11-06

MdiPlus MDI 框架 v1.0.3

压缩包中 MdiPlus_WS_POPUP 是正确的示例; Failure Samples中是错误示例,演示了其它方法来创建此类多窗口程序失败例子。 综合比较使用MdiPlus_WS_POPUP中是一种比较好的手段。 ============================== /************************************************************************/ /* MdiPlus框架说明 */ /************************************************************************/ /** 项目名称: MdiPlus框架 版本号: v1.0.3 第一作者: Jef 地址: 中国/江苏 日期: 20100825 电子邮箱: dungeonsnd@126.com 版权: 1.本框架完全开源。您可以免费使用本程序,但在用于商业用途前请获得第一作者的许可。 2.您使用本程序而导致任何伤害以及经济损失,由过错方依法承担所有责任, 一概与第一作者及合作单位无关。 3.如果您使用本程序则表示您已经同意此版本协议!否则请勿使用! 项目功能: MdiPlus框架是在Windows平台下把SDI程序行为与MDI程序行为结合在一起的编程手段。 框架最适合: a.以GDI方式输出为主的应用程序。 b.需要多种文档模板输出的MDI程序。 c.需要一个类似于SDI应用程序的固定(禁止改变大小)的View进行绘图。 版本历史: v1.0.1 20100616 第一版本 v1.0.2 v1.0.3 20100825 整理了不同方案,选择一种比较好的方案。 其它: 框架有点类似于多个文档模板的MDI应用程序,但是普通的MDI程序在新建一个文档前无法绘图,除非 子类化CMainFrame或截获CMDIClient的消息。这些方式不便进行模块化开发。MdiPlus框架主要优点是在 新建一个文档前就有一个View进行绘图,并且不同功能进行模块化,各模块放到Dll中(如果必要,你也 可以直接写成静态库链接到最终的执行程序里),适合一个项目多人同时进行开发。 **/

2010-08-25

CESock类 多线程实现简单易用的套接字

/** 名称: CESock类 功能: 多线程方式实现简单易用的套接字,使用TCP协议 阻塞方式. 最大发送数据字节数不宜超过1KB. 同时实现了客户端及服务器端功能,可接收及发送数据. 版本: v1.0.0 第一版本发布时间: 20100823 第一作者: Jef 第一作者电子邮箱: dungeonsnd@126.com 版权: 您可以免费修改及使用,但把本程序(及修改后)用于商业用途前请得到第一作者的许可。 版本修改记录: v1.0.0 20100823 第一版本 新建类,多线程阻塞套接字.在Windows XP下用VC++6.0编译运行正确. 未在Unicode下测试. 使用: 1. 调用这个类通常不用修改头文件中的宏,注意每次发送数据字节数不要超过1024. 2. 在接收数据的处实现消息WM_RECVDATA的响应函数. 在MFC中的头文件添加如下代码, afx_msg void OnRecvData(WPARAM wParam,LPARAM lParam); 在MFC中的实现文件添加如下代码, ON_MESSAGE(WM_RECVDATA,OnRecvData) void CCommunicationView::OnRecvData(WPARAM wParam,LPARAM lParam) { CString str=(char*)lParam; //接收到的消息. CString strFrom=(char*)wParam; //发送消息的IP地址. ...... } 3. 调试时保留 #define SHOW_ERROR_MSGBOX,如果运行时出错将弹出对话框. 注释掉此行时如果出错将不做处理. 建议发布软件时(即Release版)注释此行代码. 4. 建议不要在函数内部定义CESock类型变量. 5. 建议此模块作为底层通信,上层应实现传输协议,如大文件分段传输、发送及反馈消息。 **/

2010-08-24

MFC解决窗口保存及重绘闪烁问题的一种比较好的方案 v1.0.5

包含文件说明: 1. SolveFlashingAndRedrawv1.0.5 纯净版 无闪烁的MFC应用框架,实际使用时把此工程改名成你要建立的项目名称,然后开始开发即可。你熟悉MFC的话研究这个框架的半个小时应该就明白并熟练运用了。 2.SolveFlashingAndRedrawv1.0.5 demo版 利用SolveFlashingAndRedrawv1.0.4框架写的一个示例小程序,主要展示框架要实现的优点特性。 3.VCRn 修改vc工程名工具 ___作者 田彬.exe 用网上找到的一个MFC改工程名称的小工具,很实用。如果你想使用本框架就可以用它来改成你想要的工程名了。 4. 未使用本框架的类似功能简化程序 没有使用框架的程序,实现的功能和Demo类似。但是运行之后改变窗口大小等,会发现图形闪烁很厉害! 5. SolveFlashingAndRedrawv1.0.5 demo版 运行截图.jpg 6. ReadMe.txt 说明文件。 补充说明: 工程使用vc6.0开发,如果你用vc6.0双击.dsw文件无法打开,请先打开vc6.0然后把.dsw拖动到vc上面。 如果这种方法还是无法打开,你新建一个vc6.0 mfc sdi程序,把示例中框架拷贝到这个新工程中,运行即可,代码量不是太多。 框架说明: /****************************************************** SolveFlashingAndRedraw框架说明 ******************************************************/ /** 项目名称: demo框架 版本号: v1.0.5 第一作者: Jef 地址: 中国/江苏 日期: 20100724 电子邮箱: dungeonsnd@126.com 版权: 1.您可以修改及免费使用本程序。 2.修改之后附上您的个人信息发送到上面的作者邮箱,作者负责在全面测试后发布您修改后的新版本。 3.您使用本程序而导致任何伤害以及经济损失,由过错方依法承担所有责任,一概与第一作者及合作单位无关。 4.如果您使用本程序则表示您已经同意此版本协议!否则请勿使用! 项目功能: SolveFlashingAndRedraw框架是MFC解决窗口保存及重绘闪烁问题的一种比较好的方案(Win32解决方法类似)。 版本历史: v1.0.1 20091126 第一版本 v1.0.2 20091212 第二版本 1. 修改了部分变量的名字使其更符合其意义 2. 增加为两个工程,一是带demo例子的,另一是不带demo的纯净版. 3. 修改了其中一个错误. 如 CreateCompatibleDC之后没有调用DeleteDC等. v1.0.3 对v1.0.2进行了整理 v1.0.4 20100416 在v1.0.3的基础上进行整理,并增加了裁剪区,提高了绘图效率! v1.0.5 20100724 1. 添加了一个工具类CMemBmpDc,帮助产生一个内存DC,并把指定的内存位图选进去。方便绘图。 2. 演示了在适当时机如何高效画图,见Demo版的DrawSinwave(bool bDrawOnScreen)函数。 演示了用两种方法来绘图, 方法1. 直接绘图到屏幕上, 同时绘图到内存位图上,内存位图不会立即贴到屏幕上减少了内存拷贝的时间,提高了效率, 将来窗口失效时OnPait贴图到屏幕上. 这种方法的优点时减小了不必要的内存拷贝,缺点时当绘图内存复杂并且非常耗时可能会导致闪烁。 故适用于像本Demo的这样绘图(本例函数只绘制一小段直线)。 方法2. 绘制到内存位图上后把应该重绘的这一小块设成裁剪区,然后立即OnPait重绘这个裁剪区。 运行步骤: 直接运行demo里面的程序,在窗口上任意拖拉鼠标画线,然后点击菜单栏的几个示范菜单项,然后移动窗口、 改变窗口大小、最大最小化窗口、用其它窗口覆盖此窗口、鼠标放到任务栏。。。 以上种种操作观察窗口内的图像变化。可以发现窗口内图像几乎看不到闪烁,而且窗口的元素已经保存下来重绘时任然可以看到图像。 如何使用: 进行项目开发时,可以先建立项目,然后把本解决方案框架拷贝到新建项目中即可。 也可以自己根据需要修改纯净版。 其它: 友情提示,小心 View类头文件及View类的实现文件中有说明,使用时别把它弄到你实际项目里哦! 进行大量复杂的图形的输出,而且对效率要求特别高时要考虑适当修改此框架(如增加裁剪区)后再使用哦。 关于如何在此框架的基础上提高绘图效率可以参阅下面的文章 如何提高绘图的效率 文章摘录 http://hi.baidu.com/new8sun/blog/item/68ccba8a80c3aadafc1f1079.html MFC双缓冲解决图象闪烁 2009-06-13 23:03 显示图形如何避免闪烁,如何提高显示效率是问得比较多的问题。而且多数人认为MFC的绘图函数效率很低,总是想寻求其它的解决方案。 MFC的绘图效率的确不高但也不差,而且它的绘图函数使用非常简单,只要使用方法得当,再加上一些技巧,用MFC可以得到效率很高的绘图程序。

2010-07-24

Window Gdi Edit c++ class

/** name: Window Gdi Edit c++ class. time:20100524 author:jef email:dungeonsnd@126.com version: v1.0.1 20100524 第一版本. v1.0.2 20100711 更新了超出给定区域时自动调整区域的方向. EXCEED_AUTO_H 表示区域向左右各扩大一定范围使得区域能容纳下字符。 EXCEED_AUTO_HL 表示区域仅向左扩大一定范围使得区域能容纳下字符。 EXCEED_AUTO_HR 表示区域仅向右扩大一定范围使得区域能容纳下字符。 EXCEED_AUTO_V,EXCEED_AUTO_VT,EXCEED_AUTO_VB 类似。 如果您在设置EXCEED_AUTO时想让程序自动向右下方扩大区域,则应传入: CGEidt ge(ALIGN_LEFT,STYLE_3DBUTTON,EXCEED_AUTO,EXCEED_AUTO_HR,EXCEED_AUTO_VB); description: 用gdi方式画Eidt控件. 支持的功能: 可以显示编辑框风格`按钮风格或框架风格. 可以设置居左`居中或居右显示. 可以设置字符串超出给定的控件区域时显示方式,如自动调整控件区域`保留左(右)侧的字符或超出区域继续显示字符串. 不支持的功能: 没有单击响应功能.没有重绘保存功能(需要用户自己重绘此控件).没有响应键盘输入功能(只读控件). example: void CTView::OnDraw(CDC* pDC) { CTDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CRect rtClient; GetClientRect(&rtClient); pDC->FillSolidRect(rtClient,RGB(220,220,220)); double dx,dy; dx =rtClient.Width()/800.0; dy =rtClient.Height()/600.0; CRect rtDisp; rtDisp.SetRect(int(300*dx),int(100*dy),int(480*dx),int(140*dy)); CFont font; font.CreatePointFont(rtDisp.Height()*5,"宋体",pDC); CString cs="频谱显示 abcf 123.4"; CGEidt ge; ge.Disp(this,cs,rtDisp,&font); font.DeleteObject(); } **/

2010-07-11

MdiPlus MDI 框架

注意,这是未完成版本!!! 由于作者工作原因,暂时没有时间完成,但是基本功能已经实现,有个小问题如果你解决了欢迎发送给我,谢谢! 请用VS2010打开。内含四个DLL工程,及一个DLL 的测试工程。 其中一个问题是,打开子窗口之后子窗口内容没有显示,单击子窗口客户区之后其内容才显示,目前作者没有解决。 /************************************************************************/ /* MdiPlus框架说明 */ /************************************************************************/ /** 项目名称: MdiPlus框架 版本号: v1.0.1 第一作者: Jef 地址: 中国/江苏 日期: 20100616 电子邮箱: dungeonsnd@126.com 版权: 1.本框架完全开源。您可以免费使用本程序,但在用于商业用途前请获得第一作者的许可。 2.您使用本程序而导致任何伤害以及经济损失,由过错方依法承担所有责任, 一概与第一作者及合作单位无关。 3.如果您使用本程序则表示您已经同意此版本协议!否则请勿使用! 项目功能: MdiPlus框架是在Windows平台下把SDI程序行为与MDI程序行为结合在一起的编程手段。 框架最适合: a.以GDI方式输出为主的应用程序。 b.需要多种文档模板输出的MDI程序。 c.需要一个类似于SDI应用程序的固定(禁止改变大小)的View进行绘图。 框架充分进行模块化,把MDI的窗口创建类放在一个单独的DLL中(DllMdiWnd.dll),开发者应该继承 这个类来得到一个文档模板(这样继承者不必考虑创建细节,只负责绘图),并且每一个文档模板最好 放到一个DLL中(如ADoc.dll,BDoc.dll,CDoc.dll)。开发者建立主程序来调用ADoc.dll,BDoc.dll, CDoc.dll,每个文档模板(如ADoc.dll)可产生多个对应子窗口。 不过,DllMdiWnd.dll并没有提供view/doc支持,它的职责只是创建及销毁调用者的需要子窗口。 (如果子窗口是new创建出来的,ADoc.dll的基类CMdiPlus中自己会负责delete,开发者可以不调用 delete)。 当然,如果有必要你可以在DLL(A.dll,B.dll,C.dll)中实现view/doc支持。建议根据 需要开发独立的数据模型模块。 如果按照MVC模式的划分,DllMdiWnd.dll可以理解为C(控制器,创建与销毁窗口),继承类(如ADoc.dll, BDoc.dll,CDoc.dll)类似于V(视图,负责显示数据),这个框架没有提供M(模型,数据存储)。开发者 应该结合不同的文档模板来实现M。 版本历史: v1.0.1 20100616 第一版本 如何使用: 方法1. 进行项目开发时先建立DLL工程(建议选择 add mfc header win32 dll),然后把 DllMdiWnd.dll拷贝到新建项目中。根据应用需要的不同文档模板建立多个对应的Dll工程,这些Dll 都继承自DllMdiWnd.dll的导出类,假定为ADoc.dll,BDoc.dll,CDoc.dll,这些Dll隐式链接DllMdiWnd.dll。 接着建立支持doc/view类型的MDI MFC主程序工程,隐式链接ADoc.dll,BDoc.dll,CDoc.dll。 另外要特别注意的是,主程序要进行必要的修改,如CChildFrame中要修改窗口样式。建立的MDI 主程序运行过程中将完全类似于SDI程序。如,弹出子窗口时它的视图仍然保持最大化(普通的MDI应用 程序中任意一个子窗口从最大化还原时,其它窗口都将处于非最大化状态),并且它永远处于弹出的 子窗口下面,只能(且必须)建立一个CChildFrame。主程序的所有绘图工作都在这个 CChildFrame对应的view上进行。如果需要调用子窗口,只需要创建ADoc.dll(或BDoc.dll,CDoc.dll)导 出类的对象即可。子窗口的所有绘图工作都在ADoc.dll(或BDoc.dll,CDoc.dll)中实现,所以主程序与 ADoc.dll(或BDoc.dll,CDoc.dll)应该同时开发。 方法2. 开发者可以自己根据需要直接修改Demo版进行开发。 其它: 框架有点类似于多个文档模板的MDI应用程序,但是普通的MDI程序在新建一个文档前无法绘图,除非 子类化CMainFrame或截获CMDIClient的消息。这些方式不便进行模块化开发。MdiPlus框架主要优点是在 新建一个文档前就有一个View进行绘图,并且不同功能进行模块化,各模块放到Dll中(如果必要,你也 可以直接写成静态库链接到最终的执行程序里),适合一个项目多人同时进行开发。 **/

2010-06-22

javaMail 邮件收发库

包含两个主要的类: 1. SendMail.java 我写的一个发送邮件类。程序会根据配置的文件自动发送邮件,可包含任意数量的附件,每个附件目录及文件名在配置文件中配置。 2.ReceiveOneMail 从网上down下来的接收邮件类,可自动把收件箱中的附件下载到本地磁盘上。 另外两个类是工具类,SendMail会调用。 我是用myEclipse8.5。如果你无法直接导入,请重建项目然后把源码copy过去。 有问题联系 dungeonsnd@126.com

2010-06-20

Window Gdi Edit c++ class.

/** name: Window Gdi Edit c++ class. time:20100524 author:jef email:dungeonsnd@126.com description: 用gdi方式画Eidt控件. 支持的功能: 可以显示编辑框风格`按钮风格或框架风格. 可以设置居左`居中或居右显示. 可以设置字符串超出给定的控件区域时显示方式,如自动调整控件区域`保留左(右)侧的字符或超出区域继续显示字符串. 不支持的功能: 没有单击响应功能.没有重绘保存功能(需要用户自己重绘此控件).没有响应键盘输入功能(只读控件). example: void CTView::OnDraw(CDC* pDC) { CTDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CRect rtClient; GetClientRect(&rtClient); pDC->FillSolidRect(rtClient,RGB(220,220,220)); double dx,dy; dx =rtClient.Width()/800.0; dy =rtClient.Height()/600.0; CRect rtDisp; rtDisp.SetRect(int(300*dx),int(100*dy),int(480*dx),int(140*dy)); CFont font; font.CreatePointFont(rtDisp.Height()*5,"宋体",pDC); CString cs="频谱显示 abcf 123.4"; CGEidt ge; ge.Disp(this,cs,rtDisp,&font); font.DeleteObject(); } **/

2010-05-26

MFC解决窗口保存及重绘闪烁问题的一种比较好的方案 v1.0.4

包含文件说明: 1. SolveFlashingAndRedrawv1.0.4 纯净版 无闪烁的MFC应用框架,实际使用时把此工程改名成你要建立的项目名称,然后开始开发即可。你熟悉MFC的话研究这个框架的半个小时应该就明白并熟练运用了。 2.SolveFlashingAndRedrawv1.0.4 demo版 利用SolveFlashingAndRedrawv1.0.4框架写的一个示例小程序,主要展示框架要实现的优点特性。 3.VCRn 修改vc工程名工具 ___作者 田彬.exe 用网上找到的一个MFC改工程名称的小工具,很实用。如果你想使用本框架就可以用它来改成你想要的工程名了。 4. 未使用本框架的类似功能简化程序 没有使用框架的程序,实现的功能和Demo类似。但是运行之后改变窗口大小等,会发现图形闪烁很厉害! 5. SolveFlashingAndRedrawv1.0.4 demo版 运行截图.jpg 6. ReadMe.txt 说明文件。 框架说明: /****************************************************** SolveFlashingAndRedraw框架说明 ******************************************************/ /** 项目名称: demo框架 版本号: v1.0.4 第一作者: Jef 地址: 中国/江苏 日期: 20100416 电子邮箱: dungeonsnd@126.com 版权: 1.您可以修改及免费使用本程序。 2.修改之后附上您的个人信息发送到上面的作者邮箱,作者负责在全面测试后发布您修改后的新版本。 3.您使用本程序而导致任何伤害以及经济损失,由过错方依法承担所有责任,一概与第一作者及合作单位无关。 4.如果您使用本程序则表示您已经同意此版本协议!否则请勿使用! 项目功能: SolveFlashingAndRedraw框架是MFC解决窗口保存及重绘闪烁问题的一种比较好的方案(Win32解决方法类似)。 版本历史: v1.0.1 20091126 第一版本 v1.0.2 20091212 第二版本 1. 修改了部分变量的名字使其更符合其意义 2. 增加为两个工程,一是带demo例子的,另一是不带demo的纯净版. 3. 修改了其中一个错误. 如 CreateCompatibleDC之后没有调用DeleteDC等. v1.0.3 对v1.0.2进行了整理 v1.0.4 20100416 在v1.0.3的基础上进行整理,并增加了裁剪区,提高了绘图效率! 运行步骤: 直接运行demo里面的程序,在窗口上任意拖拉鼠标画线,然后点击菜单栏的几个示范菜单项,然后移动窗口、 改变窗口大小、最大最小化窗口、用其它窗口覆盖此窗口、鼠标放到任务栏。。。 以上种种操作观察窗口内的图像变化。可以发现窗口内图像几乎看不到闪烁,而且窗口的元素已经保存下来重绘时任然可以看到图像。 如何使用: 进行项目开发时,可以先建立项目,然后把本解决方案框架拷贝到新建项目中即可。 也可以自己根据需要修改纯净版。 其它: 友情提示,小心 View类头文件及View类的实现文件中有说明,使用时别把它弄到你实际项目里哦! 进行大量复杂的图形的输出,而且对效率要求特别高时要考虑适当修改此框架(如增加裁剪区)后再使用哦。 关于如何在此框架的基础上提高绘图效率可以参阅下面的文章 如何提高绘图的效率 文章摘录 http://hi.baidu.com/new8sun/blog/item/68ccba8a80c3aadafc1f1079.html MFC双缓冲解决图象闪烁 2009-06-13 23:03 显示图形如何避免闪烁,如何提高显示效率是问得比较多的问题。而且多数人认为MFC的绘图函数效率很低,总是想寻求其它的解决方案。 MFC的绘图效率的确不高但也不差,而且它的绘图函数使用非常简单,只要使用方法得当,再加上一些技巧,用MFC可以得到效率很高的绘图程序。 我想就我长期(呵呵当然也只有2年多)使用MFC绘图的经验谈谈我的一些观点。 1、显示的图形为什么会闪烁? .................................

2010-04-17

程序实现文件的批量改名

自己用代码写的批量改名,替换通配符("*")部分算法比较“弱智”,欢迎大家指点,呵呵。 dungeonsnd@126.com ======================================== ide: vc6.0 编写OS: winxp sp2

2010-04-02

CFileFind搜索目录下所有文件的类

/** ===================================================== 功能: CFolderContent类搜索一个目录, 列出该目录下的所有目录名称,列出所有子目录下的文件名称等属性。 作者: jef 作者邮箱: dungeonsnd@126.com 发步时间: 20100311 版本: v1.1 版权: 请遵循GNU. 对外接口: int GetAllSub(CString csPath) csPath: 一个目录或者一个完整的文件名 使用举例: void CGetFolderContentView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CString cs,csSaveFileName,csFileSave,csT,csT1; cs ="C:\\Documents and Settings\\All Users\\Documents\\My Music"; char chModule[8192]; memset(chModule,0,8192); GetModuleFileName(NULL,chModule,8192); csT.Format("%s",chModule); csT =csT.Left( csT.ReverseFind(_T('\\')) ); csSaveFileName =csT+_T("\\FolderContent输出文件.txt"); CRect rtClient; GetClientRect(&rtClient); CClientDC dc(this); dc.SetTextColor(RGB(200,80,80)); dc.FillSolidRect(rtClient,RGB(240,240,240)); CFolderContent fc; fc.GetAllSub(cs); int i,len,k; csT ="-------"; csT =cs+"总大小为"; csT1.Format(" %.4fMB,清单文件已保存在 %s",fc.m_dTotalSize/double(1024*1024),csSaveFileName); csT +=csT1; csT +="-------"; dc.TextOut(5,0,csT); csFileSave +=csT+_T("\r\n"); csT ="-------"; csT +="所有子目录如下:"; csT +="-------"; dc.TextOut(5,25,csT); csFileSave +=csT+_T("\r\n"); len =fc.m_Directory.GetSize(); for (i=0;i<len;i++) { csT.Format(" 大小:%.4fMB",fc.m_vecDirectorySize[i]/double(1024*1024)); csT1.Format(" 创建时间:%d年%d月%d日 ", fc.m_vecFileLastCreationTime[i].wYear, fc.m_vecFileLastCreationTime[i].wMonth, fc.m_vecFileLastCreationTime[i].wDay); csT =csT+csT1; csT =fc.m_Directory.GetAt(i)+csT; dc.TextOut(5,(i+2)*20,csT); csFileSave +=csT+_T("\r\n"); } k =i; csT ="-------"; csT +="所有文件如下:"; csT +="-------"; dc.TextOut(5,(k+3)*20,csT); csFileSave +=csT+_T("\r\n"); len =fc.m_PathNameExt.GetSize(); for (i=0;i<len;i++) { csT.Format(" 大小:%.4fMB",fc.m_vecFileSize[i]/double(1024*1024)); csT1.Format(" 修改时间:%d年%d月%d日 ", fc.m_vecFileLastWriteTime[i].wYear, fc.m_vecFile

2010-03-11

利用 web控件自动打开新浪邮箱

名称: LonWebSite 版本: 1.0.0 作者: jef 邮箱: dungeonsnd@126.com 版权: 读者可以任意使用.出现任何错误与损失与笔者无关. 功能: 自动打开新浪邮箱 开发环境: vc6.0,mfc 说明: 作者在查找smtp资料时无意中看到网络上一段代码后写的一个自动打开新浪邮箱的工具,仅供参考.程序代码比较简单,利用ms web浏览器控件实现. 读者可以参阅实现其它需要的功能.作者对web控件和com方便也是不熟悉,与大家共同进步. LonWebSite.avi是运行程序的截的. 另外,希望大家不要修改程序中的那个测试用的新浪邮箱,否则你改了别人就登录不上了.

2010-01-03

Led数码管 显示类

/** ***************文件说明*************** 文件名: LedDisp.h 版本号: v1.0.6 (20100101.00001) 功能: 显示七段数码管风格的数字、小数点、冒号及部分字母。 (此版本理论上可用于MFC,Win32 SDK或其它Windows的环境,在Windows XP sp2下用vc6.0及vs2008编译、运行通过.) 第一作者: Jef 日期: 20100101 电子邮件: dungeonsnd@126.com 地址: 中国/江苏 版权: 1.您可以修改及免费使用本程序,但把本程序或修改后程序用于商业用途前请先通知第一作者并得到作者的许可。 2.修改之后保留此文件开头处的文件说明信息并更改副版本号(如 20090825.00001 改成 20091002.00001 ), 并拷贝一份附上您的个人信息发送到上面的作者邮箱,作者负责在全面测试后发布您修改后的新版本。 3.您使用本程序而导致任何伤害以及经济损失,由过错方依法承担所有责任,一概与第一作者及合作单位无关。 4.如果您使用本程序则表示您已经同意此版本协议!否则请勿使用! 其它: v1.0.1 (v20090825.00001) v1.0.2 (v20091026.00001) 1.增加Hide()方法 2.增加IsHide()方法 3.增加Disp(CDC* pdc,CRect DispRect,int iDigitsAmount,CString cs);方法 4.等 v1.0.3 (v20091031.00001) 1.增加多个小数点和冒号显示支持 2.增加GetLedFont()方法 3.修改了显示熄灭数码管的内部实现 4.等 v1.0.4 (v20091105.00001) 1.修改了SetSegmentPosition(int index)函数,增加内部属性 修正因子m_bMakeAmend, 设置修改因子为真时,在特殊情况下(如用户设置段宽度为2个像素或者1个像素), 程序将保证所有段的宽度相等,并且保证段与段不会相连. 2.修改了保存显示区域背景机制! 前一版本在调用数码管显示函数(Disp()等函数)时会自动 保存一幅对应于显示区域RECT的位图,此种机制当用户在OnPaint()函数里调用显示 函数而不调用Hide()时,并且此时的RECT在每次调用显示函数时都改变,则会导致保存 背景位图的向量m_vecBkSave不断扩大,而实际上保存的位图将没有作用且浪费大量内存! 如: void CLEDView::OnPaint() { CPaintDC dc(this); OnShow(); //不断的以不同的RECT区域调用Disp()将导致保存的 //位图(对应于每个区域)数量剧增! } void CLEDView::OnShow() { CClientDC dc(this); CRect rtClient; GetClientRect(&rtClient); double m_x =rtClient.Width()/800.0; double m_y =rtClient.Height()/600.0; CRect rt0; rt0.SetRect(20*m_x,10*m_y,220*m_x,410*m_y); led.Disp((CDC*)&dc,rt0,1,_T("1:")); } 解决方案: 保存位图将不再以RECT来标识,而是以一个用户输入的字符串来标识. 3. 添加MFC之外框架的支持.(未完成,未测试,希望测试的用户给作者联系测试结果.如WIN32 SDK,WTL等环境下.) v1.0.5 (v20091122.00001) 1. 增加UNICODE支持 2.完成MFC外的某些框架的支持 3.修改了和完善了某些代码段。如 删除保存背景的向量某一元素之前先把其中的位图删除; 内存dc用完之后添加删除操作 DeleteDC ; 构析函数中增加了删除全部位图资源操作 4. 修改了数个变量名使其更统一,如 SHOWPOS改成了iShowPos; 删除了某些接口,如 DispInt(); v1.0.6 (20100101.00001) 1. 增加运行时错误检测支持 (作者在项目中发现需要此功能的). #define SHOW_RUNING_ERROR_INFO //显示运行时错误信息. 不想在运行出现错误时显示此类提示信息 只需注释此行. 弹出错误的条件请见实现代码. 2.把某些接口改为virtual, 方便用户重写. 因为此类可能会继续升级,所以为了您的项目升级方便 请尽量不要直接修改此类, 你可以继承此类,重写其中的接口. 另外,考虑到兼容性,今后的版本 会尽量保持接口不变性来减少此类升级带给使用者的升级麻烦. 如果看哪个方法不爽您就在子类里重写吧. */ /** ***************About This File and Copyright*************** File Name: ledDisp.h Version: v1.0.6 (20100101.00001) First Author: Jef Date: 20100101 Function: Show the number in the style of the seven sections of numerical code tubes. Email: dungeonsnd@126.com Address: Jiangsu/China Copyright: 1.You can edit and use this program, but contact the first author AND get the licence before use in business. 2.Modify the subsidiary version after modify the code, and send a copy to the author's mailbox ,don't forget added your owner information! Other: */

2010-01-01

vc实现文件的拖动打开

实现功能: 把文件夹或文件拖动此程序上,程序显示该文件名。 用vc6.0环境,不过其它windows平台下的ide类似。 只要捕获windows的消息即可。 WM_DROPFILES消息。

2009-12-29

MF创建屏蔽掉系统键的全屏应用程序

项目名称: SoundContrl框架 版本号: v1.0.1 第一作者: Jef 地址: 中国/江苏 日期: 20091213 电子邮箱: dungeonsnd@126.com 版权: 1.您可以修改及免费使用本程序。 2.修改之后附上您的个人信息发送到上面的作者邮箱,作者负责在全面测试后发布您修改后的新版本。 3.您使用本程序而导致任何伤害以及经济损失,由过错方依法承担所有责任,一概与第一作者及合作单位无关。 4.如果您使用本程序则表示您已经同意此版本协议!否则请勿使用! 项目功能: 这个框架主要演示创建一个全屏应用程序的一种方法,并且屏蔽掉常见系统键。 版本历史: v1.0.1 20091213第一版本 运行步骤: 直接用VisualStudio 2008运行SoundContrl里面的程序,会发现全屏并屏蔽掉了系统键。 如何使用: 进行项目开发时,可以先建立项目,然后把本解决方案框架拷贝到新建项目中即可。 也可以自己根据需要修改。 其它: 框架分为两部分: 1.Hk.dll. 负责创建全局的低级别的键盘钩子. 钩子回调函数中屏蔽了常见的系统键,如 WinKey,Alt+Tab,Ctrl+Esc,Alt+Esc。(此种方法WinXP下无法屏蔽Ctrl+Alt+Del组合键。) 2.SoundContrl a. 程序演示了如何创建一个全屏的程序,并且没有菜单栏、工具栏、状态栏,这些菜单工具及状态都需要程序设计者自己创建。 b. 另外,作为一个全屏的程序,必须 要处理有关的系统键,否则用户按了系统键会影响到你的程序。FullScreenDemo调用了Hk.dll创建了键盘钩子,运行程序会自动全屏且无任何按钮,只能通过程序的中预 留(见View类)的Esc键来退出,或者打开任务管理器先在程序上右击选择最小化(不应该直接结束任务或结束进程,因为那样可能无法自动移除键盘钩子),接着在任务栏上 已经最小化的程序图标上右击选择关闭即可关闭应用程序。 友情提示,如果需要MFC原来的菜单只要到MainFram.cpp里面取消我注释掉的即可。另外发布应用程序时要把Hk.dll一同发布。

2009-12-14

MFC解决窗口保存及重绘闪烁问题的一种比较好的方案 SolveFlashingAndRedraw框架 v1.0.3

/****************************************************** SolveFlashingAndRedraw框架说明 ******************************************************/ /** 项目名称: demo框架 版本号: v1.0.3 第一作者: Jef 地址: 中国/江苏 日期: 20091126 电子邮箱: dungeonsnd@126.com 版权: 1.您可以修改及免费使用本程序。 2.修改之后附上您的个人信息发送到上面的作者邮箱,作者负责在全面测试后发布您修改后的新版本。 3.您使用本程序而导致任何伤害以及经济损失,由过错方依法承担所有责任,一概与第一作者及合作单位无关。 4.如果您使用本程序则表示您已经同意此版本协议!否则请勿使用! 项目功能: SolveFlashingAndRedraw框架是MFC解决窗口保存及重绘闪烁问题的一种比较好的方案(Win32解决方法类似)。 版本历史: v1.0.1 20091126 第一版本 v1.0.2 20091212 第二版本 1. 修改了部分变量的名字使其更符合其意义 2. 增加为两个工程,一是带demo例子的,另一是不带demo的纯净版. 3. 修改了其中一个错误. 如 CreateCompatibleDC之后没有调用DeleteDC等. v1.0.3 对v1.0.2进行了整理 运行步骤: 直接运行demo里面的程序,在窗口上任意拖拉鼠标画线,然后点击菜单栏的几个示范菜单项,然后移动窗口、 改变窗口大小、最大最小化窗口、用其它窗口覆盖此窗口、鼠标放到任务栏。。。 以上种种操作观察窗口内的图像变化。可以发现窗口内图像几乎看不到闪烁,而且窗口的元素已经保存下来重绘时任然可以看到图像。 如何使用: 进行项目开发时,可以先建立项目,然后把本解决方案框架拷贝到新建项目中即可。 也可以自己根据需要修改纯净版。 其它: 友情提示,小心 View类头文件及View类的实现文件中有说明,使用时别把它弄到你实际项目里哦! 进行大量复杂的图形的输出,而且对效率要求特别高时要考虑适当修改此框架(如增加裁剪区)后再使用哦。 关于如何在此框架的基础上提高绘图效率可以参阅下面的文章 .....

2009-12-12

MFC解决窗口保存及重绘闪烁问题的一种比较好的方案 SolveFlashingAndRedraw框架 v1.0.2

/****************************************************** SolveFlashingAndRedraw框架说明 ******************************************************/ /** 项目名称: demo框架 版本号: v1.0.2 第一作者: Jef 地址: 中国/江苏 日期: 20091126 电子邮箱: dungeonsnd@126.com 版权: 1.您可以修改及免费使用本程序。 2.修改之后附上您的个人信息发送到上面的作者邮箱,作者负责在全面测试后发布您修改后的新版本。 3.您使用本程序而导致任何伤害以及经济损失,由过错方依法承担所有责任,一概与第一作者及合作单位无关。 4.如果您使用本程序则表示您已经同意此版本协议!否则请勿使用! 项目功能: SolveFlashingAndRedraw框架是MFC解决窗口保存及重绘闪烁问题的一种比较好的方案(Win32解决方法类似)。 版本历史: v1.0.1 20091126 第一版本 v1.0.2 20091212 第二版本 1. 修改了部分变量的名字使其更符合其意义 2. 增加为两个工程,一是带demo例子的,另一是不带demo的纯净版. 3. 修改了其中一个错误. 如 CreateCompatibleDC之后没有调用DeleteDC等. 运行步骤: 直接运行demo里面的程序,在窗口上任意拖拉鼠标画线,然后点击菜单栏的几个示范菜单项,然后移动窗口、 改变窗口大小、最大最小化窗口、用其它窗口覆盖此窗口、鼠标放到任务栏。。。 以上种种操作观察窗口内的图像变化。可以发现窗口内图像几乎看不到闪烁,而且窗口的元素已经保存下来重绘时任然可以看到图像。 如何使用: 进行项目开发时,可以先建立项目,然后把本解决方案框架拷贝到新建项目中即可。 也可以自己根据需要修改纯净版。 其它: 友情提示,小心 View类头文件及View类的实现文件中有说明,使用时别把它弄到你实际项目里哦! 进行大量复杂的图形的输出,而且对效率要求特别高时要考虑适当修改此框架(如增加裁剪区)后再使用哦。 关于如何在此框架的基础上提高绘图效率可以参阅下面的文章 如何提高绘图的效率 文章摘录 http://hi.baidu.com/new8sun/blog/item/68ccba8a80c3aadafc1f1079.html MFC双缓冲解决图象闪烁

2009-12-12

MFC解决窗口保存及重绘闪烁问题的一种比较好的方案 框架

/****************************************************** SolveFlashingAndRedraw框架说明 ******************************************************/ /** 项目名称: SolveFlashingAndRedraw框架 包含文件: 1. ReadMe.txt 2. SolveFlashingAndRedraw MFC工程 版本号: v1.0.1 第一作者: Jef 地址: 中国/江苏 日期: 20091126 电子邮箱: dungeonsnd@126.com QQ: 420554565 (加好友时注明下载的文件名) 版权: 1.您可以修改及免费使用本程序。 2.修改之后附上您的个人信息发送到上面的作者邮箱,作者负责在全面测试后发布您修改后的新版本。 3.您使用本程序而导致任何伤害以及经济损失,由过错方依法承担所有责任,一概与第一作者及合作单位无关。 4.如果您使用本程序则表示您已经同意此版本协议!否则请勿使用! 项目功能: SolveFlashingAndRedraw 样例工程是MFC解决窗口保存及重绘闪烁问题的一种比较好的方案(Win32解决方法类似)。 运行步骤: 直接运行里面的程序,在窗口上任意拖拉鼠标画线,然后点击菜单栏的几个示范菜单项,然后移动窗口、 改变窗口大小、最大最小化窗口、用其它窗口覆盖此窗口、鼠标放到任务栏。。。 以上种种操作观察窗口内的图像变化。可以发现窗口内图像几乎看不到闪烁,而且窗口的元素已经保存下来重绘时任然可以看到图像。 如何使用: 进行项目开发时,可以先建立项目,然后把本解决方案框架拷贝到新建项目中即可。 也可以自己根据需要修改。 其它: 友情提示,小心 View类头文件及View类的实现文件中有说明,使用时别把它弄到你实际项目里哦! 进行大量复杂的图形的输出,而且对效率要求特别高时要考虑适当修改此框架(如增加裁剪区)后再使用哦。 如何有任何问题欢迎与作者分享!!!

2009-11-26

Led 显示 类 数码管 数码 数字

文件名: LedDisp.h 版本号: v1.0.5 (v20091122.00001) 功能: 显示七段数码管风格的数字、小数点、冒号及部分字母。 (此版本理论上可用于MFC,Win32 SDK或其它环境,在Windows XP sp2下用vc6.0及vs2008编译、运行通过.) 第一作者: Jef 日期: 20091122 电子邮件: dungeonsnd@126.com 地址: 中国/江苏 版权: 1.您可以修改及免费使用本程序,但把本程序或修改后程序用于商业用途前请先通知第一作者并得到作者的许可。 2.修改之后保留此文件开头处的文件说明信息并更改副版本号(如 v20090825.00001 改成 v20091002.00001 ), 并拷贝一份附上您的个人信息发送到上面的作者邮箱,作者负责在全面测试后发布您修改后的新版本。 3.您使用本程序而导致任何伤害以及经济损失,由过错方依法承担所有责任,一概与第一作者及合作单位无关。 4.如果您使用本程序则表示您已经同意此版本协议!否则请勿使用! 其它: v1.0.1 (v20090825.00001) v1.0.2 (v20091026.00001) 1.增加Hide()方法 2.增加IsHide()方法 3.增加Disp(CDC* pdc,CRect DispRect,int iDigitsAmount,CString cs);方法 4.等 v1.0.3 (v20091031.00001) 1.增加多个小数点和冒号显示支持 2.增加GetLedFont()方法 3.修改了显示熄灭数码管的内部实现 4.等 v1.0.4 (v20091105.00001) 1.修改了SetSegmentPosition(int index)函数,增加内部属性 修正因子m_bMakeAmend, 设置修改因子为真时,在特殊情况下(如用户设置段宽度为2个像素或者1个像素), 程序将保证所有段的宽度相等,并且保证段与段不会相连. 2.修改了保存显示区域背景机制! 前一版本在调用数码管显示函数(Disp()等函数)时会自动 保存一幅对应于显示区域RECT的位图,此种机制当用户在OnPaint()函数里调用显示 函数而不调用Hide()时,并且此时的RECT在每次调用显示函数时都改变,则会导致保存 背景位图的向量m_vecBkSave不断扩大,而实际上保存的位图将没有作用且浪费大量内存! 如: void CLEDView::OnPaint() { CPaintDC dc(this); OnShow(); //不断的以不同的RECT区域调用Disp()将导致保存的 //位图(对应于每个区域)数量剧增! } void CLEDView::OnShow() { CClientDC dc(this); CRect rtClient; GetClientRect(&rtClient); double m_x =rtClient.Width()/800.0; double m_y =rtClient.Height()/600.0; CRect rt0; rt0.SetRect(20*m_x,10*m_y,220*m_x,410*m_y); led.Disp((CDC*)&dc,rt0,1,_T("1:")); } 解决方案: 保存位图将不再以RECT来标识,而是以一个用户输入的字符串来标识. 3. 添加MFC之外框架的支持.(未完成,未测试,希望测试的用户给作者联系测试结果.如WIN32 SDK,WTL等环境下.) v1.0.5 (v20091122.00001) 1. 增加UNICODE支持 2.完成MFC外的某些框架的支持 3.修改了和完善了某些代码段。如 删除保存背景的 向量某一元素之前先把其中的位图删除; 内存dc用完之后添加删除操作 DeleteDC ; 构析函数中增加了删除 全部位图资源操作 4. 修改了数个变量名使其更统一,如 SHOWPOS改成了iShowPos; 删除了某些接口,如 DispInt(); 2.说明及注意 (Attention!) a.支持 改变数码管亮时的颜色 灭时颜色 区域背景色,支持居左居中居右显示,支持细调显示的位置(SetFont();)及数码管粗细等细节. 支持距离左或右一定距离显示字符串(m_iDistaceToRight). 支持创建不定数量的自定义字体(LedFontID来表示已创建的不同字体,已经创建过的字体被再次创建时则改写这个字体). 支持默认参数(调用时可以依次不传递有默认值参数). b.显示的字符的宽度与高度不随窗口的大小变化而自动变化,故调用者应自行处理. c.内部不含自动重画功能,故调用者应自己处理窗口重绘时字符的重新显示. d.字符串内可同时含 ":"与"." ,但字符串左起第一个字符不能为":"或"." ,且不能连续两个不点位符号,如小数点或冒号!! e.能显示的字符包括 0-9,a-f,A-F,".",":","-" f.如 bool Disp(HDC hDc,RECT rtDispRect,TCHAR* cs,int iFontWidth,int iFontHeight,TCHAR* strIdentifier=_T("LedValue1")); 用户应自己设置好 rtDispRect与iFontWidth iFontHeight 的大小关系. 如果iFontHeight大于rtDispRect.Height(),则超出DispRect区域显示字符. 但左右可能不会超出显示(用户可设置m_bShowWhenOverstepRect来控制是否显示). 调用者应自己保证使字符串能全部显示在DispRect中,否则超出部分可能不会显示!!! g.当字符的宽度与数码管的每一段的宽度比例严重失调时,显示的字符会严重失真(如数码管每一段宽度为5个像素, 而长度却也为5像素则显示效果将失真)! 一般情况下,iFontHeight=2*m_iFontWidth,m_dSegmentWidth远小于m_iFontWidth h. led.SetColor(RGB(0,200,0)) 等方法会改变类的字体属性,故之后调用显示时字体属性都会发生改变. 但创建新的字体时不会改变类的字体属性. i.调用 Disp(...,strIdentifier)等此类数码管显示函数显示数码管后, 显示区域的背景及区域会自动保存. 1.再次调用Disp(...,strIdentifier)时会用新的显示区域的背景替换原背景及区域; 2.调用Hide(...,strIdentifier)方法时程序会自动删除strIdentifier对应原位图及区域,然后隐藏该区域的数码管(用原背景位图贴在此区域); 3.对象析构时会自动删除已经保存的所有的背景位图及区域. 3.使用方法(仅举一种使用方法) (Using e.g.) i. void CLEDView::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here OnShow(); // Do not call CView::OnPaint() for painting messages } void CLEDView::OnShow() { // TODO: Add your command handler code here CClientDC dc(this); CRect rtClient; GetClientRect(&rtClient); CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP1); CDC memdc; memdc.CreateCompatibleDC(&dc); memdc.SelectObject(&bmp); dc.StretchBlt(0,0,rtClient.Width(),rtClient.Height(),&memdc,0,0, 800,600,SRCCOPY); double m_x =rtClient.Width()/800.0; double m_y =rtClient.Height()/600.0; CRect rt0; rt0.SetRect(int(20*m_x),int(10*m_y),int(420*m_x),int(80*m_y)); CString s; s ="123-:1:."; TCHAR str[256]; sprintf(str,"%s",s); led.DispDigits((HDC)dc,rt0,str,7,_T("Led1")); } void CLEDView::OnHide() { // TODO: Add your command handler code here CClientDC dc(this); led.Hide((HDC)dc,"Led1"); } ii. CClientDC dc(this); ...... CRect rt0; rt0.SetRect(int(20*m_x),int(10*m_y),int(420*m_x),int(80*m_y)); CString s; s ="123-:1:."; led.Disp_mfc((CDC*)&dc,rt0,s,27,45,_T("Led1")); */

2009-11-22

LED 数码管 显示 类

/** ***************文件说明*************** /* 文件名: LedDisp.h 版本号: v1.0.3 (v20091031.00001) 功能: 显示七段数码管风格的数字、小数点、冒号及部分字母。 (此版本用到MFC的某些类,故只能用于MFC(如CString,若要用于其它框架请自行修改.),在vc6.0,vs2008下编译、运行通过.) 第一作者: Jef 日期: 20091031 电子邮件: dungeonsnd@126.com 地址: 中国/江苏 版权: 1.您可以修改及免费使用本程序,但把本程序或修改后程序用于商业用途前请先通知第一作者并得到作者的许可。 2.修改之后保留此文件开头处的文件说明信息并更改副版本号(如 v20090825.00001 改成 v20091002.00001 ), 并拷贝一份附上您的个人信息发送到上面的作者邮箱,作者负责在全面测试后发步您修改后的新版本。 3.您使用本程序而导致任何伤害以及经济损失,由过错方依法承担所有责任,一概与第一作者及合作单位无关。 4.如果您使用本程序则表示您已经同意此版本协议!否则请不要使用! 其它: 使用时应同时拥有此头文件的实现文件(LedDisp.cpp)! v1.0.1 (v20090825.00001) v1.0.2 (v20091026.00001) 1.增加Hide()方法 2.增加IsHide()方法 3.增加Disp(CDC* pdc,CRect DispRect,int iDigitsAmount,CString cs);方法 4.等 v1.0.3 (v20091031.00001) 1.增加多个小数点和冒号显示支持 2.增加GetLedFont()方法 3.修改了显示熄灭数码管的内部实现 4.等 File Name: ledDisp.h Version: v1.0.3 (v20091031.00001) First Author: Jef Date: 20091031 Function: Show the number in the style of the seven sections of numerical code tubes. (This version has used some classes of MFC,so it can be only used in MFC(Edit it if you use in other frames.).Correctly run on vc6.0 and vs2008.) Email: dungeonsnd@126.com Address: Jiangsu/China Copyright: 1.You can edit and use this program, but contact the first author AND get the licence before used in business. 2.Modify the subsidiary version after modify the code, and send a copy to the author's mailbox ,don't forget added your own information! Other: */ 2.说明及注意 a.支持 改变数码管亮时的颜色 灭时颜色 区域背景色,支持居左居中居右显示,支持细调显示的位置(SetFont();)及数码管粗细等细节. 支持距离左或右一定距离显示字符串(m_iDistaceToRight). 支持创建不定数量的自定义字体(LedFontID来表示已创建的不同字体,已经创建过的字体被再次创建时则改写这个字体). 支持默认参数(调用时可以依次不传递有默认值参数). b.显示的字符的宽度与高度不随窗口的大小变化而自动变化,故调用者应自行处理. c.内部不含自动重画功能,故调用者应自己处理窗口重绘时字符的重新显示. d.字符串内可同时含 ":"与"." ,但字符串左起第一个字符不能为":"或"." ,且不能连续两个小数点或冒号!! e.能显示的字符包括 0-9,a-f,A-F,".",":","-" f.如 bool Disp(CDC* pdc,CRect DispRect,CString cs,int iFontWidth,int iFontHeight); 用户应自己设置好 DispRect与iFontWidth iFontHeight 的大小关系. 如果iFontHeight大于DispRect.Height(),则超出DispRect区域显示字符. 但左右可能不会超出显示(用户可设置m_bShowWhenOverstepRect来控制是否显示). 调用者应自己保证使字符串能全部显示在DispRect中,否则超出部分可能不会显示!! g.当字符的宽度与数码管的每一段的宽度比例严重失调时,显示的字符会严重失真(如数码管每一段宽度为5个像素,而长度却也为5像素则显示效果将失真)! 一般情况下,iFontHeight=2*m_iFontWidth,m_dSegmentWidth远小于m_iFontWidth h. led.SetColor(RGB(0,200,0));等会改变类的字体属性,故之后调用显示时字体属性都会发生改变. 但创建新的字体时不会改变类的字体属性.

2009-10-31

Led 显示 类 数码管

版本号: v1.0.2 (v20091026.00001) 功能: 显示七段数码管风格的数字、小数点、冒号及部分字母。 (此版本用到MFC的某些类,故只能用于MFC(如CString,若要用于其它框架请自行修改.),在vc6.0,vs2008下编译、运行通过.) 第一作者: Jef 日期: 20090825 电子邮件: dungeonsnd@126.com 地址: 中国/江苏 版权: 1.您可以修改及免费使用本程序,但把本程序或修改后程序用于商业用途前请先通知第一作者并得到作者的许可。 2.修改之后保留此文件开头处的文件说明信息并更改副版本号(如 v20090825.00001 改成 v20091002.00001 ), 并拷贝一份附上您的个人信息发送到上面的作者邮箱,作者负责在全面测试后发步您修改后的新版本。 3.您使用本程序而导致任何伤害以及经济损失,由过错方依法承担所有责任,一概与第一作者及合作单位无关。 4.如果您使用本程序则表示您已经同意此版本协议!否则请不要使用! 其它: 使用时应同时拥有此头文件的实现文件(LedDisp.cpp)! 2.说明及注意 a.支持 改变数码管亮时的颜色 灭时颜色 区域背景色,支持居左居中居右显示,支持细调显示的位置(SetFont();)及数码管粗细等细节. 支持距离左或右一定距离显示字符串(m_iDistaceToRight). 支持创建不定数量的自定义字体(LedFontID来表示已创建的不同字体,已经创建过的字体被再次创建时则改写这个字体). 支持默认参数(调用时可以依次不传递有默认值参数). 支持三种调用方法. b.显示的字符的宽度与高度不随窗口的大小变化而自动变化,故调用者应自行处理. c.内部不含自动重画功能,故调用者应自己处理窗口重绘时字符的重新显示. d.字符串内不能同时含 ":"与"." ,可以只含其中一个字符. e.能显示的字符包括 0-9,a-f,A-F,".",":","-" f.居中显示时设置m_bFillFullRect=true;将不起作用,即居中时不可以显示满整个区域(没有字符处显示数码管灭的颜色) g.如 bool Disp(CDC* pdc,CRect DispRect,CString cs,int iFontWidth,int iFontHeight); 用户应自己设置好 DispRect与iFontWidth iFontHeight 的大小关系. 如果iFontHeight大于DispRect.Height(),则超出DispRect区域显示字符. 但左右可能不会超出显示,多出部分的字符可能不显示出来. 调用者应自己保证使字符串能全部显示在DispRect中,否则超出部分可能不会显示!! h.当字符的宽度与数码管的每一段的宽度比例严重失调时,显示的字符会严重失真(如数码管每一段宽度为5个像素,而长度却也为5像素则显示效果将失真)! 一般情况下,iFontHeight=2*m_iFontWidth,m_dSegmentWidth远小于m_iFontWidth i. led.SetColor(RGB(0,200,0));等会改变类的字体属性,故之后调用显示时字体属性都会发生改变. 但创建新的字体时不会改变类的字体属性.

2009-10-26

数码管 (LED) 显示 类

(内含详细说明文档) 版本号: v1.0.0 (v20090825.00001) 功能: 显示七段数码管风格的数字、小数点、冒号及部分字母。 (此版本用到MFC的某些类,故只能用于MFC(如CString,若要用于其它框架请自行修改.),在vc6.0,vs2008下编译、运行通过.) 说明及注意 a.支持 改变数码管亮时的颜色 灭时颜色 区域背景色,支持居左居中居右显示,支持细调显示的位置(SetFont();)及数码管粗细等细节. 支持距离左或右一定距离显示字符串(m_iDistaceToRight). 支持创建不定数量的自定义字体(LedFontID来表示已创建的不同字体,已经创建过的字体被再次创建时则改写这个字体). 支持默认参数(调用时可以依次不传递有默认值参数). 支持三种调用方法. b.显示的字符的宽度与高度不随窗口的大小变化而自动变化,故调用者应自行处理. c.内部不含自动重画功能,故调用者应自己处理窗口重绘时字符的重新显示. d.字符串内不能同时含 ":"与"." ,可以只含其中一个字符. e.能显示的字符包括 0-9,a-f,A-F,".",":","-" f.居中显示时设置m_bFillFullRect=true;将不起作用,即居中时不可以显示满整个区域(没有字符处显示数码管灭的颜色) g.如 bool Disp(CDC* pdc,CRect DispRect,CString cs,int iFontWidth,int iFontHeight); 用户应自己设置好 DispRect与iFontWidth iFontHeight 的大小关系. 如果iFontHeight大于DispRect.Height(),则超出DispRect区域显示字符. 但左右可能不会超出显示,多出部分的字符可能不显示出来. 调用者应自己保证使字符串能全部显示在DispRect中,否则超出部分可能不会显示!! h.当字符的宽度与数码管的每一段的宽度比例严重失调时,显示的字符会严重失真(如数码管每一段宽度为5个像素,而长度却也为5像素则显示效果将失真)! 一般情况下,iFontHeight=2*m_iFontWidth,m_dSegmentWidth远小于m_iFontWidth i. led.SetColor(RGB(0,200,0));等会改变类的字体属性,故之后调用显示时字体属性都会发生改变. 但创建新的字体时不会改变类的字体属性.

2009-10-24

在DLL里创建主程序的子窗口

在DLL里创建主程序的子窗口,调用这个DLL时出了点问题(退出程序时有个异常)。 一个示意简化的 dll及dll_test.

2009-08-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除