摘要:说道定时器,很多人都会想到Windows定时器SetTimer吧!其实,项目里面原本确实是使用这种方法实现动画效果的,但是后来问题出现了!由于WM_TIMER消息优先级比较低,常常被丢失,导致一个WM_MOUSEMOVE消息都会影响整个动画的效果。 这时我就考虑,是否能给定时器创建一个单独的线程,接...
阅读全文
随笔分类 - Windows 编程
摘要:一、前言在前一段时间,我遭遇了一个现象诡异的Bug,最后原因归结为在DllMain里错误地调用了FreeLibrary(在本文最后对此Bug有详细的解释)。 MSDN里关于禁止在DllMain里调用LoadLibrary和FreeLibrary的解释过于含糊不清,所以我重温了一遍RussOsterl...
阅读全文
摘要:Windows没有message queue累世的IPC内核对象,使得在在处理IPC时少了一种传递消息的手段。利用Windows的Naming Object可以实现一套简单的Inter-Thread消息队列。这里并不使用socket,因为一旦使用socket,就得负责port管理,很麻烦,另外在对外...
阅读全文
摘要:在Windows应用程序中,窗体是由一种称为“UI线程(User Interface Thread)”的特殊类型的线程创建的。首先,UI线程是一种“线程”,所以它具有一个线程应该具有的所有特征,比如有一个线程函数和一个线程ID。其次,“UI线程”又是“特殊”的,这是因为UI线程的线程函数中会创建一种...
阅读全文
摘要:一 Windows中有一个系统消息队列,对于每一个正在执行的Windows应用程序,系统为其建立一个“消息队列”,即应用程序队列,用来存放该程序可能 创建的各种窗口的消息。应用程序中含有一段称作“消息循环”的代码,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。二 Windows为当前执...
阅读全文
摘要:win7下由于UIPI的限制, 高权限进程无法收到底权限进程发来的消息, 因此对窗口消息hook时无法接收到消息,解决办法是在调用SetWindowsHookEx之前先调用ChangeWindowMessageFilterEx, 该函数修改指定窗口的UIPI消息过滤设置。 原型如下:BOOL WINAPI ChangeWindowMessageFilterEx( HWND hWnd, UINT message, DWORD action, PCHANGEFILTERSTRUCT pChangeFilterStruct);第一个参数要改变设置的窗口句构, 第二个参数要过滤的消息, 第三个参数要执
阅读全文
摘要:在win7中用自己写的程序读取MBR时,突然提示无法对磁盘进行操作,而在xp下并没有这个问题;最后点右键以管理员身份运行才可以正常运行。于是想办法让程序在双击启动时默认以管理员身份运行。具体方法:1.首先创建一个名为manifest的文件并将下面的内容粘贴进去;Description of your application2.打开VS2005命令提示按如下格式输入指令即可;mt.exe -manifest -outputresource:第一个尖括号及尖括号内的内容用manifest文件的路径替代,而第二个尖括号及尖括号内的内容用你要操作的exe文件的路径替代;按下Enter键,此时将你的e.
阅读全文
摘要:C方式:写:FILE *pFile = fopen("1.txt", "w");fwrite("http://www.pcslonline.com", 1, strlen("http://www.pcslonline.com"), pFile);fclose(pFile);读:FILE *pFileRead = fopen("1.txt", "r");char *pBuf;fseek(pFileRead, 0, SEEK_END); //把文件指针移动到文件结尾int len
阅读全文
摘要:Q: 如何打开一个应用程序?ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW );或ShellExecute(this->m_hWnd,"open","notepad.exe", "c:\\MyLog.log","",SW_SHOW );正如您所看到的,我并没有传递程序的完整路径。Q: 如何打开一个同系统程序相关连的文档?ShellExecute(this-
阅读全文
摘要:由于看了一下,比较好理解,暂时先放到这里,待有空再翻译。只是在每节后大致介绍一下讲的内容。感觉写的比较全,无论从消息的原理还是从MFC操作上来说,值得一看,我也在此做个收藏。(一)说明:以下首先对消息进行介绍,然后在消息处理中,使用类向导创建消息循环,这个操作是在vc6.0(或者之下版本)操作的。IntroductionPerhaps one of the most important means of communication in windows is Messages. The traditional program starts at yourmain()function, move
阅读全文
摘要:1、 DLL的概念DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数、变量或类。这些可以直接拿来使用。静态链接库与动态链接库的区别:(1)静态链接库与动态链接库都是共享代码的方式。静态链接库把最后的指令都包含在最终生成的EXE文件中了;动态链接库不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。(2)静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。动态链接库的分类:Visual C++支持三种DLL,它们分别是:(1)Non-MFC DLL(非MF
阅读全文
摘要:WinExecTheWinExecfunction runs the specified application.NoteThis function is provided only for compatibility with 16-bit Windows. Applications should use theCreateProcessfunction.UINT WinExec( LPCSTR lpCmdLine, // 可执行程序的路径,如"c:\\a.exe" UINT uCmdShow // 启动方式);ParameterslpCmdLine [in] Point
阅读全文
摘要:最近用WIN32 DLL,为了方便要用到MFC的一些库,又不想转工程,就网上找了很多方法,发现没有详细的介绍,有的也行不通,现在成功在WIN32 DLL中使用了MFC,记录一下以防以后用到忘记一、修改预编译头文件(stdafx.h)在stdafx.h文件中添加下面代码,包含一些MFC的头文件,这些可以在一个MFC工程中复制过来 1 #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将为显式的 2 3 #include // MFC 核心组件和标准组件 4 #include // ...
阅读全文
摘要:今天写了一个DLL,DLL中用到的一个类里用到的MSXML的COM组件,所以在DLL中要包含afx.h头文件,也就不可避免的要用到MFC的类库了,但在编译时出现了错误:mfcs42d.lib(dllmodul.obj) : error LNK2005:_DllMain@12already defined in NetDriverConfig.obj,在http://topic.csdn.net/t/20010911/10/281452.html处的贴子里找到了以下回答,试了一个原来是文件里定义的对象与mfcs42d.lib有冲突,加了命名空间后问题解决。还不知道DLL能不能使用,明天试一下再说
阅读全文
摘要:如果使用VC编写DLL时,需要MFC功能; 一般在源文件里就不能手动写DLLMAIN函数了它给MFC集成了,\src\mfc\dllmodule.cpp打开它,里面有有一个DLLMAIN函数,根据源码意思就可以看出来,这里截取的一点点代码if (dwReason == DLL_PROCESS_ATTACH) { BOOL bResult = FALSE;#ifdef _AFXDLL // wire up resources from core DLL AfxCoreInitModule();#endif _AFX_THREAD_STATE* pState = AfxGetThreadS...
阅读全文
摘要:第一部分:API函数简介1.SetWindowsHookEx函数函数原型HHOOKSetWindowsHookEx(int idHook, // hook type HOOKPROC lpfn, // hook procedure HINSTANCE hMod, // handle to application instance DWORD dwThreadId // thread identifier);函数功能:该函数将一个应用程序定义的挂钩处理过程安装到挂钩链中去,您可以通过安装挂钩处理过程来对系统的某些类型事件进行监控,这些事件与某个特定的线程或系统中的所有事件相关.具体参数详见MSD
阅读全文
摘要:所有窗体在创建前都必须注册窗体类,只有注册的窗体类才被系统认知并允许实例化,换句话说通过注册告诉进程窗体管理器此类窗体的属性如: 背景色,窗体上的鼠标样式以及窗体事件处理函数等; 有一些控件类系统自带了的可以不用注册即可实例化,在不需要时反注册掉,以便释放类占用的内存。(一) 函数声明 I). 类注册ATOM RegisterClassEx(CONST WNDCLASSEX *lpwcx); 注册一个窗体类,以便通用CreateWindowEx, CreateWindow来实例化一个窗体 ATOM RegisterClass(CONST WNDCLASS *lpWndClass); 与Regi
阅读全文
摘要:《白手起家Win32SDK应用程序》目录《白手起家Win32SDK应用程序》第一篇、预备知识第二篇、创建Win32工程和主函数第三篇、增加一个回调函数第四篇、注册一个窗口类第五篇、利用已注册的窗口类来创建一个窗口第六篇、显示你创建的窗口第七篇、获取消息及对消息缺省处理第八篇、关闭窗口的同时退出程序第九篇、窗口标题栏上显示自定义图标(手动编辑代码)第一篇、预备知识 白云小飞1 说在前面由于VC6及MFC的特点,我们许多人从标准C++学习到VC6MFC应用程序的编程学习的过度会有一个很大的夸跃,从而感到非常的吃力。究其原因之一:MFC类库设计虽然精巧,但我们在使用MFC设计程序时,会发现MFC到处
阅读全文
摘要:1、创建和终止线程 在MFC程序中创建一个线程,宜调用AfxBeginThread函数。该函数因参数不同而具有两种重载版本,分别对应工作者线程和用户接口(UI)线程。 工作者线程CWinThread *AfxBeginThread( AFX_THREADPROC pfnThreadProc, //控制函数 LPVOID pParam, //传递给控制函数的参数 int nPriority = THREAD_PRIORITY_NORMAL, //线程的优先级 UINT nStackSize = 0, //线程的堆栈大小 DWORD dwCreateFlags = 0, //线程的创建标志 L..
阅读全文
摘要:在Windows应用程序中,窗体是由一种称为“UI线程(User Interface Thread)”的特殊类型的线程创建的。 首先,UI线程是一种“线程”,所以它具有一个线程应该具有的所有特征,比如有一个线程函数和一个线程ID。 其次,“UI线程”又是“特殊”的,这是因为UI线程的线程函数中会创建一种特殊的对象——窗体,同时,还一并负责创建窗体上的各种控件。 窗体和控件大家都很熟悉了,这些对象具有接收用户操作的功能,它们是用户使用整个应用程序的媒介,没有这样一个媒介,用户就无法控制整个应用程序的运行和停止,往往也无法直接看到程序的运行过程和最终结果。 那么,窗体和控件又是如何作到对用...
阅读全文