关于作者

姓名:wallimn

性别:男

出生日期:

地区:

联系电话:

QQ:54871876婚否:保密
用户名:wallimn
笔名:wallimn
地区:
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



好友链接

访问统计:
文章个数:34
评论个数:64
留言条数:8




Powered by BlogDriver 2.1

wallimn的博客

 

欢迎访问wallimn的博客,欢迎大家多交流,希望跟有共同爱好的人做朋友!
邮件:wallimn@sohu.com
网络硬盘:http://wallimn.gbaopan.com(可下载博客中提到的相关资源、代码)
欢迎访问我的主博客:http://blog.csdn.net/wallimn

文章

大家好,关于我的博客  (作者置顶)
摘要:请访问我的新博客:http://blog.csdn.net/wallimn,网络硬盘更改为:http://wallimn.ys168.com 查看全文

- 作者: wallimn 2008年03月29日, 星期六 11:43  回复(0) |  引用(0) 加入博采

我的WORD2003手写签名插件出新版本了  (作者置顶)
摘要:详情请到我的主博客:http://blog.csdn.net/wallimn。感谢众网友的支持。 查看全文

- 作者: wallimn 2008年03月8日, 星期六 18:19  回复(0) |  引用(0) 加入博采

★★★〖WORD插件运行截图〗★★★  (作者置顶)

插入签名 运行效果

签名验证

 文档验证

插入图章

 插入签名

手写签名

 插入界面

- 作者: wallimn 2006年08月15日, 星期二 14:06  回复(4) |  引用(0) 加入博采

WORD2003签名签章插件介绍==wallimn  (作者置顶)

WORD203签名签章插件

1.前言
  这是我学习ATL的成果,学习过程及程序的编写,前前后后共用了二十多天的时间,花了不少的心血。其间遇到了不少困难,终于都一一解决了。这要感谢www.csdn.net上的热心朋友,从他们的BLOG文章中,我获得了不少灵感。现在这个软件基本完成了,全部实现了我自己定的设计需求,自己觉得这个软件还有一定的用处,就把它的测试版发布一下,希望作用者多提宝贵意见。
  注:测试版没有任何的功能限制,只是显示了“Beta 1.0”字样,对试用没有任何影响,也没有使用时间的限制。
  
2.功能
  可以完成手写签名及插入签章的功能。插入签名或签章后,可以监控WORD文档是否被修改。软件的使用界面很简单,只是在WORD里插入了一个工具栏,上面有三个按钮。其它的功能在插入的签名或签章上按右键根据弹出菜单选择执行。
  印章支持多种格式图片,如BMP,JPG,GIF(静止的)等,使用时用印章管理工具把这些导入到印章库即可。
  印章库管理密码:12345
  
3.软件的使用:
 软件包含七个文件:
steal.mdb       印章库。
xxhsignature.ini   配制文件,如果没有会自动生成。
XXHSignature.dll   WORD2003的COM加载项。程序的主体。
Register.exe     注册XXHSignature.dll用,可以不使用,直接使用regsvr32。
UnRegister.exe    卸载XXHSignature.dll用,可以不使用,直接使用regsvr32 /u。
StealManager.exe   印章管理工具。
说明文档.txt     说明文档。
  
  软件使用VC6、ATL开发,没有使用MFC,所以每个软件都很小巧。
  我在开发时使用的环境为XP、WORD2003,对软件在其它环境下没有进行过测试,不知道存不存在兼容问题。期待大家的反馈,可以给我发EMAIL,或者到我的博客留言。
  如果程序运行有问题,可以使用Unregister或regsvr32 /u将其卸载即可。也可以使用WORD的加载项管理菜单(该菜单默认时不显示,可以点击工具->自定义中找到使之显示),禁止插插件启动时运行。
  另外:软件编译为UNICODE,对WIN98肯定是不支持。
  
  欢迎转载,转载时请不要删除这些信息。谢谢。


                2006-04-25
                作者:wallimn
                email:wallimn@sohu.com
                QQ:54871876
                博客:http://wallimn.bokee.com

下载请访问我的网络硬盘,地址:

http://www.soeasy.net.cn/pickFilesAction.do?topicId=1498419&uid=1498355

http://wallimn.gbaopan.com(需要注册为该网站的用户,有些麻烦)

补充说明:

控件注册使用regsvr32(系统提供的注册控件工具,可以在开始->运行中输入)
regsvr32 控件路径名\插件名
regsvr32 -H 可以看一下帮助

注册后,一般会出现个工具栏,有的机器不知为什么不出。
这时,可以工具->自定义,选择命令选项卡,左边选工具,右边找到COM加载项,把它拖到菜单或工具栏上。关闭自定义窗口。点击COM加载项,把签名插件勾选一下就可以了。

软件运行截图见另外一篇文章http://wallimn.bokee.com/5532495.html

- 作者: wallimn 2006年04月25日, 星期二 14:18  回复(11) |  引用(0) 加入博采

Word手写签名插件(COM加载项、VC6.0ATL)开发思路  (作者置顶)
开发思路:
  写这个东东,其实就是写一个COM加载项。可以使用MFC、也可以使用ATL,也可以使用VB,我最终选用了ATL。主要是VC我用得比较多,而ATL通过模板库会给开发带来极大的便利,参考资料也比较多,因此选用了ATL。事实证明我的选择是正确的。不过使用VB相对要方便一些,VB可以很方便地对COM进行编程,编程中也可以直接使用Word的宏代码,根本不用做代码转换。
  开始编程,使用VC向导,可以很快的生成COM的框架,然后向工程里插入一个simple object(在菜单插入->插入ATL对象里面)。通过这个对象来改变WORD的菜单、TOOLBAR,这方面的文章很多,我的开发就是介绍了徐景周的一篇文章,到网上找一下,很多转载(我发现网上原创的东西实在不多呀)。这样一个简单的COM加载项的框架就建好了。
  手写签名部分的实现,这部分都是一些相对编程者容易的问题。简单说一下,首选插入一个对话框(在菜单插入->插入ATL对象里面),加入几个按钮,写一个单向链表用来存签名的笔画,用兼容DC、兼容位图、OleCreatePictureIndirect,把图片创建成一个IPictureDisp对象,以供下面的使用。
  再插入一个Full Control对象,方法同上。把上面一步生成的IPictureDisp写进Full Control对象,再调用WORD的AddOleCtrol方法将这个东东插入就可以了。
  这就是一个简单的流程。说的很粗略,因为不知道感兴趣的人多不多。
  在开发的过程中我遇到了以下这样一些问题,后来慢慢解决了,如果大家有兴趣可以来交流一下。
  1.如何在插入对象中取到WORD的ActiveDocument的指针(这个不能通过保存的方法来)。
    取Container的指针,再查IDispatch的接口。
      2.如果在程序里控制控件的删除,如在控件内点击,通过上下文菜单文菜单删除控件。
    可以给控件设置一下标志,然后通过Word的方法遍历对象组,检查对应的标志,然后删除。
      3.如何保存。
   可以重载框架的Save和Load方法,把对象的相关属性保存。这两个方法会由WORD自动调用。
      4.如何使用TOOLTIP。
    这个在MSDN里有详细的帮助,可以参照解决。
      5.如何移动控件。
    处理控件的OnLButtonDown/OnMouseMove/OnLButtonUp消息,然后通过Word的方法移动控件。
     简单写了一下思路,欢迎交流。

- 作者: wallimn 2006年04月13日, 星期四 14:42  回复(19) |  引用(0) 加入博采

我的老婆真聪明(连载)
摘要:老婆的趣事。 查看全文

- 作者: wallimn 2007年03月1日, 星期四 20:26  回复(0) |  引用(0) 加入博采

JSP中,AJAX使用POST方式提交中文乱码问题解决

/***********本人原创,欢迎转载,转载请保留本人信息*************/
作者:王力猛 (wallimn)
电邮:wallimn@sohu.com
博客:http://wallimn.bokee.com
时间:2006-11-15
/***********本人原创,欢迎转载,转载请保留本人信息*************/

  今天终于解决了AJAX的中文乱码问题,写篇文章来帮助一下有同样问题的朋友们。我的开发环境:XP, eclipse,使用GB18030编码。
  当遇到这个问题时,到网上去查了好多文章,提到几种解决方案,如:全站UTF-8编码;请求头编码为中文;使用javascript中的escape函数。
  使用GET方式提交数据的时候,中文问题很好解决,setrequestheader("Content-Type","text/html; encoding=gb18030")就可以了。但这个方法在POST方式中却不起作用。大家都知道GET方式提交数据有长度限制,有时我们必须使用POST方式来提交数据。
  但对于POST方式,使用上述的几种方法经过多次测试,问题依旧。我郁闷了好几天。
  今天把问题解决了,很简单,是使用escape(或encodeURI,两个函数javascript的函数,功能基本相同,可以查一下相关的帮助),但要使用两次,这是解决问题的关键。
  我的例子涉及两个页面,一个是初始页面,一个是AJAX请求处理页面。
  初始页面内容如下(hello.jsp):
/////////////////////////////////////////////////////////////////////////////////////
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%String path = request.getContextPath();%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>AJAX提交页面</title>
 <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
   <script type="text/javascript">
    function justdo(){
  var post="name=王力猛&email=wallimn@sohu.com&bokee=http://wallimn.bokee.com";
  post = encodeURI(post);
  post = encodeURI(post);//两次,很关键
  var xmlObj = new ActiveXObject('Msxml2.XMLHTTP');
  var URL = '<%= path%>/page/act.jsp';//文件名需要调整成测试时的相应位置?
  xmlObj.open ('post',URL,true);
  xmlObj.setrequestheader("cache-control","no-cache");
  xmlObj.setrequestheader("Content-Type","application/x-www-form-urlencoded");
  xmlObj.send (post);//注意:POST方式,使用这个来发送内容?
   }
   </script>
  </head> 
  <body>
  <input type="button" value="提交" onclick="justdo()"/>
   </body>
</html>
/////////////////////////////////////////////////////////////////////////////////////
  ajax请求处理页面(act.jsp)的内容如下:
/////////////////////////////////////////////////////////////////////////////////////
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%String path = request.getContextPath();%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page import="java.net.URLDecoder"%>
<html>
  <head>
    <title>ajax deal</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
  </head>
  <body>
  <%
  //遍历输出参数内容。
  for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {
   String h = (String) e.nextElement();
   String v = request.getParameter(h);
   String mm =  java.net.URLDecoder.decode(v, "UTF-8");
   System.out.println("请求参数: " + h + " = " + mm);
  }
   %>
  </body>
</html>
/////////////////////////////////////////////////////////////////////////////////////
  分析:当调用request.getParameter()函数时,会自动进行一次URI的解码过程,调用时内置的解码过程会导致乱码出现。而URI编码两次后,request.getParameter()函数得到的是原信息URI编码一次的内容。再用可控的解码函数java.net.URLDecoder.decode()就可解出原始的正确的信息。
  以上分析纯属个人看法,不知是否正确。

- 作者: wallimn 2006年11月12日, 星期日 14:06  回复(2) |  引用(0) 加入博采

VC知识库的离线包整合

  我想用VC的人可能都会知道http://www.vckbase.com,网站上的VC知识库离线包也是非常的不错,可以帮你解决绝大部分编程中遇到的问题。但它只是前20集有个合订本,后来的都是一集一集单的,使查找东西非常的不方便。

  我的室的郭教员花了些时间跟心思(有个CHM merge工具,只能合并20个文件,郭教员用自己的方法把它解决了。),把目前的1-46期合并起来建了个全部的索引文件,可以在全部知识库中搜索、建立标签。真是方便。如果有其它VC程序员需要,请与我联系,我可以Email你们一份。好东西大家用。我的Email: wallimn@sohu.com

- 作者: wallimn 2006年10月31日, 星期二 09:04  回复(1) |  引用(0) 加入博采

谈如何捕获OFFICE软件的事件

  作者:wallimn(wallimn@sohu.comhttp://wallimn.bokee.com)欢迎转载,转载请保留作者信息。
  今天很高兴,终于学会捕获Microsoft Office PowerPoint的事件。写出来给大家分享。我发现网上原创的文章少,转载的文章多,我来为原创做点贡献。
  本文以PPT为例,其原理应该适用于WORD及EXCEL,假定读者有些使用ATL开发OFFICE插件(或COM)的基础。所谓事件,在PPT中是指SlideShowBegin(播放开始)、SlideShowEnd(播放结束)等,所有事件的名字和含义可以PPT的VBA帮助章节找到。
  作者的测试环境为VC6.0,使用ATL框架。测试的基础软件框架使用的是徐景周(很感谢这位高人,代码及文章给了我很大的帮助)的《PowerPoint2K/XP插件开发》中的源码,相关源码及文章可以到www.vckbase.com上找到。插件开发的相关细节这里就略过了。
  其实技术就是一层纸,非常的简单,在此我也不打算详细的说,把几个要点说一下。其实是仔细分析了自定义按钮单击事件的代码后,经过一上午的测试实现了PPT播放事件的捕获。主要就是在几个地方加入些代码。
1.使插件类继承public IDispEventSimpleImpl<11/*自定的不重复正数*/, CPowerPoint2000Addin, &__uuidof(MSPPT::EApplication)>
 定义一个转义:typedef IDispEventSimpleImpl</*nID =*/ 11,CPowerPoint2000Addin, &__uuidof(MSPPT::EApplication)> PPTEvents;
2.声明一个结构,标识响应函数信息(第一个必须为CC_STDCALL,后面是返回值,参数个数及类型)
_ATL_FUNC_INFO OnPPTEventInfo = {CC_STDCALL,VT_EMPTY,1,{VT_DISPATCH}};
3.增加事件映射
 BEGIN_SINK_MAP(CPowerPoint2000Addin)
  //SINK_ENTRY_INFO(1,__uuidof(Office::_CommandBarButtonEvents),/*dispid*/ 0x01,OnClickButton1, &OnClickButtonInfo)
  SINK_ENTRY_INFO(11,__uuidof(MSPPT::EApplication),/*dispid*/ 2011,SlideShowBegin, &OnPPTEventInfo)//2011,DISPID,可以在MSDN上查到
 END_SINK_MAP()
其它DISPID
2001 WindowSelectionChange  
2002 WindowBeforeRightClick  
2003 WindowBeforeDoubleClick  
2004 PresentationClose  
2005 PresentationSave  
2006 PresentationOpen  
2007 NewPresentation  
2008 PresentationNewSlide  
2009 WindowActivate  
2010 WindowDeactivate  
2011 SlideShowBegin  
2012 SlideShowNextBuild  
2013 SlideShowNextSlide  
2014 SlideShowEnd  
2015 PresentationPrint  
2016 SlideSelectionChanged x
2017 ColorSchemeChanged x
2018 PresentationBeforeSave x
2019 SlideShowNextClick x

4.声明事件
    void __stdcall SlideShowBegin (IDispatch * /*struct SlideShowWindow * */ Wn );
  实现事件
  void __stdcall CPowerPoint2000Addin::SlideShowBegin (IDispatch * /*struct SlideShowWindow * */ Wn )
{
 MessageBox(NULL, "SlideShowBegin", "SlideShowBegin" , MB_OK);
// return S_OK;
}
5.激活新增的事件连接点
  hr = PPTEvents::DispEventAdvise((IDispatch*)m_spApp);
  if(FAILED(hr)){
   //MessageBox(NULL, "FAILED", "FIELED", MB_OK);
  }

这样就可以了,可以点击PPT播放按钮看一下效果,是不是弹出了自己的对话框。提示,不要忘了在插件卸载的时候断开新增的连接点事件。调试的时候不要忘记把OFFICE库改成自已机器上库的相应路径及版本。
所有源码请到我的网络硬盘(http://wallimn.gbaopan.com)下载,更多信息请访问我的博客(http://wallimn.bokee.com)

- 作者: wallimn 2006年10月24日, 星期二 21:55  回复(3) |  引用(0) 加入博采

工作流OSWorkFLow自带例子修改
摘要:工作流(OSWorkFLow)的例子。 查看全文

- 作者: wallimn 2006年09月14日, 星期四 15:12  回复(5) |  引用(0) 加入博采