博文

(转)巧借qq截图功能(2009-01-20 11:15:00)

摘要:昨天看到有一个朋友自己实现了类似QQ截图的功能,于是把QQ截图的 DLL 翻出来,简单测试了一下,发现一些不常见的小功能也许对大家有用。这里使用 RTX(腾讯的另一个软件产品) 中自带的 camerawnd.dll, 和QQ的很相似。

第一步:用 vc 自带的 DEPENDS.EXE 察看 DLL 的导出函数,有以下三个 CameraSubArea,CameraWndArea,CameraScreen   从字面意思看,第一个是截取子范围的,第二个是截取窗口范围的,第三个是截屏的现在还不知道函数参数,写个测试程序先,函数暂时认为无返回值 无参数代码如下:          typedef void (*FUN)();          HMODULE hInst = LoadLibrary(_T("CameraWnd.dll"));        if (hInst != NULL)        {               FUN pFunc = (FUN)GetProcAddress(hInst, "CameraSubArea");               if (pFunc != NULL)               {                     pFunc(); ......

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

(转)QQ 静态截图程序模拟实现(2009-01-20 11:10:00)

摘要:《QQ 静态截图程序模拟实现》 《QQ 静态截图完善实现之改造 CRectTracker 类》   参见VC知识库文章和源码    ......

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

VC 如何保存GDI图形为BMP文件(2009-01-20 11:01:00)

摘要:一、要把文本和图形保存到位图文件,只要对掌握位图结构有一定的了解,一切都ok呢。先必须要创建内存设备环境,然后内存设备环境创建的DIB区域,别忘了还要创建个CBitmap对象,CBitmap对象必须和DIB区域关联起来,把CBitmap对象选择到当前设备环境,然后在当前设备环境输出文本和图形就可以了。
二、具体实现代码如下

void CTestSaveBmpView::SaveAsBmp(CString filename)
{
 //定义图形大小
 int iWidth = 800;
 int iHeight = 600;
 int iPixel = 16;
 //图形格式参数
 LPBITMAPINFO lpbmih = new BITMAPINFO;
 lpbmih->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
 lpbmih->bmiHeader.biWidth = iWidth;
 lpbmih->bmiHeader.biHeight = iHeight;
 lpbmih->bmiHeader.biPlanes = 1;
 lpbmih->bmiHeader.biBitCount = iPixel;
 lpbmih->bmiHeader.biCompression = BI_RGB;
 lpbmih->bmiHeader.biSizeImage = 0;
 lpbmih->bmiHeader.biXPelsPerMeter = 0;
 lpbmih->bmiHeader.biYPelsPerMeter = 0;
 lpbmih->bmiHeader.biClrUsed = 0;
 lpbmih->bmiHeader.biClrImportant = 0;
 
 //创建位图数据
 HDC hdc,h......

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

驱动精灵 2008 B5.2版(2009-01-20 10:25:00)

摘要:  驱动精灵-- 一款适合绝大多数电脑用户的老牌实用软件。    驱动精灵不仅可以快速准确的检测识别您系统中的所有硬件设备,而且可以通过在线更新及时的升级驱动程序,并且可以快速地提取、备份及还原硬件设备的驱动程序。   在大大的简化了原本复杂的操作过程的同时,也缩短了操作时间,提高了效率。驱动精灵是帮助您解决繁琐的系统驱动问题的好工具,更是协助您发挥出电脑硬件最大效能的好助手。 一、超强硬件检测能力,自动智能驱动更新
  利用先进的硬件检测技术,配合驱动之家近十年的驱动数据库积累,驱动精灵2008版能够检测大多数流行硬件,并自动为您的PC下载安装最合适的驱动程序。除了替未知设备安装驱动程序,驱动精灵还能够自动检测驱动升级,随时保持PC最佳工作状态。 二、先进驱动备份技术,驱动备份轻松搞定
  对难于在网上找到驱动程序的设备,驱动精灵的驱动备份技术可完美实现驱动程序备份过程。硬件驱动可被备份为独立的文件、Zip压缩包、自解压程序或自动安装程序,系统重装不再发愁。 三、简单易用还原功能,驱动还原一键完成  
  通过驱动精灵备份的自安装驱动程序可自动完成驱动安装过程,双击即可完成硬件驱动安装。当然,你也可以通过驱动精灵的驱动还原管理界面进行驱动程序还原。 四、安全驱动卸载功能,快速清理驱动残留
  错误安装或残留于系统的无效驱动程序可能影响着操作系统的运行,使用驱动精灵的驱动卸载功能,可安全卸载驱动程序或清理操作系统的驱动残留,随时保持您的硬件最佳工作状态。 2.0.5.1110 版(2008 B5.2版) What's New: 功能改进:
1.程序再次优化,软件启动速度大幅提升,并修正某些杀毒软件误报问题。
2.完全版增加NVIDIA NF4系列芯片组集成网卡驱动。
3.修正在Windows XP环境下,NVIDIA最新显卡驱动无法通过驱动精灵安装问题,支持178.24之后版本。 *注:通过驱动精灵安装的178.24驱动并未包含物理加速驱动,如需物理加速支持,请根据驱动精灵提供的完整版驱动下载地址下载包含物理加速功能的完整驱动。   下载地址: http://www.myfiles.com.cn/soft/42/42116.htm......

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

消息反射中的难点掌握(2009-01-14 20:15:00)

摘要:在上一篇中已经提到: 在老版本的MFC中,对一些消息采用了虚函数机制,例如:WM_DRAWITEM,这样子控件就有机会控制自己的动作,代码的可重用性有了一定的提高,但是这还没有达到大部分人的要求,所以在高版本的MFC中,提出了一种更方便的机制:消息反射。通过消息反射机制,子控件窗口便能够自行处理与自身相关的一些消息,增强了封装性,同时也提高了子控件窗口类的可重用性。   通过使用消息反射宏,在调用ReflectChildNotify时,会对不同的消息有不同的处理。   例如,对于WM_CTLCOLOR,如果在父窗口中已经实现,又在子控件中实现,那么只会响应父窗口的。   而对于WM_NOTIFY,则恰恰相反,子窗口会首先处理消息,切记切记。    ......

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

分析与理解MFC消息反射机制(2009-01-14 17:49:00)

摘要: [转载] 分析与理解MFC消息反射机制收藏 前言:

我曾写过一篇文章对通知消息WM_NOTIFY进行分析,消息反射是MFC中对通知消息的处理方式,两者之间关系十分紧密,因此,我写了这篇文章,希望能够描绘出通知消息的完整印象。

消息反射的基础知识

1、消息反射解释:
  父窗口将控制子窗口发给它的通知消息,首先反射回子窗口进行处理(即给控制子窗口一个机会,让控制子窗口处理此消息),这样通知消息就有机会能被子窗口自身进行处理。

2、MFC中引入消息反射的原因:
  在Windows的消息处理中,控制子窗口的发给其父窗口的通知消息只能由其父窗口进行处理,这使得控制子窗口的自身能动性大大降低(你想,它连改变自己的背景色,处理一个自身滚动问题都要其父窗口来完成),为了解决这个问题,在MFC中引入了反射消息“Reflect Message”的概念,进行消息反射,可以使得控制子窗口能够自行处理与自身相关的一些消息,增强了封装性,从而提高了控制子窗口的可重用性。

消息反射的处理流程(不考虑OLE控制)

一、消息反射处理流程图:
  1、父窗口收到控制子窗口发来的通知消息后,调用它的虚函数CWnd::OnNotify. CWnd::OnNotify()
...{
    // 主体部分:
    if (ReflectLastMsg(hWndCtrl, pResult))    // 此时,hWndCtrl,为发送窗口,即子窗口的窗口句柄
        return TRUE;                        &nbs......

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

删除Word空行、段落合并等解决办法(2009-01-13 21:26:00)

摘要:每每复制网页上或者pdf或者其他格式到word上时,经常会碰到每一行都成为一个独自的段落,并且中间空行也特别多,还有甚者,空格也很多。笔者在长期实践中,总结了一套快速消灭这些问题的方法: 1、 对于每行独自成段(段与段中间没有空行) 每行独自成段,是因为每行后面有一个段落标记。只要去除这个标记即可。首先选中你要处理的那部分文字。然后ctrl + H弹出替换窗口,在查找内容里输入^p(段落标记),然后“替换为”空,即可完成。 2、对于段与段之间有一个空行 显然,根据上面的分析,段与段之间就有2个段落标记。那么可以采用同样的方法,不同的是,在查找内容里面输入^p^p(2个标记),然后替换为空,那么就会连接成一段;如果替换为^p,就会消除段与段之间的空行。 3、对于段与段之间存在多个空行且不规律 只能借助于宏来解决问题: Sub DelBlank()
Dim i As Paragraph, n As Integer
Application.ScreenUpdating = False For Each i In Selection.Paragraphs
If Len(i.Range) = 1 Then
i.Range.Delete
n = n + 1
End If
Next
MsgBox "共删除空白段落" & n & "个"
Application.ScreenUpdating = True
End Sub 运行后会通知你删除了多少空白段落。 4、消除空格 也是借助于替换的方法。如果你不知道空格的标记字符是什么,没有关系,在“查找和替换”对话框中有一个“高级”,“特殊字符”,即可自己定义查找。  ......

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

OpenGL与Memory DC(2009-01-13 16:15:00)

摘要:   用GDI绘图时,双缓冲是经常采用的技术。其中关键的一步,就是要先把图形绘制到内存设备环境中,然后拷贝到屏幕上。        OpenGL本身已经有双缓冲的功能了。但是因为开发需要,在采用OpenGL的绘图程序中,我还是需要首先在内存设备环境上绘制一个物体,然后保存为bmp图像。但是采用类似于GDI相似的方法,却发现图像是一片空白。     代码如下:   HBITMAP  GetObjBitmap(LPRECT lpRect, BOOL bSave, CString filename)     { // 屏幕和内存设备描述表     HDC  hScrDC, hMemDC;          // 为屏幕创建设备描述表     hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);         // 为屏幕设备描述表创建兼容的内存设备描述表     hMemDC = CreateCompatibleDC(hScrDC);   // 图像宽度和高度     int nBMPWidth,nBMPHeight;     nBMPWidth = nBMPHeight = 128;       // 图像格式参数 int iPixel = 32;     LPBITMAPINFO lpbmih = new BITMAPINFO;     lpbmih->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);     lpbmih->bmiHeader.biWidt......

阅读全文(7411) | 评论:5

Visio 统一图形尺寸的宏(2009-01-12 16:15:00)

摘要:Sub Macro1()     Dim width As String
    Dim height As String     If ActiveWindow.selection.Count = 0 Then Exit Sub     Dim shape1 As Visio.shape
    Set shape1 = ActiveWindow.selection.Item(1)     height = shape1.CellsSRC(visSectionObject, visRowXFormOut, visXFormHeight).FormulaU
    width = shape1.CellsSRC(visSectionObject, visRowXFormOut, visXFormWidth).FormulaU
   
    For i = 2 To ActiveWindow.selection.Count Step 1
    Set shape1 = ActiveWindow.selection.Item(i)
    shape1.CellsSRC(visSectionObject, visRowXFormOut, visXFormWidth).FormulaU = width
    shape1.CellsSRC(visSectionObject, visRowXFormOut, visXFormHeight).FormulaU = height
   Next End Sub......

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

AOM 神话时代 Initialization Error 初始化错误(2008-12-16 10:36:00)

摘要:  关于神话时代Initialization Error错误解决方案: 步骤一:检查显示器的刷新频率,高于85的要降低。 步骤二:检查硬件加速是否最大 步骤三:检查DirectX是否较新,9.0以上即可 步骤四:进入安全模式看是否能够运行,若能够运行,那么恢复到正常模式下,首先调低分辨率,进入游戏后,再调高分辨率。......

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