博文

SkinScrollBar(2008-10-18 22:06:00)

摘要:
......

阅读全文(2033) | 评论:0

一些资源(2008-05-09 15:55:00)

摘要:BOOST库的使用文档 http://www.boost.org/doc/libs/1_35_0/libs/bimap/doc/html/index.html......

阅读全文(2066) | 评论:0

VC操作Excel 删除里面sheet的方法(2008-03-30 23:14:00)

摘要:VC里可以用Excel提供的类型库来编程操作Excel表格,最近有人问及怎么删除一个sheet, 该提问者说他的代码只能删除一个空的sheet,非空的总是删不了,我以前也没操作过Excel 试了一下 ,发现是可以的,Excel提供的类型库还是瞒好用的,只要去挖掘....... 代码如下,我就不解析了,看看就懂   void COptExcelDlg::OnOK()
{
 
 _Application   app;
 if(!app.CreateDispatch(_T("Excel.Application"),NULL))
 {
  AfxMessageBox(_T( "fail2 "));
  return;
 }  app.SetVisible(FALSE);
 app.SetUserControl(FALSE);
 app.SetDisplayAlerts(FALSE);  Workbooks   books;
 books.AttachDispatch(app.GetWorkbooks());  LPDISPATCH                  lpDisp;  
 COleVariant                 vResult;
 COleVariant                 covTrue((short)......

阅读全文(6072) | 评论:1

欣赏几个VC做的漂亮时钟控件Demo(非帖图)(2008-01-19 01:28:00)

摘要:


并非贴图,全是画出来的,玻璃罩效果做的不是很好,等有时间完善了,就做得更漂亮啦^_^......

阅读全文(6407) | 评论:10

中英文url解码vc++源程序(2008-01-06 00:43:00)

摘要:其实本文是改进网络上的一篇题为“中文url解码vc++源程序”的文章,最近在做个WEB服务器,少不了处理URL,但如果IE请求的文件名是中文的或者中英混合的,那么WEB得到的URL是经过编码来的,所以要解码才能把URL还原成原文,一般都是采用UTF-8编码方式,下面是原著作者写的文章,但笔者对原著作者的程序进行了改造,纠正了原著作者的一些错误,特发此文,以飨读者,如尚发现程序尚有什么漏洞,各位网友加以纠正,我的联系方式是:liqisong611@yahoo.com.cn 原文章: 本文主要讨论中文url解码实现问题,没有详细讲解url编码,utf-8编码.想对编解码问题有更加详细的了解,请查阅相关资料
url编码:实质字符ascii码的十六进制。只是稍微有些变动,需要在前面加上"%"。比如"\",它的ascii码是92,92的十六进制是5c,所以"\"的url编码就是%5c。
UTF-8 编码是UNICODE的一种变长字符编码,由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节,而如果UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。
这里我们只需要知道utf-8对一个英文字符采用一个字节进行编码,对一个中文字符采用三个字节进行编码。现在对如下url编码进行解码实现。
url编码:MFC%E8%8B%B1%E6%96%87%E6%89%8B%E5%86%8C.chm
源代码在windows xp sp2 + vc++6.0测试通过(改进过的代码)。
#include <afx.h>
#include <iostream>
void UTF8ToGB(CString& str); void ANSIToGB(char* str,int n)
{
 ASSERT(str!=NULL); // 保证传进来的参数不能为NULL
 wchar_t szwchar = 0;
 CString  szResult,szhead = "", szend = "";

阅读全文(6217) | 评论:3

我用VC写的一个文件管理器(查找,删除,加密,解密)源代码(2007-11-03 23:37:00)

摘要:

先看几张PP先吧: 主界面:
......

阅读全文(7903) | 评论:51

一个可以防止直线走样的画线函数(2007-11-03 21:57:00)

摘要:我们知道,在VC里画直线时,如果该直线具有一定的倾斜度,那么直线会产生走样(锯齿),这要关系到光栅显示器的显示原理,具体怎么会发生走样我就不具体论述了,每本计算机图形学的书都有描述。下面提供一个画直线的算法函数,该算法具体作者不记得是谁了,我作了一些小的修改,在此提供,希望能对各位带来方便(你无须苦苦的另去研究一个算法啦^_^),直接拿去用即可。 void  CSdiView::WuLine(CDC *pDC,CPoint &pt1, CPoint &pt2,int color)
{  
 int deltax,   deltay,   start,   finish;  
 double dx,   dy,   dydx;   //   fractional   parts  
 BYTE LR,   LG,   LB;  
 int x1,   x2,   y1,  y2;  
 double d1,   d2;  
 
 x1   =   pt1.x;   y1 = pt1.y;  
 x2   =   pt2.x;   y2 = pt2.y;  
 
 deltax   =   abs(x2   -   x1);   //   Calculate   deltax ......

阅读全文(2838) | 评论:0

用socket实现自己的HTTP代理服务器(2007-11-03 21:38:00)

摘要:下面是一个先前我用socket实现HTTP代理服务器的例子,代码很简单我就不一一解析了,要注意的是:当该代理服务器收到IE发来的请求时,要将IE请求行中的webserver的域名(或者IP)剥去,再将请求转发给webserver,如果不注意这点而是直接毫无处理的把IE请求信息直接发给webserver某些网站会显示不了网页,比如新浪,pfan,这是测试时发现的,其他就没什么可以说的了。实际上能否完成这个简单的HTTP proxy server可以看出对HTTP协议的熟悉程度,只要有一定的sock编程基础并熟悉了HTTP协议的工作流程,那我想就没什么障碍了。著此文章以供初学者参考,能从里面得到一点点的帮助那我已经心满意足了,高人指点改进意见邮箱联系,下面是源代码: #include <stdio.h>
#include <iostream>
#include <string>
#include <fstream>
#include <winsock2.h>
#include <process.h>
#include "SockInit.h"
using namespace std; #define MAX_REQUEST_LEN  2048  // IE请求长度
char    szFileName[] ="2004041155.txt";  // 日志文件 CSockInit initSock; // initalize winsock CRITICAL_SECTION CriticalSection;  // 临界区对象(global variable) void __cdecl ServerThreadProc(void *param); /************************************************  调试环境:Visual C++6.0 SP6+platform SDK 2003 R2  程序名称:HTTP proxy Server(HttpProxySvr.cpp)  功能 &......

阅读全文(9256) | 评论:1

VC中使用系统提供的线程池(Thread Pooling)(2007-10-02 19:19:00)

摘要:在项目里经常用到多线程,大量的客户向服务器提出请求,这时需要开辟线程来响应客户请求,由于客户量是不可预知的,难道来一个客户请求就新开个线程来响应吗?答案是否定的,要知道开辟和撤消线程是需要耗费相当多时间和资源的,于是前辈们弄出了很多模型出来解决这种问题,其中使用线程池(Thread Pooling)是个很好的主意。线程池在Windows2000及其以后版本得到了很好的支持。使用系统提供的线程池机制相当方便而且很有效率。我们仅需要关注于我们的回调函数即可。我们可以自己来实现线程池机制,但是与我们的简单模拟来比,系统提供的线程池有着更多的优点。首先,线程池中线程的数目是动态调整的,其次,线程池利用IO完成端口的特性,它可以限制并发运行的线程数目,默认情况下,将会限制为CPU的数目,这可以减少线程切换。它挑选最近执行过的线程再次投入执行,从而避免了不必要的线程切换。系统提供的线程池背后的隐藏着巨大的策略。
下面是一个使用系统线程池的例子,这个例子的工作函数(workitem function)是这样工作的,它首先检测传进来的参数,如果是true则延时1秒,假则用compute函数循环产生一堆随机数(这里并没用到这些随机数,只是为了拖延时间^_^),使用系统提供的线程池需要用到QueueUserWorkItem这个API函数,这个函数的作用是将你自己的工作函数添加进系统线程池里面,让系统创建好的线程来执行你的工作函数,这些创建线程和撤消线程的烦琐任务根本不需要你来做,你只需维护好你自己的工作函数就OK了。
 
#include <windows.h>
#include <iostream>
using namespace std;
/***********************
使用系统线程池
Test in VC6.0
***********************/
DWORD BeginTime;
LONG  ItemCount;
HANDLE CompleteEvent;
 
int compute()
......

阅读全文(10759) | 评论:2

Win32控制台程序的定时器实现(2007-10-02 19:05:00)

摘要:在论坛上常有问及在console下能否像在MFC一样用SetTimer设置定时器,他们往往得到的回答是“不能”,或者顶多给个多媒体定时器例子你,其实win32 console程序跟一般的win 32程序并没有什么多大的区别,只是它更擅长于文本命令输入输出,一般win32程序能做的事win32 console程序也可以做到的,然而似乎初学者甚至是做了多年VC开发的的”老鸟“总是感到一阵”恐慌“,他们就开始发问了:“哪个黑黑的控制台程序也能有消息循环吗?我们能给它投递消息吗?”......... 在控制台中使用定时器不能简单的SetTimer了事,这在控制台里这种SetTimer的方式是有点麻烦的,需要自己写消息循环投递WM_TIMER消息。其实在控制台里可以使用多媒体时钟来计时: 

example: 

//启动计时器 
MMRESULT nIDTimerEvent = timeSetEvent( 
  1000,//延时1秒 
   0, 
  TimeProc, 
  0, 
  (UINT)TIME_PERIODIC); 
if( nIDTimerEvent == 0 ) 
  cout<<"启动计时器失败"<<endl; 


//回调过程(时钟到来,回调函数被系统自动调用) 
void CALLBACK TimeProc( 
  UINT uID,       
  UINT uMsg,     
  DWORD dwUser,   

阅读全文(10816) | 评论:4