Win32 SDK/MFC编程
xiaoding133
My name is Ma dingding. I’m a student, and software cultivator living in NanJing. This is my software development blog. I also study the aspect of speech recognition.If you are on Weibo,you can follow me at @xiaoding133.
展开
-
【win32多线程】数据的一致性问题,即多个线程读写数据问题
1.把锁定搬到更高的层次void AddLineItems(List *pList){Node node;while(){getLineItem(&item);AddHead(pList,&node);}}void AddHead(List *pList,Node *pNode){EnterCriticalSection(&pList->crit原创 2012-08-02 14:40:53 · 1191 阅读 · 1 评论 -
[读书笔记]Windows程序内部运行机制【一】
API:应用程序编程接口。SDK:软件开发包,开发包中包含API函数,帮助文档,使用手册,辅助工具等资源。窗口都是通过窗口句柄(HWND)来标识的。例如图标,光标,画刷。 1.MFC生成的C++源文件中都有StdAfx.h,此文件包含了常用的AFX函数的声明,其中有afxwin.h,此文件包含了CRECT,CPoint,CWnd等许多类及其方法的声明。 2.在VC++开发环原创 2014-07-12 09:59:52 · 900 阅读 · 0 评论 -
TCHAR,WCHAR,LPSTR,LPWSTR,LPCSTR的区别
在C++的窗口应用程序开发过程中,我们经常对TCHAR,LPCTSTR这样的关键字迷惑。接下来将详细解释他们之间的区别。 通常,一个字符可以用1个字节或两个字节来表示。1个字节的字符为ANSI编码字符,通常所有的英文字符都采用ANSI编码。2个字节的字符为Unicode编码,可以表示世界上所有的语言。 在VC++编译器中,分别用char和wchar_t数原创 2013-03-30 13:50:30 · 2330 阅读 · 0 评论 -
MFC如何自定义消息与在线程中向主窗体控件发送数据
如何定义消息:1.定义消息:在对话框类的头文件中定义一个自定义消息#define WM_MY_MESSAGE WM_USER+100 2.在类中声明该消息的处理函数:在该类声明的内部的protected:下声明如:afx_msg LRESULT MyMessage(WPARAM wParam,LPARAM lParam);3.在类的消息映射表中加入映射项在该类的源原创 2013-03-25 18:22:26 · 1564 阅读 · 0 评论 -
MFC 中错误处理信息FormatMessage
BOOL CMyClass::ReadFile(const CString & filename) { CFile f; if(!f.Open(filename, CFile::modeRead)) { /* Failed */ DWORD err = ::GetLastError(); // [1]翻译 2011-09-14 13:26:53 · 1662 阅读 · 0 评论 -
在Win32下让窗口居中
BOOL CenterWindow(HWND hwndWindow){ HWND hwndParent; RECT rectWindow, rectParent; // make the window relative to its parent if ((hwndParent = GetParent(hwndWindow)) != NUL翻译 2011-09-14 12:31:27 · 3161 阅读 · 0 评论 -
将MFC的CString 类型转化为C++标准数据类型std::string
std::string CStringToSTDStr(const CString& theCStr){ // Convert the CString to a regular char array const int theCStrLen = theCStr.GetLength(); char *buffer = (char*)malloc(sizeof(char)*(theCS原创 2011-09-14 12:54:59 · 886 阅读 · 0 评论 -
【Win32多线程】异步I/O技术(Overlapped I/O),避免使用多线程
讨论:1.激发的文件handles 2.激发的event对象 3.异步过程调用 4.I/O completion ports(重要)适用于高负载服务器----Win32文件操作函数 win32中有上那个基本的函数用来执行I/O,他们是: CreateFile(),ReadFile(),WriteFile(); 没有哪个原创 2012-07-23 14:17:00 · 11544 阅读 · 3 评论 -
VC实现滚动条的详解
显示区域大小:我们曾经使用过 GetClientRect 函数来获取显示区域的大小,使用这个函数没有什么不好,只是效率太低,确定显示区域更好的方法是在窗口消息处理程序中处理 WM_SIZE消息。传递给窗口消息处理程序的lParam 参数的低字节包含显示区域的宽度,高字节包含高度。static int nxClient, nyClient;case WM_SIZE:nxClient转载 2011-03-07 10:35:00 · 2904 阅读 · 0 评论 -
【Win32多线程】创建线程、获取线程执行状态、退出线程、错误处理
产生一个线程:HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD描述施行与这一新线程的security属性,NULL表示使用缺省值,在windows 95中忽略该参数 DWORD dwStackSize, // initial stack size新线原创 2012-07-21 16:14:19 · 16579 阅读 · 1 评论 -
【Win32多线程】如何初始化一个新线程,停止一个执行中的线程,调整线程优先权?
如何在某个线程内终止另一个正在运行的线程?--------干净地终止一个线程利用TerminateThread()安全的关闭执行中的一个线程BOOL TerminateThread( HANDLE hThread, // handle to thread DWORD dwExitCode // exit code线程的结束代码);该函数会引来许多问原创 2012-07-23 09:44:42 · 3979 阅读 · 0 评论 -
【Win32多线程】如何避免线程等待浪费CPU时间,降低对系统资源的冲击?
如何避免线程浪费CPU时间?等待是线程的必要之恶。两个等待技术:1.Win32的Sleep()函数,要求操作系统终止线程动作,直到度过某个指定时间之后才恢复。(不能事先知道等多久) 2.busy loop,不断调用GetExitCodeThread(),直到其结果不再是STILL_ACTIVE.(缺点浪费CPU时间),绝对不要在Win32中使用busy loop下面的程序原创 2012-07-21 19:30:24 · 6028 阅读 · 1 评论 -
【Win32多线程】同步机制(Critical section、Mutexes、Semaphore、Event Object)
线程同步能避免出现“race conditions”(竞争条件)和“data corruption”(数据破坏)的情况。同步(synchronous)与异步(asynchronous)的定义:当程序1调用程序2时,程序1停下不动,直到程序2完成回到程序1来,程序1才继续下去,这就是“同步”。如果程序1调用程序2后,径自继续自己的下一个动作,那么两者之间就是“异步”。Win32 AP原创 2012-07-22 14:37:34 · 4947 阅读 · 1 评论 -
【win32多线程】使用C++编写多线程
1.以一个C++对象启动一个线程 Q:如何以一个C++成员函数当做线程的起始函数? 错误的例子#include #include #include typedef unsigned (WINAPI *PBEGINTHREADEX_THREADFUNC)( LPVOID lpThreadParameter );typedef unsigne原创 2012-08-04 08:18:09 · 2129 阅读 · 0 评论 -
【Win32多线程】使用C runtime Library
如何避免使用 c runtime stdio 函数,改用Win32 Console API 如果使用MFC来开发程序,不要使用_beginthreadex()或CreateThread().若没有使用MFC,那么应该总是和多线程版本的C Run-time Library 链接,并且总是以_beginthreadex()和_endthreadex()取代CreateThread()和Exit原创 2012-08-02 16:08:11 · 1446 阅读 · 0 评论 -
支持按行号区域文本选择的NotePad++插件开发
最近发现NotePad++不支持按行号区间的文本复制,就想自己动手开发一个NotePad++插件,支持输入起始行号和结束行号,然后复制该区域的文本到新文档或者复制到系统剪切板,方便文本的操作。效果如下图: 本文主要介绍NotePad++插件开发的基本流程以及相关的注意点。1、Notepad++介绍Notepad++是使用C++开发的开源免费的文本编辑器,原创 2015-07-18 23:37:35 · 4643 阅读 · 0 评论