MFC/API/C++/C
文章平均质量分 66
movayhust
这个作者很懒,什么都没留下…
展开
-
堆和栈的区别
在计算机领域,堆栈是一个不容忽视的概念,但是很多人甚至是计算机专业的人也没有明确堆栈其实是两种数据结构 。 堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。 要点: 堆:顺序随意 栈 :后进先出(Last-In/First-Out)堆和栈的区别 一、预备知识 —程序的内存分配 一个由c/C++ 编译的程序占用的内存分为以下几转载 2009-08-05 12:59:00 · 397 阅读 · 0 评论 -
利用底层键盘钩子拦载任意按键(回调版)
前段时间我曾经写过一篇《利用底层键盘钩子屏蔽任意按键》,并放到了我的blog上。这篇文章的题目中把“屏蔽”改成了“拦截”,显然要比以前的版本强一 些了。对于以前写的那个DLL,有一个不够理想的地方,就是仅仅能实现屏蔽。如果想在屏蔽之前加入一些“小动作”,就只能修改DLL,在 LowLevelKeyboardProc函数中添加代码,实现新的功能。但这样显然不够灵活,这样的DLL也不具备一般性了。所以转载 2009-08-13 14:57:00 · 680 阅读 · 0 评论 -
虚拟键值表
虚拟键十六进制值十进制值相应键盘或鼠标键VK_LBUTTON011鼠标左键VK_RBUTTON022鼠标右键VK_CANCEL033Ctrl-Break键VK_MBUTTON044鼠标中键VK_BACK088Backspace键转载 2009-08-12 18:18:00 · 6480 阅读 · 3 评论 -
修改按键的回调钩子函数
修改按键回调钩子函数,经过一天的查资料,终于解决了按键按下和按键弹起时响应两次的问题。 LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam){ KBDLLHOOKSTRUCT* pStruct = (KBDLLHOOKSTRUCT*)lParam; if (nCode == HC原创 2009-08-13 15:00:00 · 726 阅读 · 0 评论 -
RegisterHotKey()实现Alt+E的快捷键组合功能
有的程序需要自定义组合键完成一定功能,如何实现? [解决方法] RegisterHotKey函数原型及说明: BOOL RegisterHotKey( HWND hWnd, // 接收WM_HOTKEY的窗口句柄 int id, // hot key的ID号.转载 2009-08-15 21:25:00 · 807 阅读 · 0 评论 -
VC++6.0中实现将应用程序的图标加入到Windows的系统托盘中
摘要 本文对如何将应用程序的图标加入到Windows的系统托盘中做了较为详细的介绍,然后给出了一个C++类以方便的实现该功能,并在VC++6.0中给出了一个应用程序实例来体现其具体实现过程。同时该应用程序实例还讲解了如何在托盘中实现动画图标以及在程序中关闭计算机的技术。 关键词:系统托盘 动画图标 Windows98桌面的系统托盘位于任务栏的右侧,即Windows98桌面的右下方。它常用来显示一些转载 2009-08-15 16:38:00 · 948 阅读 · 0 评论 -
GetModuleFileName函数
在开发软件的过程里,经常需要把数据保存到当前执行文件路径下面,或者读取当前执行文件路径下的一些配置信息。这时就需要从当前模块里获取所在的目录路径,以便进行固定的位置操作文件。要解决这个需求,就需要调用API函数GetModuleFileName来获取模块所在的路径。函数GetModuleFileName声明如下:WINBASEAPIDWORDWINAPIGetModuleFil转载 2009-08-15 19:08:00 · 476 阅读 · 0 评论 -
GetClientRect与GetWindowRect的区别
GetClientRect 函数功能:该函数获取窗口客户区的坐标。客户区坐标指定客户区的左上角和右下角。由于客户区坐标是相对子窗口客户区的左上角而言的,因此左上角坐标为(0,0) 函数原型:BOOL GetClientRect(HWND hWnd,LPRECT lpRect); 在Visual Studio 2005中,该函数的原型为 void GetWindowRect(LPRECT原创 2009-08-14 15:02:00 · 1847 阅读 · 0 评论 -
在属性框中添加其他按钮
BOOL CMyPropertySheet::OnInitDialog() { BOOL bResult = CPropertySheet::OnInitDialog(); // TODO: Add your specialized code here CRect rect, tabrect; int width; //Get button sizes and positions GetD原创 2009-08-15 16:50:00 · 413 阅读 · 0 评论 -
CToolTipCtrl
CToolTipCtrlCObject └CCmdTarget └CWnd └CToolTipCtrlCToolTipCtrl类封装了一个“工具提示控件”的性能。工具提示控件是一个小的弹出窗口,它用来显示一行描述应用程序中的一个工具的目的的文本。一个“工具”可以是一个窗口,比如说一个子窗口或控件,或者是一个窗口的原创 2009-08-22 14:34:00 · 3968 阅读 · 2 评论 -
VC控件——CToolTipCtrl的用法
很多的界面设计都需要有Tip提示,下面描述一下Tip的简单使用方法:1. 首先要New一个CToolTipCtrl的对象m_pContentTip2. 调用CToolTipCtrl的create函数,指定其父窗口。可以为某个控件,也可以为this。一般设为this。 m_pContentTip->Create( this, TTS_ALWAYSTIP );3. AddTool。转载 2009-08-22 15:34:00 · 1842 阅读 · 1 评论 -
GDI+在VC6中的配置步骤
1.下载(GDI+ for VC6.0 SDK)GDIPlus文件将其中的Includes和Lib中的文件拷到vc目录下的Includes和Lib文件夹中. 下载地址:http://www.codeguru.com/code/legacy/gdi/GDIPlus.zip(引用他人的)2.在你将要使用GDI+的工程中,完成初始化工作:在StdAfx.h中加入#define ULONG_PT转载 2009-08-28 17:22:00 · 619 阅读 · 0 评论 -
TrackMouseEvent函数实现鼠标停留响应
TrackMouseEvent函数实现鼠标停留响应 TrackMouseEvent函数在鼠标离开某一窗口或在某一窗口上停留超过某一特定时间长度时发送消息。原型:BOOL TrackMouseEvent(LPTRACKMOUSEEVENT lpEventTrack);参数: lpEventTrack:是一个指向TRACKMOUSEEVENT结构体的指针。返回: 成功的话返回转载 2009-08-29 13:39:00 · 961 阅读 · 0 评论 -
捕捉鼠标停留WM_MOUSEHOVER和离开WM_MOUSELEAVE消息
捕捉鼠标停留WM_MOUSEHOVER和离开WM_MOUSELEAVE消息当鼠标停留在程序窗口一定时间后,会产生一个WM_MOUSEHOVER消息;当鼠标离开程序窗口后,会产生一个WM_MOUSELEAVE消息。鼠标离开程序窗口的消息一般很少用,想了半天也想不到在什么情况下会用到这个消息。到是鼠标停留消息会经常用到,比如需要对程序中的某些操作进行提示时,就需要用到WM_MOUS转载 2009-08-29 14:48:00 · 5904 阅读 · 2 评论 -
玩转keybd_event
模拟键盘平时不是很常用, 但是当调用某些快捷键执行某项功能时, 它真的是那么的方便呀. 你不信? 看看下面的实现, 你就会大呼: 为什么不早点告诉我? 呵呵, 原来没有blog呀, 都靠这些挣分呢.1) 显示桌面:很多软件有显示桌面的功能, 并且大家的方法都是遍历窗口, 然后让它们最小化, 其实 win系统给咱们了一个非常方便的WIN键(就是键盘上在CTRL键和ALT键之间的那个带win标志的按键转载 2009-08-12 21:51:00 · 534 阅读 · 0 评论 -
消息钩子函数入门篇
Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。而钩子是Windows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能。钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,转载 2009-08-12 18:22:00 · 514 阅读 · 0 评论 -
CArchive 和 CFile
CArchive 和 CFile 都是MFC的类, 头文件afx.h 定义的.CFile直接同磁盘文件打交道,直接读写,无缓冲存储. CArchive可以做比CFile更多的事.建CArchive对象前必须先建CFile对象,CArchive要用到CFile对象. 将保存于文件中的short数据保存到short数组,就是打开磁盘文件,读入数据. CFile支持直接binary读写,间接text读写原创 2009-08-06 09:44:00 · 3907 阅读 · 0 评论 -
CArchive
CArchive没有基类。CArchive允许以一个永久二进制(通常为磁盘存储)的形式保存一个对象的复杂网络,它可以在对象被删除时,还能永久保存。可以从永久存储中装载对象,在内存中重新构造它们。使得数据永久保留的过程就叫作“串行化”。可以把一个归档对象看作一种二进制流。象输入/输出流一样,归档与文件有关并允许写缓冲区以及从硬盘读出或读入数据。输入/输出流处理一系列ASCII字符,但是归档文件以一种原创 2009-08-06 10:24:00 · 975 阅读 · 0 评论 -
CFile
CObject └CFileCFile是MFC文件类的基类,它直接提供非缓冲的二进制磁盘输入/输出设备,并直接地通过派生类支持文本文件和内存文件。CFile与CArchive类共同使用,支持MFC对象的串行化。该类与其派生类的层次关系让程序通过多形CFile接口操作所有文件对象。例如,一个内存文件相当一个磁盘文件。使用CFile及其派生类进行一般目的的磁原创 2009-08-06 10:25:00 · 704 阅读 · 0 评论 -
CStdioFile
CStdioFileCObject └CFile └CStdioFile一个CStdioFile对象代表一个用运行时函数fopen打开的C运行时流式文件。流式文件是被缓冲的,而且可以以文本方式(缺省)或二进制方式打开。文本方式提供对硬回车—换行符对的特殊处理。当你将一个换行符(0x0A)写入一个文本方式的CStdioFile对象时,字节原创 2009-08-06 10:29:00 · 846 阅读 · 0 评论 -
CDialog类的成员
CObject └CCmdTarget └CWnd └CDialogCDialog类是在屏幕上显示的对话框基类。对话框有两类:模态对话框和非模态对话框。模态对话框在应用继续进行之前必须关闭。非模态对话框允许用户执行另外的操作而不必取消或删除该对话框。一个CDialog对象是对话框模板与一个CDialog派生类的组原创 2009-08-06 10:43:00 · 1688 阅读 · 0 评论 -
ASSERT()的用法
操作系统: Windows 编程工具: Microsoft Foundation Classes ASSERT() 问题: 什么是ASSERT()? ASSERT()和assert()的区别是什么? ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为原创 2009-08-04 21:18:00 · 561 阅读 · 0 评论 -
c++ 虚函数的实现机制
c++实现多态的方法其实很多人都知道,虚函数在c++中的实现机制就是用虚表和虚指针,但是具体是怎样的呢?从more effecive c++其中一篇文章里面可以知道:是每个类用了一个虚表,每个类的对象用了一个虚指针。具体的用法如下:class A{public: virtual void f(); virtual void g();private: int a};cl原创 2009-08-05 12:53:00 · 433 阅读 · 0 评论 -
CWnd
CObject └CCmdTarget └CWndCWnd类提供了微软基础类库中所有窗口类的基本功能。CWnd对象与Windows的窗口不同,但是两者有紧密联系。CWnd对象是由CWnd的构造函数和析构函数创建或销毁的。另一方面,Windows的窗口是Windows的一种内部数据结构,它是由CWnd的Create成员函数创建的,而由CWnd原创 2009-08-06 11:33:00 · 13654 阅读 · 0 评论 -
CString详解及其类成员
CString没有基类。一个CString对象由可变长度的一队字符组成。CString使用类似于Basic的语法提供函数和操作符。连接和比较操作符以及简化的内存管理使CString对象比普通字符串数组容易使用。CString是基于TCHAR数据类型的对象。如果在你的程序中定义了符号_UNICODE,则TCHAR被定义为类型wchar_t,即16位字符类型;否则,TCHAR被定义为char,即8位字原创 2009-08-04 20:56:00 · 1063 阅读 · 0 评论 -
CArray数组类:动态数组
CArray是mfc中的动态数组.CArray类支持与CArray相似的数组,但是必要时可以动态压缩并扩展。数组索引从0开始。可以决定是固定数组上界还是允许当添加元素时扩展当前的边界。内存对上界是连续地分配空间,甚至一些元素可为空。和CArray一样,CArray索引元素的访问时间是不变的,与数组大小无关。在使用一个数组之前,使用SetSize建立它的大小和为它分配内存。如果不使用SetSize,转载 2009-08-05 14:05:00 · 1822 阅读 · 0 评论 -
关闭窗口函数及如何获取窗口句柄(VC)
参数是要杀死的窗口名称 BOOL FindProcessHandleAndKill(const CString &cs_WndName) { HWND hWnd; DWORD ProcessID; HANDLE hProcess; hWnd=::FindWindow(NULL, cs_WndName);转载 2009-08-07 11:35:00 · 5300 阅读 · 1 评论 -
深入浅出 CPropertySheet
深入浅出 CPropertySheet 译者:徐景周(原作:Mustafa Demirhan) 为了最大限度的发挥属性页的效用,首先让我们先从 CPropertySheet 继承一个新类,取名为 CMyPropSheet. 接着便可以进行下面的各种操作: 一、隐藏属性页默认按钮 隐藏掉Apply应用按钮:转载 2009-08-11 00:42:00 · 483 阅读 · 0 评论 -
SetWindowsHookEx
SetWindowsHookEx HOOK钩子详细介绍 基本概念 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每转载 2009-08-11 16:53:00 · 945 阅读 · 0 评论 -
vector的用法
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。 为了可以使用vector,必须在你的头文件中包含下面的代码: #include vector属于std命名域的,因此需转载 2009-09-03 23:09:00 · 679 阅读 · 0 评论