摘要: BOOL CMyEdit::OnEraseBkgnd(CDC* pDC) { // TODO: Add your message handler code here and/or call default//************************************************************************************** //取消文字复选 this->SetSel(0,0); //设置位图背景 CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP1); BITMAP bmp; bitmap.Ge 阅读全文
posted @ 2011-03-31 14:09 °ι 、曲 终 阅读(303) 评论(0) 推荐(0)
摘要: BITBLT的函数声明如下BOOL BitBlt( HDC hdcDest, // handle to destination DC int nXDest, // x-coord of destination upper-left corner int nYDest, // y-coord of destination upper-left corner int nWidth, // width of destination rectangle int nHeight, // height of destination rectangle HDC hdcSrc, // handle to so 阅读全文
posted @ 2011-03-31 14:05 °ι 、曲 终 阅读(699) 评论(0) 推荐(0)
摘要: 1、前台模拟鼠标键盘操作这里将窗口置顶,再调用模拟键鼠操作相关的API,微软提供了一个API,例如:SetWindowPos(this->GetSafeHwnd(),HWND_TOPMOST, cx, cy, 0, 0, SWP_NOSIZE);但是这个API也不能确保当前窗口就是最顶层(因为另一个程序再次调用的时候会覆盖)为了确保当前窗口在最顶层,下面是我整理后的代码,实例代码如下:激活窗口:voidCMFCDlg::OnBtnActivewindow(){//TODO:AddyourcontrolnotificationhandlercodehereCStringstrCaption 阅读全文
posted @ 2011-03-31 02:10 °ι 、曲 终 阅读(3636) 评论(0) 推荐(0)
摘要: 环境VC6/VC7, MS Platform Core SDK, IE4.0+, WinNT/2K/XP (在英文/中文/日文版的Win2k/XP 及IE6.0+SP1上测试通过)关键字Windows 钩子,IE COM 对象,Win2k 安全上下文 IE编程 工具 系统摘要本文将介绍一个工具,它不仅能偷窥各种桌面程序的密码框,还能窥到IE页面中的密码框,这个程序就是本文要介绍的——SuperPasswordSpy++。使用 Windows 钩子偷窥远程进程(或者说桌面程序)密码框内容不是太难,但要偷窥到网页上密码输入域的内容要如何做呢?显然,在网页里的密码输入框不是一个窗口,你得借助 IHT 阅读全文
posted @ 2011-03-31 02:06 °ι 、曲 终 阅读(564) 评论(0) 推荐(0)
摘要: 前言近来由于需要在自己写的程序中对注册表进行操作。总结些经验,并做个一个DEMO供日后使用,现在把它拿出来和大家分享。小弟初学VC,有误之处还请赐教。为了使用方便,我把一些操作写成了函数,以便方便调用,具体代码如下所示。定义HKEY hKey;char content[256]; //所查询注册表键值的内容DWORD dwType=REG_SZ; //定义读取数据类型DWORD dwLength=256;struct HKEY__*RootKey; //注册表主键名称TCHAR *SubKey; //欲打开注册表项的地址TCHAR *KeyName; //欲设置项的名字TCHAR *Value 阅读全文
posted @ 2011-03-31 02:05 °ι 、曲 终 阅读(214) 评论(0) 推荐(0)
摘要: 前言一日,看见我妈正在用电脑练习打字,频频低头看键盘,我想:要是键盘能发音的话,不就可以方便她养成"盲打"的好习惯吗?光想不做可不行,开始行动按键能发音,其关键就是让程序能够知道当前键盘上是哪个键被按下,并播放相应的声音,自己的程序当然不在话下,那么其它程序当前按下哪个键如何得知呢?利用键盘钩子便可以很好地解决。挂钩(HOOK)的基本原理WINDOWS 调用挂接的回调函数时首先会调用位于函数链首的函数,我们只要将自己的回调函数置于链首,该回调函数就会首先被调用。那么如何将我们自己的回调函数置于函 数链的链首呢?函数SetWindowsHookEx()实现的就是该功能。我们首 阅读全文
posted @ 2011-03-31 02:04 °ι 、曲 终 阅读(321) 评论(0) 推荐(0)
摘要: 网上有一篇关于这个问题的文章,题目叫《防止全局钩子的侵入》,作者不祥。文中简单分析了一下钩子的原理,然后使用了微软的Detours库进行 API拦截。如果只是为了拦截一个函数,使用Detours好像有点儿浪费。本文不使用Detours库,直接对LoadLibraryExW函数进行拦截。先说一下全局钩子是怎么进入到我们的程序里来的。假如有个程序A安装了WH_GETMESSAGE的全局钩子,钩子函数在B.dll中,那么当其它程 序在调用GetMessage函数从自己的消息队列中取消息的时候,系统发现程序A安装了WH_GETMESSAGE的全局钩子,就会检查调用 GetMessage的进程是否加载了 阅读全文
posted @ 2011-03-31 02:04 °ι 、曲 终 阅读(789) 评论(0) 推荐(0)
摘要: 说明注册表是Windows重要组成部分,注册表记录了大量有关电脑软硬件的信息。注册表中的值通过其名称标识。值名称由与键名相同的字符组成。值本身可以是字符串、二进制数据或者是32位无符号值。在这里我们主要运用以下技巧:预定义的注册表键注册表包含了几个预定义键:HKEY_LOCAL_MACHINE 包含描述计算机及其配置的条目。其中包括关于处理器、系统主板、内存和已安装的软件和硬件的信息。 HKEY_CLASSES_ROOT 是与文档类型和 OLE\COM 相关的信息的支持键。这个键是 HKEY_LOCAL_MACHINE的从属键。 HKEY_USERS 用作默认用户首选设置,也作为单个用户的首选 阅读全文
posted @ 2011-03-31 02:04 °ι 、曲 终 阅读(286) 评论(0) 推荐(0)
摘要: 要杀掉某个程序的进程,可以输入下面的命令便可以杀死其运行实例:tskill 程序名 但是我想在自己写的代码里实现tskill的功能该如何做呢?最安全的杀死进程的方法是向运行程序的主窗口发送WM_CLOSE消息。HWND hwnd = // 获得主窗口PostMessage(hwnd, WM_CLOSE, 0, 0); 发送此消息后,通常应该等待直到进程确实终止:HANDLE hp = OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE,FALSE,pid);WaitForSingleObject(hp, 5000); // 等待5秒 当进程终止时,它发出状态信号 阅读全文
posted @ 2011-03-31 02:01 °ι 、曲 终 阅读(374) 评论(0) 推荐(0)
摘要: 首先, 调用 CreateToolhelp32Snapshot() 获得当前运行进程的快照,这个函数返回包含正在运行进程的快照句柄。其原形是:HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags,DWORD th32ProcessID);其中:dwFlags表示要包含在快照的内容为TH32CS_SNAPPROCESS表示在快照中包含进程列表;th32ProcessID是进程号,为0表示当前进程。返回值是一个句柄,如果没有进程正在运行,则返回INVALID_HANDLE_VALUE(可用GetLastError()获得),反之可用获取返回的进程 阅读全文
posted @ 2011-03-31 02:01 °ι 、曲 终 阅读(265) 评论(0) 推荐(0)
摘要: 问题的提出实际上所有线程都是用来处理C函数的,而不是C++类成员函数。标准库中提供一个API函数,这个函数以回调函数指针作为线程的执行代码并在单独的线程中 调用回调函数。问题是在这样的线程库中不能创建执行对象成员函数的线程;只能使用普通的函数。因此,下列代码是失败的:// 启动线程库函数的线程int thr_create (void (*pf)(), void* prm, thread_t* pth);#include "class1.h"int func (void *param ){thread_t t1;// 下列调用导致编译器错误: "Cannot con 阅读全文
posted @ 2011-03-31 02:00 °ι 、曲 终 阅读(468) 评论(0) 推荐(0)
摘要: 在WIN32下,实现程序互斥运行的方法有很多种,我简单分析以下几种不同的实现:在VC下的实现Visual C++ 是WIN32编程最主要也是最强大的编程工具这一,引用一名话来说VC就是“只有你想不到的,没有VC做不到的”。废话少说,下面看看用VC是如何这个功能。使用编译器来实现(使用MFC框架)在.cpp文件开头加上以下几行:#pragma data_seg("Shared") int volatile g_lAppInstance =0;#pragma data_seg()我们来看一下上面的内容:第一句 #pragma data_seg("Shared" 阅读全文
posted @ 2011-03-31 02:00 °ι 、曲 终 阅读(737) 评论(0) 推荐(0)
摘要: 第一步创建一“MFC AppWizard (dll)”工程,接下来选择“Regular Dll using shared MFC DLL”,点击“Finish”。添加一对话框资源到工程中,从菜单中选择Insert->Resource,添加一“Dialog”,选择“New”,至此对话框已添加到DLL工程中。为对话框添加一新类,如:CTest,基类为CDialog。在MFCDLL.cpp中(因创建的工程为MFCDLL)添加接口函数:extern "C" __declspec(dllexport) void Show(){ AFX_MANAGE_STATE(AfxGetSt 阅读全文
posted @ 2011-03-31 01:56 °ι 、曲 终 阅读(285) 评论(0) 推荐(0)
摘要: 什么是LuaLua是具有简单数据描述的扩展编程语言(动态解析语言)。它提供了非常好的面向对象编程, 函数式编程(functional programming),数据驱动式编程(data-driven programming), 它可以作为一个强大、轻量的脚本语言,供任何需要的程序使用。 Lua 以一个用 clean C 写成的库形式提供。(所谓 Clean C ,指的 ANSI C 和 C++ 中共通的一个子集)Lua例子(FOR 循环)for i=1,10 do -- the first program in every language io.write("Hello world 阅读全文
posted @ 2011-03-31 01:54 °ι 、曲 终 阅读(861) 评论(0) 推荐(0)
摘要: 数组的指针、指针数组以及指向指针的指针考虑数组的指针的时候我们要同时考虑类型和维数这两个属性。换一句话,就是说一个数组排除在其中存储的数值,那么可以用类型和维数来位置表示他的种类。一维数组在c和c++中数组的指针就是数组的起始地址(也就第一个元素的地址),而且标准文档规定数组名代表数组的地址(这是地址数值层面的数组表示)。例如:int a[10];int *p;p=&a[0]//和p=a是等价的。因为a是数组名,所以他是该数组的地址,同时因为第一个元素为a[0],那么&a[0]也代表了该数组的地址。但是我们是不是就说一个数组名 和该数组的第一个元素的&运算是一回事呢?在 阅读全文
posted @ 2011-03-31 01:52 °ι 、曲 终 阅读(273) 评论(0) 推荐(0)
摘要: 概述前几天要做一段程序,把文字和位图图像合成并保存为位图文件。但问了好久都没人给一个满意的答复,只好在黑暗中摸索,费了一番功夫,实现了图像与文字的合成,并且可用鼠标拖动文字。现在我把代码贴出,希望能给需要的朋友以帮助。关键函数int SetDIBits( HDC hdc, // 兼容DC的句柄 HBITMAP hbmp, // 兼容位图的句柄 UINT uStartScan, // 扫描起始行的编号 UINT cScanLines, // 扫描的行的数目 CONST VOID *lpvBits, // 位图缓冲区的指针,要求已经分配空间 CONST BITMAPINFO *lpbmi, // 阅读全文
posted @ 2011-03-31 01:49 °ι 、曲 终 阅读(276) 评论(0) 推荐(0)
摘要: 摘要包含透明色的位图的绘制方法有多种,最简单的方法是调用现成的函数:TransparentBlt,也可以通过自己的代码实现类似 TransparentBlt的功能,实现过程也有两种形式,一种是事先做一张掩码位图,另一种是动态生成掩码位图。本文将介绍动态生成掩码位图绘制具有 透明区域位图的方法。TransparentBlt 函数的使用TransparentBlt 函数在Windows98/Windows2000以上版本运行,系统中需要包含 Msimg32.dll,使用时可以链接 Msimg32.lib。Windows98下的TransparentBlt会产生资源泄漏,所以不建议在WIN98下使用 阅读全文
posted @ 2011-03-31 01:48 °ι 、曲 终 阅读(245) 评论(0) 推荐(0)
摘要: 我们经常在AboutBox中显示一幅关于公司或自己讯息的位图,有没有想过让这幅位图有更酷的效果?比如加上淡入淡出效果?只要有了这个CAlphaCtrl控件就可以轻松实现。CAlphaCtrl是从CStatic继承而来。使用时只要把CalphaCtrl加入窗体,然后调用LoadAlphaBitmap(UINT uID, int iTimer)函数就可以实现位图的淡入淡出。其中uID是位图的资源ID,iTimer是位图显示时间间隔,值愈小显示愈快。下面就来说一说CalphaCtrl是如何实现的。关键的一个实现函数是一个win32 API: AlphaBlend,此函数可以实现图像的透明显示,相关的 阅读全文
posted @ 2011-03-31 01:46 °ι 、曲 终 阅读(341) 评论(0) 推荐(0)
摘要: 个类可以插入到任何一个程序当中,它提供一个统一的接口,接口函数接收图象的资源索引号、长、宽3个参数。当然,你也可以加上一个父窗口的指针参数,用来决定该类对象Create行为,便于指定该图象代表的窗口应该依附在哪个父窗口之上。编写这个类需要熟悉对CRgn类的运用。如成员函数CombineRgn和SetWindowRgn,具体信息请查阅msdn。那么好,下面我们来一步步创建这个类。首先要准备一幅用来展示在UI上的图象,自己定义一种透明色,用该色来填充透明部分,这里要注意的是,透明色应该是该图象中颜色最少的色,还要注意的是透明和非透明的交界处一定要求清晰,不能存在过渡色。这里我使用的是RGB(255 阅读全文
posted @ 2011-03-31 01:44 °ι 、曲 终 阅读(269) 评论(0) 推荐(0)
摘要: 实现方法要把文本和图形保存到位图文件,只要对掌握位图结构有一定的了解,一切都ok呢。先必须要创建内存设备环境,然后内存设备环境创建的DIB区域,别忘 了还要创建个CBitmap对象,CBitmap对象必须和DIB区域关联起来,把CBitmap对象选择到当前设备环境,然后在当前设备环境输出文本和 图形就可以了。具体实现代码如下void CTestSaveBmpView::SaveAsBmp(CString filename){ //定义图形大小 int iWidth = 800; int iHeight = 600; int iPixel = 16; //图形格式参数 LPBITMAPINFO 阅读全文
posted @ 2011-03-31 01:43 °ι 、曲 终 阅读(356) 评论(0) 推荐(0)
摘要: 下载文件:http://files.cnblogs.com/rogee/QQ%E9%9D%99%E6%80%81%E6%88%AA%E5%9B%BE%E7%A8%8B%E5%BA%8F%E6%A8%A1%E6%8B%9F%E5%AE%9E%E7%8E%B0.rar看到QQ这样的截图实在忍心不住想,是怎以实现的?想了许久想到一个实现法子,下面就让我给大家展示一下,模拟QQ静态模拟截图,我写的代码比较乱, 是想到哪写到哪,我想肯实还有比这更简单的办法!!程序实现思路,程序是基于对话框,无标题栏,系统菜单,最小化框,最大化框,无边框....,程序初始 化时,把整个桌面屏幕截图,保存下来,然后把对话框 阅读全文
posted @ 2011-03-31 01:38 °ι 、曲 终 阅读(316) 评论(0) 推荐(0)
摘要: 些日子,我在做程序中遇到这样一个问题,要用树型控件快速浏览指定文件夹中的文件,经过一番周折,终于做出来了,想到有些仁兄可能遇到和我相同的困难,所以将我的做法写出来,希望对大家有些帮助!基本原理是用了函数的递归调用,再加入参数跟踪。我在调试程序的时候,跟踪发现:程序只有在遍历完一个目录下所有子目录后,才返回同级的目录。这样便可以用参数的值来决定目录的层次。首先,在对话框上添加树型控件,选择Style中Has Buttons、Has Lines、Lines At Root。定义变量:HTREEITEM strRoot; //根目录HTREEITEM strHTFir; //第一层HTREEITEM 阅读全文
posted @ 2011-03-31 01:30 °ι 、曲 终 阅读(427) 评论(0) 推荐(0)
摘要: 概述操作系统一般都提供了文件搜索的功能,但采用的是顺序搜索,搜索效率很底。而且按此法编程十分烦琐,在目录层次很多时,往往不好处理。本文采用多线程技术实现文件的快速搜索,代码量很少,执行效率极高。其基本思想其实很简单,就是找到一个目录就开辟一个线程,文件的话当然在线程内就处理了。这样实现了同步搜索,速度当然快起来了。VC具体实现搜索用到两个win32的两个函数HANDLE FindFirstFile(LPCTSTR lpFileName,LPWIN32_FIND_DATA lpFindFileData );BOOL FindNextFile( HANDLE hFindFile, LPWIN32_ 阅读全文
posted @ 2011-03-31 01:29 °ι 、曲 终 阅读(350) 评论(0) 推荐(0)
摘要: 基本组成思想其实,其中的构成思想非常简单。建立一个新的二进制文件,先写入你的捆绑程序的数据和其文件长度,再写入你要捆绑的第一个文件的数据和其文 件长度,后再直接写入你要捆绑的第二个文件的数据和文件长度,最后就可直接写入你要捆绑的最后一个文件的数据(不需其文件长度)。最终文件被执行时, 也就是将上面的方法思想倒过来既可。下面实例仅告诉你如何实现二个文件的捆绑,至于多个文件的捆绑,读者只需略加改动既可,详情请细看下载后的实例代码。下面我来讲讲如何具体将其来实现。捆绑多个文件为一个可执行程序先得到自身捆绑程序的文件长度和第一个要捆绑文件的文件长度,枚举第一个要捆绑文件有无图标,有的话就用它做为最终生 阅读全文
posted @ 2011-03-31 01:28 °ι 、曲 终 阅读(695) 评论(0) 推荐(0)
摘要: 译者按本文译自 Alex Tilles 在Windows Developer Network(2003 第12期)发表的一篇文章:“Writing Your Own Install and Uninstall Code”。这是一篇具有一定技术含量的文章,相信许多开发人员都需要本文介绍的技术,其中包括几个重要的技术点:Rundll32.exe 实用程序的使用方法;DLL 或 EXE 的自删除技术;嵌入资源的处理技巧;LZCOPY API 使用示范;compress.exe,expand.exe 使用说明;摘要我一直想写一个自己的安装和卸载代码,主要目的是想随心所欲地控制整个安装/卸载过程中 用户 阅读全文
posted @ 2011-03-31 01:27 °ι 、曲 终 阅读(625) 评论(0) 推荐(0)
摘要: 你也许会遇到到这样一个问题?当你有一个较大的软件,而无法用一张软盘将其全部拷下时,你也许会想 到该将它分解开,分盘拷回去后,再将它们合并起来。现在的这种分割工具很多,你想自己动手做一个适合自己的分割工具么?下面就让我用以前用VC做的一个<袖珍文件分割器>的例程来告诉你吧!程序运行后界面如下:基本构成思想:文件分割的基本思想比我之前发表的另一篇文章《如何将多个文件合并为一个可执行程序》的 构成思想简单多了,它主要也分为分割文件和合并分割后的文件二大部分。分割文件,将原文件按指定分割大小进行等分,然后顺序读取其指定分割大小数据后到写 到各自的新建文件中。合并文件,将各分割后的文件顺序读 阅读全文
posted @ 2011-03-31 01:27 °ι 、曲 终 阅读(810) 评论(0) 推荐(0)
摘要: 概述本文介绍利用内存映射文件修改大文件:在大文件内存前加入一段数据,若要使用内存映射文件,必须执行下列操作步骤:创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件;创建一个文件映射内核对象,告诉系统该文件的大小和你打算如何访问该文件;让系统将文件映射对象的全部或一部分映射到你的进程地址空间中;当完成对内存映射文件的使用时,必须执行下面这些步骤将它清除:告诉系统从你的进程的地址空间中撤消文件映射内核对象的映像;关闭文件映射内核对象;关闭文件内核对象;下面将用一个实例详细介绍这些操作步骤,(本实例的目的就是将一个文件A其内容前面加入一些内容存入文件B,我想大家在程序开发当中 阅读全文
posted @ 2011-03-31 01:25 °ι 、曲 终 阅读(341) 评论(0) 推荐(0)
摘要: 序论我曾发表过文件输入输出的文章,现在觉得有必要再写一点。文件 I/O 在C++中比烤蛋糕简单多了。 在这篇文章里,我会详细解释ASCII和二进制文件的输入输出的每个细节,值得注意的是,所有这些都是用C++完成的。ASCII 输出为了使用下面的方法, 你必须包含头文件<fstream.h>(译者注:在标准C++中,已经使用<fstream>取代<fstream.h>,所有的C++标准头文件都是无后缀的。)。这是 <iostream.h>的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, <iostream.h> 已经被<f 阅读全文
posted @ 2011-03-31 01:25 °ι 、曲 终 阅读(327) 评论(0) 推荐(0)
摘要: 关键字临时文件 通配符 递归 查找文件 文件夹选择对话框 INI文件正文VC产生的临时文件有时真的很烦人!当你编译一个程序,突然系统弹出一个对话框:“D盘已经没有足够的空间,请问需要进行磁盘清理吗 ”,而它只能清掉了Nkb的东东,你有什么理由不自己写一个专门清理VC垃圾的小工具呢?隔一段时间运行一次,彻底清除指定类型的垃圾文件:干干净净,中国人,奇强!很明显,这个程序的核心代码肯定是一个有通配符的功能的递归查找文件的函数。我的想法是先查找给定目录下的所有符合条件的文件,再递归查找下级文件夹 下所有符合条件的文件。为了保证其封闭性,我用了一个 CStringList& 变量来保存搜索结果 阅读全文
posted @ 2011-03-31 01:24 °ι 、曲 终 阅读(415) 评论(0) 推荐(0)
摘要: 概述大多数 C++ 程序员都熟悉不止一个文件 I/O 库。首先是传统的 Unix 风格的库,它由一些低级函数如 read() 和 open()组成。其次是 ANSI C 的 <stdio.h> 库,它包含 fopen() 和 fread()等函数。其它的还有一些具备所有权的库或框架,比如 MFC,它有很多自己的文件处理类。这些库一般都很难跨平台使用。更糟的是,上述提到的 C 库由于其程序接口的原因,在很大程度上强制程序员进行某些处理,而且缺乏类型安全支持。标准 C++ 提供提供了一个增强的、面向对象的、具有国际化意识的 <fstream> 库。这个库包含一系列派生于标准 阅读全文
posted @ 2011-03-31 01:24 °ι 、曲 终 阅读(401) 评论(0) 推荐(0)
摘要: 基于对话框的程序中,每次按下回车键时,程序都退出。去掉按钮的 BS_DEFPUSHBUTTON 属性并重写OnOK函数也没用。那么如何定制回车键的行为呢?这个问题很easy,但是要说明白,却要费点时间。这个问题在Windows的开发中由来已久,对于初学者来说,这是个恼人的问题,幸运的是,人们找到了多种解决这个问题的方案。本文将告诉你定制回车键行为的方法。如果你想要disable回车键,最简单的方法是重载OnOK函数,这固然是个不坏的主意,但如果你重载OnOK,让它什么事情也不干,那麽当用户用鼠标 按下回车键想真正做些什么的时候怎么办呢?你可以改变回车键的ID,如:ID_MY_OK,并写一个调用 阅读全文
posted @ 2011-03-31 01:23 °ι 、曲 终 阅读(264) 评论(0) 推荐(0)
摘要: 在Visual Studio 6.0中出现了一个新类CHtmlView,利用这个类,我们可以实现在对话框的控制中显示HTML文件。 要想使用CHtmlView类,对它的定义和实现就必须有全面深入的理解。我们不妨拿CHtmlView和CListView做一个比较,通过比较这两个 类,我们会发现一些有趣的差别。首先,MFC中CListView有一个对应的CListCtrl类,而CHtmlView却没有一个CHtmlCtrl 类与之对应;其次,CListView的使用依赖于MFC的文档/视结构,而CHtmlView的实现是基于COM的。通过IWebBrowser2接口 来实现,而且IWebBrows 阅读全文
posted @ 2011-03-31 01:21 °ι 、曲 终 阅读(505) 评论(0) 推荐(0)
摘要: 本文旨在示范在对话框的按钮上(或其它控制上)使用单独的鼠标指针。Windows编程中有两种方法改变指针:一种是当应用的主窗口类注册时,为 WNDCLASS结构提供一个全程光标指针(HCURSOR),另外一种方法是在程序中处理WM_SETCURSOR消息来设置鼠标光标。标准的MFC应 用程序使用第一种方法自动在主窗口注册时将光标指针设置为一个箭头。如果要改变光标指针,则可以通过在主窗口或子窗口中重载消息WM_SETCURSOR 的处理函数来重新设置鼠标指针。// handle WM_SETCURSOR in button class BOOL CMyButton::OnSetCursor(CWn 阅读全文
posted @ 2011-03-31 01:21 °ι 、曲 终 阅读(459) 评论(0) 推荐(0)
摘要: 我曾看到一介绍如何按非客户区移动窗体,既重载WM_NCHITTEST,返回HTCAPTION。但我认为有一点不妥就是没有了鼠标右键功能。这里我介绍一种方法,即可已在客户区移动窗体又可以实现鼠标右键功能。新建一工程DLG。采用默认设置。添加消息处理函数:void CDlgDlg::OnLButtonDown(UINT nFlags, CPoint point) { PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,pointy)); CDialog::OnLButtonDown(nFlags, point);}添加右键功能。已实现 阅读全文
posted @ 2011-03-31 01:19 °ι 、曲 终 阅读(223) 评论(0) 推荐(0)
摘要: 在基于MainFrm程序中加入DialogBar很方便,大家都知道,DialogBar有着工具条无法比拟的优越性,它可以任意放置控件,轻松实现如WPS OFFICE的导航功能。但是在基于Dialog的程序怎么实现这种导航功能呢?本文拟针对这个问题提出解决的办法,将困扰本人很久的问题的解决方法和大家一同分享。大家都知道,CDialogBar不能在Dialog程序中产生的原因是Dialog中没有MainFrm,所以我就从CMiniFrameWnd产生了自己的一个类CMyMiniFrm。BOOL CMyMiniFrm::OnCmdMsg(UINT nID, int nCode, void* pExt 阅读全文
posted @ 2011-03-31 01:18 °ι 、曲 终 阅读(410) 评论(0) 推荐(0)
摘要: 很多人都想在程序中实现 avi 控制。本文将一步一步教你如何在一个基于对话框的程序中添加 avi 动画控制(CAnimateCtrl)。其实只要知道了方法,整个过程很简单。图一是本文例子程序运行画面,这个程序用到了表示文件拷贝的avi动画。下面就来看看具体实现方法。在对话框资源编辑器中打开对话框,添加一个动画控件(Animate)。 然后进入类向导“Class Wizard”为刚才添加的这个控件定义一个变量,假设变量名为:CAnimate m_avi。注意变量的种类(Category)选择“Control”。这个定义会自动添加在.h文件中。接下来,我们要将.avi文件引入工程。方法是在工程的资 阅读全文
posted @ 2011-03-31 01:17 °ι 、曲 终 阅读(318) 评论(0) 推荐(0)
摘要: 很多基于对话框的程序都有一个启动画面,那么如何为自己的对话框程序也加一个这样的画面呢?本文将一步一步教你实现每一个细节。其实VC++开发环境中有 一个现成的 Splash Screen 组件,用这个组件很容易实现基于框架类(也就是CMainFrame)的程序的启动画面,那么如果是对话框程序,没有框架类怎么办呢?所以这个组件功能不 是想象的那么强。要实现基于对话框应用程序的启动画面必须另辟蹊径。本文将定制一个C++类:CSplashWnd,用这个类可以增强原来的 Splash Screen 组件功能。它不但可以在用于具有CMainFrame的程序,同时也可以用于基于对话框应用的程序。 CSpla 阅读全文
posted @ 2011-03-31 01:16 °ι 、曲 终 阅读(238) 评论(0) 推荐(0)
摘要: 相信很多人在VC下开发程序的时候大多都会采用基于对话框的开发吧,我也不例外,大多数的小型测试程序没有必要开发基于文档/视图的结构来测试,只要使用一些基本的对话框程序就可以达到这个目的 。但是在开发基于对话框的程序时,要使用到一些 Spy++ 的功能检测的时候,就会出现一些问题。什么问题呢?当我使用 Spy++ 去检测一个对话框的窗口类 时,并想得到一个对话框的窗口类,以便我在使用钩子的时候可以指定一个对话框进行 hook,但是结果出乎我意料之外 ,对话框的窗口类不是我在注册时所指定的对话框窗口类名。其类名是 "#32770(Dialog)",这是一个MFC自动为基于对话框的 阅读全文
posted @ 2011-03-31 01:15 °ι 、曲 终 阅读(429) 评论(0) 推荐(0)
摘要: 最近有个朋友做了一个基于对话框的小程序,大家知道,一般具有用户界面的 Windows 程序运行起来后,通常都会在任务栏里体现出来。我的这个朋友不想让她做的对话框程序运行的时候显示在任务栏里。问我如何隐藏?我参考了 MSDN 后告诉她说使用 WS_EX_TOOLWINDOW 扩展窗口式样。她按照我说的方法试了一下,结果没有成功。后来我琢磨了半天,发现这件事情并不像文档中说的那么简单。MSDN 里对 WS_EX_APPWINDOW 的描述是这样的: 用 WS_EX_TOOLWINDOW 可以创建一个工具窗口,被作为浮动工具栏使用。工具窗口的标 题栏比常规标题栏短,并且使用的窗口字体更小。工具窗口不 阅读全文
posted @ 2011-03-31 01:12 °ι 、曲 终 阅读(567) 评论(0) 推荐(0)
摘要: 实现方法采用将动态连接库注入到其他进程中的方法来实现。为了便于选择窗口,我借用了另一个程序"2000下显示带*号"来选择窗口。如果要在98下实现你可用钩子同样实现。程序运行界面如下图:将动态连接库注入其他进程的代码如下:BOOL WINAPI RT_CTRL_BTN(LPCSTR lpszLibFile, HWND hWnd, DWORD dwID, LPRECT pRtBtn, LPCTSTR szCaptionBtn){ try { DWORD dwProcessID; GetWindowThreadProcessId(hWnd, &dwProcessID); 阅读全文
posted @ 2011-03-31 01:11 °ι 、曲 终 阅读(380) 评论(0) 推荐(0)
摘要: 简介象flashget、迅雷、BT等都有浮动窗口,能详细地显示下载的详细信息,该类型的窗口有一下几个特点:窗口无标题栏,窗口的大小跟位图一样 大。前端显示。在客户区内按下鼠标左键可以随意拖动窗口的位置。可以改变窗口的透明度。双击可以将主窗口激活,并显示。下面就该类型窗口 的各个功能实现予以说明。代码的详细说明窗口无标题栏,窗口的大小跟位图一样大。建立一个对话框资源,设置为POPUP类型,并取消Title Bar属性。在上面插入一个图片控件,设置为导入的位图。 //得到位图 CBitmap m_Bitmap; HBITMAP hBitmap = m_Logo.GetBitmap(); ASSER 阅读全文
posted @ 2011-03-31 01:10 °ι 、曲 终 阅读(228) 评论(0) 推荐(0)
摘要: FC中基于SDI和MDI的程序,默认情况下有快捷键资源,直接建立快捷键与消息的映射,就能实现程序的快捷键,而基于对话框的程序默认情况下没有快捷键资源,鉴于网友问到这个问题,下面我就分别用两种方法来实现。一是在PreTranslateMessage函数中,判断键盘的按键消息,比如快捷键是Ctrl + Q,我们就检测按键消息的Ctrl键和Q是否同时按下就可以了。//用PreTranslateMessage的方法,判断Ctrl+Q是否按下,按下就执行快捷键对应的操作if(pMsg->message == WM_KEYDOWN && pMsg->wParam == ' 阅读全文
posted @ 2011-03-31 01:07 °ι 、曲 终 阅读(489) 评论(0) 推荐(0)
摘要: 前段时间一直在想怎么样能让窗口变得更漂亮一点,更加吸引人呢?在网上也看到了不少高手们的做法,但对于我这种不喜欢太复杂的人来说,我不是很喜欢那 样写代码,GetSystemMetrics函数来得到各个边框的长度或宽度。。。。没几下,我的头就晕了,在查了许多资料以及实验后,我终于找到了一种 比较简单的美化窗口的方法,现在就拿出来献丑一下,觉得不好的就请跳过去吧。大家请看下面这张图:其实这张图已经很直观的表达了窗口内部的布局,有了这张图你觉得美化窗口还难吗?想怎么好看就可以怎么好看….<注:这张图是从网上搜索得来,十分感谢此作者,为我们提供了方便,在这里我只是拿这张图做一下参考>//取得 阅读全文
posted @ 2011-03-31 01:05 °ι 、曲 终 阅读(403) 评论(0) 推荐(0)