VC++
奈何小洪
我奋斗,我青春
展开
-
vc托盘图标的实现以及托盘右键菜单的响应
#define UM_SHOW_TORY_ICON WM_USER + 200 + 1 // 用于响应托盘图标消息void addToTray(){HINSTANCE hInst = m_pm.GetInstance();HICON hIcon;hIcon = LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON));N原创 2015-02-28 17:41:46 · 4719 阅读 · 0 评论 -
字符串类string的基本实现
包含指针成员的类深赋值运算符重载,类设计,类的默认、拷贝构造函数,析构函数实验参考class String{ char * m_data;public: String(); String(const char *str=NULL); String(const String &other); String & operator=原创 2015-09-02 16:36:46 · 1975 阅读 · 0 评论 -
vc屏幕截图实现
1.获取保存截图文件的路径,暂时选定为桌面//把截图的文件保存到桌面virtual BOOL CaptureLolToDesktop(HWND hWnd){ Sleep(1*1000); LPRECT lprc = new RECT; GetWindowRect(hWnd,lprc); std_string strTime; DWORD llocaltime = GetTick原创 2015-08-06 17:05:33 · 7209 阅读 · 0 评论 -
json解析库的使用
前言:使用官方json.cpp解析库解析json文件#include #pragma comment(lib, "lib_json.lib")/************************//*json写操作*//************************/void json_write_test(){ Json::Value json_temp; json_te原创 2015-08-19 12:36:04 · 1343 阅读 · 0 评论 -
windows服务监控和操作相关
代码中实现了删除服务,启动服务,停止服务,检测服务是否运行和服务是否存在等功能:#pragma once#include #include //删除服务/*返回:1:表示成功0:打开失败-1:表示打开SCManager失败*/int deleteService(LPCWSTR sSname){ SC_HANDLE scHandle = OpenSCMana原创 2015-08-07 10:49:22 · 1710 阅读 · 0 评论 -
进程间通信WM_COPYDATA的基本实现
发送消息端:const char* msg = "ReqLoginStatus"; COPYDATASTRUCT cpd; cpd.dwData = 0; cpd.cbData = strlen(msg)+1;//多加一个长度,防止乱码 cpd.lpData = (void*)msg; HWND hWnd = ::FindWindow(NULL,CA2W("魔方客户端"))原创 2015-09-06 15:09:10 · 687 阅读 · 0 评论 -
读取文件内容的一般方式
FILE *pFile=fopen("c://1.txt","r"); //获取文件的指针if (pFile == NULL){ //文件不存在 return;}char *pBuf = NULL; //定义文件指针fseek(pFile,0,SEEK_END); //把指针移动到文件的结尾 ,获取文件长度int len=ftell(pFile); //获取文件长度pBuf=n原创 2015-09-15 18:06:27 · 653 阅读 · 0 评论 -
信号量(Semaphore)
semaphore 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。 什么是信号量(Semaphore0 Semaphore分为单值和多值两种,前者只能被一个线程获得,后者可以被若干个线程获得。 以一个停车场是运作为例。为了简单起见,假设停车场只有三个车位,一开始三个车位都转载 2015-12-02 23:15:37 · 660 阅读 · 0 评论 -
std list/vector sort 自定义类的排序
转载自:http://blog.csdn.net/marising/article/details/4567531如下:三种方式都可以,如重写1、容器中是对象时,用操作符2、容器中是对象指针时,用()和比较函数排序都可以,比较函数参数是指针。3、list用成员方法sort4、vector用sort函数 [cpp] view转载 2017-01-17 11:20:14 · 1550 阅读 · 0 评论 -
进程同步之事件(Event)
事件做为内核对象,即可用户线程间同步,又可用于进程同步,下面的测试代码用于进程间同步,不清楚的同学请留言。A进程Demo:#include "stdafx.h"#include#include using namespace std;DWORD _stdcall ThreadFunc (_In_ LPVOID p){ int x=1; HANDLE pEvent = *(原创 2017-03-22 22:13:02 · 5238 阅读 · 0 评论 -
创建快捷方式到桌面、任务栏、开始菜单、快速启动栏、程序组中
//得到快速启动栏的路径 BOOL GetIEQuickLaunchPath(WCHAR *pszIEQueickLaunchPath){ LPITEMIDLIST ppidl; if (SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA, &ppidl) == S_OK) { BOOL flag = SHGetPathFromID转载 2017-12-01 16:35:46 · 2174 阅读 · 0 评论 -
c++删除字符串特殊符号
std::string RemoveSpcSymbol(std::string strSource)//删除符号{ char *str = strSource.c_str(); char buf[MAX_PATH] = { 0 }; int j = 0; for (int i = 0; i < strlen(str); i++) { if (str[i] > 0 &a...原创 2018-04-17 16:36:54 · 6522 阅读 · 0 评论 -
Dll高级技术之【延迟加载】
【DLL的隐式加载】:1.在Lib中包含导入库MyLib.lib2.cpp中包含头文件MyLib.h3.运行目录里面包含MyLib.dll【DLL的显式加载】:1.运行目录里面包含MyLib.dll2.LoadLibrary及GetProcAddress【DLL的延迟加载】:1.需要DLL,MyLib.lib导入库及MyLib.h 进行【隐式加载】的全步骤3.属性->配置属...原创 2018-05-30 17:19:28 · 4575 阅读 · 2 评论 -
vc复制文件夹实现(可以复制三层路径)以及zip压缩实现
#include #include #include #include "XZip.h"//复制文件夹实现void copy_all_file(LPCSTR file_path, std_string &backup_path) //第一个参数为被复制文件,第二个是复制到的地址{ if(!(boost::filesystem::exists(backup_path.c_str())原创 2015-07-21 09:59:23 · 1323 阅读 · 0 评论 -
为 URLDownloadToFile 实现进度条
最近使用 MFC的CInternetSession类下载文件时遇到一些问题, CInternetSession::OpenUrl 这个方法在使用个别代理的网络环境或者网速慢得要死的情况下,它会抛一个连接超时的异常,虽然catch 这个异常可以避免runtime error ,但下载也中止了。不过MSDN中提到SetOption可以设置超时时间,结果很悲剧的一次又一次的依然超时,后来才看到网上说Se转载 2015-08-22 12:04:14 · 1231 阅读 · 0 评论 -
内联函数和预处理宏区别
内联函数的功能和预处理宏的功能相似。相信大家都用过预处理宏,我们会经常定义一些宏,如#define TABLE_COMP(x) ((x)>0?(x):0)就定义了一个宏。为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记转载 2015-06-11 18:29:18 · 1595 阅读 · 0 评论 -
vc添加或取消软件开机启动
//添加开机启动void AddStartRun(LPCSTR item_name, LPCSTR _Path) //参数分别 想设置的注册表名称 和 所启动的软件路径{//写入注册表,以便开机自动运行HKEY hKey;//HEKY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunRegOpen原创 2015-02-27 18:49:41 · 730 阅读 · 0 评论 -
vc查看进程PID和关闭进程方法
DWORD FindProcess(char *strProcessName) //返回为进程PID{ DWORD aProcesses[1024], cbNeeded, cbMNeeded; HMODULE hMods[1024]; HANDLE hProcess; char szProcessName[MAX_PATH]; if ( !EnumProcess转载 2015-03-04 15:23:07 · 2972 阅读 · 0 评论 -
C语言编程忠告
指针用于判断是否为空的正确方法if(NULL == p); if(NULL != p); Float类型变量与0的比较方法:if((fTestVal >= -EPSINON) && (fTestVal 一般情况下if语句中进行判断,值放在左边,变量放有点,这样可以有效防止把 == 写成 =For循环的循环控制变量最好用半开半闭 Void* 类型可以被任何类型赋值原创 2015-03-16 15:41:22 · 776 阅读 · 0 评论 -
获取指定窗口信息(坐标,窗口风格)
HWND hTheLol = FindWindowA( NULL ,"QQ"); //获取窗口坐标 ,窗口名称可以通过spy++抓取LPRECT lprc = new RECT;GetWindowRect(hTheLol,lprc); //获取窗口坐标PWINDOWINFO pi = new WINDOWINFO;pi->cbSize = sizeof(WINDOWINFO);Ge原创 2015-03-06 10:22:22 · 2656 阅读 · 0 评论 -
VC获取特殊文件夹路径的方法
如果需要,请在StdAfx.h中添加 #include TCHAR MyDir[_MAX_PATH]; SHGetSpecialFolderPath(this->GetSafeHwnd(),MyDir,CSIDL_APPDATA,0);AfxMessageBox(MyDir); SHGetSpecialFolderPath(hwndOwn转载 2015-03-06 17:10:44 · 597 阅读 · 0 评论 -
WaitForSingleObject函数用法
用户模式的线程同步机制效率高,如果需要考虑线程同步问题,应该首先考虑用户模式的线程同步方法。 但是,用户模式的线程同步有限制,对于多个进程之间的线程同步,用户模式的线程同步方法无能为力。这时,只能考虑使用内核模式。 Windows提供了许多内核对象来实现线程的同步。对于线程同步而言,这些内核对象有两个非常重要的状态:“已通知”状态,“未通知”状态(也有翻译为:受信状态,未受信状态)转载 2015-03-10 10:25:32 · 872 阅读 · 0 评论 -
C++面试之GetMemory问题
题目一:[cpp] view plaincopyvoid GetMemory( char *p ) { p = (char *) malloc( 100 ); } void Test( void ) { char *str = NULL; GetMemory( str );转载 2015-03-10 11:02:18 · 1086 阅读 · 0 评论 -
C语言指针作为形参的一些问题
指针作为形参肯定有很多都不清楚其中具体的原理,我也是最近摸清了些门道:下面就用一些例子来给大家说明:void myMalloc(char *s) //我想在函数中分配内存,再返回 { s=(char *) malloc(100); } void main() { char *p=NULL; myMalloc(p); //这里的p实际还是NULL原创 2015-03-11 11:29:21 · 6089 阅读 · 1 评论 -
C、C++变量命名规则
转载自:http://blog.sina.com.cn/s/blog_8a7012cf01017h9p.html变量命名规则是为了增强代码的可读性和容易维护性。以下为C++必须遵守的变量命名规则: 1、 变量名只能是字母(A-Z,a-z)和数字(0-9)或者下划线(_)组成。2、 第一个字母必须是字母或者下划线开头。3、 不能使用C++关键字来命名变量,以免冲突。4、 变量名区分大小原创 2015-03-12 10:14:41 · 12470 阅读 · 1 评论 -
vc在指定目录生成快捷方式
一、首先要获得不同目录的路径char chDesktopPath[MAX_PATH] = {0}; SHGetSpecialFolderPathA(NULL,chDesktopPath,CSIDL_DESKTOP,0);//获取当前用户桌面路径通过改变上面函数的第三个参数来获取第三个参数可以为:CSIDL_BITBUCKET, CSIDL_CONTROLS, CSIDL_DESKT原创 2015-03-13 18:06:09 · 1261 阅读 · 0 评论 -
引用作为函数返回值
“引用作为函数参数”与 “引用作为函数返回值”一、引用作为函数参数作为函数参数时引用有两种原因:1、在函数内部会对此参数进行修改2、提高函数调用和运行效率 关于第一点,都知道C++里提到函数就会提到形参和实参。如果函数的参数实质就是形参,不过这个形参的作用域只是在函数体内部,也就是说实参和形参是两个不同的东西,要想形参代替实参,肯定有一个值的传递。函转载 2015-03-18 14:57:53 · 572 阅读 · 0 评论 -
dll断点调试方法
dll调试方法:1.把最新生成的dll和pdb放到 启动这个dll 的进程目录下2.启动这个进程3.然后在dll 的项目中 调试选项-》附加到进程-》选择启动的这个进程4.断点调试非本进程dll错误处理方式:0.把相关dll的pdb调试文件放到和的dll同目录1.启动进程2.找到调试-》窗口-》模块 (本进程所有相关的外部加载的dll)(原创 2015-04-28 23:47:13 · 7195 阅读 · 0 评论