随笔分类 - C++
摘要:CBitmap m_bitmap; //对象m_bitmap.LoadBitmap(IDB_SPLASH);//加载void CSplashWnd::OnPaint(){CPaintDC dc(this);CDC dcImage;if (!dcImage.CreateCompatibleDC(&dc))//创建内存设备环境 return;BITMAP bm;m_bitmap.GetBitmap(&bm);// Paint the image.CBitmap* pOldBitmap = dcImage.SelectObject(&m_bitmap);//这里把m_bitm
阅读全文
摘要:1、载入png绘图 Bitmap bitmap = new Bitmap(frameWidth, frameHeight); Graphics g = Graphics.FromImage(bitmap); g.DrawImage(Image , new Rectangle(0, 0, bitmap.Width, bitmap.Height), new Rectangle(frameWidth * frame, 0, frameWidth, frameHeight), GraphicsUnit.Pixel);2、创建内存设备上下文环境 IntPtr screenDC = Win32.GetDC
阅读全文
摘要:29. vc编译器对c函数默认的调用方式是_cdecl方式,函数参数按照从右向左的顺序入栈,被调函数出栈即可顺序使用参数。函数调用者负责清除栈中的参数。此方式支持了c标准中的可变参数函数调用。30. C#的完全基于.net framework (公共语言运行时CLR)的托管代码,其对象内存资源由框架负责管理。使用.net framework托管的代码编译生成中间语言,启动后由框架处理形成机器码,程序的整个声明周期交由框架负责而不是操作系统。这与c++写的非托管代码由操作系统(准确说是c运行时、c++标准库)负责调度是不同的。非托管代码需要手动释放内存资源,而托管是无需也不能干预的。31. .n
阅读全文
摘要:CRT应该是严格遵守C89或C99的,他应具备与操作系统无关的跨平台特性。任何个人和组织都可以基于ANSI 标准C开发出一套支持上层软件或系统开发的、反复使用、通用的CRT.诚如microsoft的windows开发同样要使用CRT和编译器。只是microsoft把操作系统的一些API加入CRT并公之于众,这样大大利于用户于其操作系统上开发---即可以使用CRT又可以使用上层api,系统有用户了用户也可便利开发软件了,这显然是合理的。也就是这样,他给我带来了假象,仿佛CRT是使用windows api开发出来似的。当然这是不对的,只是mc把CRL添加、包装(lib,dll)后方便大家使用和开发
阅读全文
摘要:1.概论 运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的。C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于新观念。所以这个时期的C运行时库都是单线程的。 随着操作系统多线程技术的发展,最初的C运行时库无法满足程序的需求,出现了严重的问题。C运行时库使用了多个全局变量(例如errno)和静态变量,这可能在多线程程序中引起冲突。假设两个线程都同时设置errno,其结果是后设置的errno会将先前的覆盖,用户得不到正确的错误信息。 因此,Visual C++提供了两种版本的C运行时库。一个版本供单线程应用程
阅读全文
摘要:一、 软件执行流程1、 软件编译流程Ø 预编译完成宏展开工作。Ø 为每一个.cxx源文件编译一个目标文件(.obj,.o),目标文件中至少包含二进制的代码段和数据段。在cxx源文件中可能会引用在其他cxx/hxx中定义的符号,也可能是自己定义的一些符号,这些作用域超过一个cxx文件的符号称为“public符号”(例如非静态函数)。因此每一个目标文件中也包含一个符号表,用于记录自己引用的符号及自己提供的public符号。Ø 编译器合成这些目标文件成一个库文件(.lib),同时解析可以找到的符号引用。此时这个库文件包含了二进制的代码段和数据段,同样也会包含一个符号表,
阅读全文
摘要:基于windows操作系统,可以采用如下函数创建线程,以前的代码是不准备去翻了,立此备忘而已...1、windows API CreateThread; HANDLE CreateThread(PSECURITY_ATTRIBUTES psa, DWORD cbStack,PTHREAD_START_ROUTINE pfnStartAddr, PVOID pvParam,DWORD fdwCreate, PDWORD pdwThreadID);psa参数:是指向PSECURITY_ATTRIBUTES结构的指针。如果希望所有的子进程能够继承该线程对象的句柄,必须设定一个PSECURITY_AT
阅读全文
摘要:1. 所有变量定义位于函数开始处。2. 尽量避免全局变量,全局变量需于实现文件中定义,头文件中extern声明。3.浮点零值比较采用区间值。4.保证正确的前提下尽量使用移位运算。5.If语句、switch语句优先处理出现概率大的情况。6. 指针与NULL比较反写如:NULL==p。7. 循环嵌套时最长的循环放内层短的放外层。8.尽量不在循环体内修改循环变量。9.凡是无返回值、无参数、任意类型指针参数的函数均使用void或void指针。10.适当使用const,使用目的限于节省空间、提高效率、不允许修改或可能产生的函数参数修改。11.对于可变、多变的寄存器变量、多线程共享变量,在经过代码优化处理
阅读全文
摘要:回调函数是一个很有用,也很重要的概念。当发生某种事件时,系统或其他函数将会自动调用你定义的一段函数(简单如一按钮的事件相应函数)。回调函数在windows编程使用的场合很多,比如Hook回调函数:MouseProc,GetMsgProc以及EnumWindows,DrawState的回调函数等等,还有很多系统级的回调过程。之所以产生使用回调函数这个想法,用VC写的一个DLL程序进行一些时间比较长的异步工作,工作完成之后,需要通知使用DLL的应用程序:某些事件已经完成,请处理事件的后续部分。开始想过使用同步对象,文件影射,消息等实现DLL函数到应用程序的通知,后来突然想到可不可以在应用程序端先写
阅读全文
摘要:c++语言本身是不能删除文件或文件夹的,他们是windows操作系统里的东西,所以得借助其api函数。其一:使用shell 接口:void FileDelete(CString directory){SHFILEOPSTRUCT shFileOp;char strCurrentPath[MAX_PATH];memset(&shFileOp,0,sizeof(shFileOp)); GetCurrentDirectory(MAX_PATH,strCurrentPath);strcat_s(strCurrentPath,sizeof(strCurrentPath),directory);s
阅读全文
摘要:以前用过向窗体发送WM_CLOSE消息,今见内存快照-->进程遍历-->获取进程id-->进程句柄-->关闭进程。如下:bool FileClient::CloseProcess(char* sProcessName){if(sProcessName==NULL){ return false;} PROCESSENTRY32 pe32; pe32.dwSize = sizeof(pe32); //进程快照 HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if (hProces
阅读全文
摘要:(1)Win API
bool CheckFolderExist(const string &strPath)
{
WIN32_FIND_DATA wfd;
bool rValue = false;
HANDLE hFind = FindFirstFile(strPath.c_str(), &wfd);
if ((hFind != INVALID_HANDLE_VALUE) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
rValue = true;
}
FindClose(hFind);
return rValue;
}
(2)Win SHell
PathFileExists("yourfile")
使用时加上:#include "Shlwapi.h" #pragma comment(lib,"Shlwapi.lib")
(3)Win API
bool FileExists(L
阅读全文
浙公网安备 33010602011771号