- 博客(32)
- 收藏
- 关注
原创 使用命令行模式编译C++代码
说明:以6核并行编译的方式,置顶v141版本的平台SDK,编译整个工程,如果出现因未完成编译链接库导致的链接问题,重新执行一次编译即可。,这种方式仅在当前的 CMD 会话中有效,会话结束时环境变量就会消失。第三步:切换到工程目录:cd .\build,即解决方案所在目录。第一步:打开命令行窗口:Win+R输入CMD,打开cmd窗口;
2023-11-09 14:59:58
203
原创 GDI+的Graphics::DrawString在分层窗口上写出来的字会变成透明并且鼠标穿透的问题
某些系统在使用GDI+绘制文字时,文字会变成透明,暂不知原因是为什么,不过可以将文字Color的Alhpa值由255改成254就能正常绘制文字,亲测有效。有哪位大神知道原理是什么,劳烦在评论区留言,感谢。...
2022-04-25 15:04:03
237
原创 使用VS自带的命令行编译CMAKE项目
1、直接用vs打开CMakeLists文件;2、右键工程,在下拉菜单中点击“打开开发人员命令提示”3、在打开的命令行界面依次输入:mkdir build(创建工程文件所在目录);cd build(切换到该目录下);cmake ../(生成vs工程)即可。...
2022-04-13 09:30:31
3314
原创 MFC窗口不响应WM_CHAR等消息
通常使用MFC自定义控件或者使用Win32自定义控件,我们是不能像使用EDIT控件一样响应WM_CHAR等消息,这些消息已经被系统处理了。 如何响应WM_CHAR消息?在自定义的窗口类中,增加如下消息处理代码即可:if (uMsg == WM_GETDLGCODE) { return DLGC_WANTCHARS ; }具体使用方法参考:https://doc...
2021-07-23 17:31:41
340
原创 使用for循环调用类中不同函数
在使用C++过程中,有时会遇到这样的场景:函数实现的功能不同,参数类型不同,但参数个数相同,如果频繁调用这些函数,每个函数都手动去调用一次显得特别繁琐,特别是以后新增加类似功能的函数,函数调用的各个地方都要手动去添加对新函数的调用,效率低下,不易维护。 下面例子,使用for循环去调用不同功能函数,方便实用,易于修改:#include <functional&...
2019-02-02 16:19:54
1892
原创 windows通过消息(PostMessage)传递参数
在使用PostMessage或者SendMessage传递消息,需要传递不同种类型的数据,下面的方法可以传递各种类型的数据:例如:std::vector<std::string>* pParams = new std::vector<std::string>; *pParams = params(传入的参数); PostMes...
2018-07-18 16:45:58
10089
1
转载 C++ 虚函数表解析
C++ 虚函数表解析<?xml:namespace prefix = o /> 陈皓http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代...
2018-07-02 14:13:54
127
转载 c++ 4种强制类型转换
C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast形式:class_name <type>(expression) ,其中class_name为以上4种,type是转换的目标类型,expression是要转换的值。1、static_cast 任何具有明确定义的类型转换,只要不包含底层const,都可以使用sta...
2018-05-03 09:43:09
166
转载 C++禁止拷贝复制
class CPeople { // ... private: // 将复制相关的操作定义为私有 CPeople(); // 只声明不实现 const CPeople& operator=(const CPeople& rhis); // 只声明不实现 };...
2018-03-02 09:19:33
1365
转载 C++类的大小——sizeof(class)
第一:空类的大小class CBase{};运行cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl;sizeof(CBase)=1;为什么空的什么都没有是1呢?先了解一个概念:类的实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在内存中都有独一无二的地址。同样空类也会被实例化(别拿豆包不当干粮,空类也是类啊),所以编译...
2018-02-09 14:01:15
1137
转载 C/C++中volatile关键字详解
1. 为什么用volatile? C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明:A volatile specifier is a hint to a compiler that an obje...
2018-02-07 17:36:38
178
原创 typedef使用
一、在函数指针中使用typedeftypedef void (*Func)(char*);void funcMac(char* param){}void funcCall(Func fun,char *p){ fun(p);}void main(){ char* p = new char(); funcCall(funcMac,p);
2018-02-07 16:44:17
136
转载 WinDbg分析DUMP文件
转载自:https://www.cnblogs.com/nchxmoon/p/4390980.html一、生成dump文件1 #ifndef _DUMP_GENERATE_H_ 2 #define _DUMP_GENERATE_H_ 3 4 #include 5 #include 6 #pragma comment(lib, "DbgHelp.lib") 7
2017-12-29 14:51:31
285
转载 线程优先级
线程优先级现在主流操作系统(如Windows、Linux、Mac OS X)的任务调度除了具有前面提到的时间片轮转的特点外,还有优先级调度(Priority Schedule)的特点。优先级调度决定了线程按照什么顺序轮流执行,在具有优先级调度的系统中,线程拥有各自的线程优先级(Thread Priority)。具有高优先级的线程会更早地执行,而低优先级的线程通常要等没有更高优先级的可执行线
2017-12-28 10:39:39
222
转载 调用SuspendThread函数需要注意的问题
在实际环境中,调用SuspendThread时必须小心,因为不知道暂停线程运行时它在进行什么操作。如果线程试图从堆栈中分配内存,那么该线程将在该堆栈上设置一个锁。当其他线程试图访问该堆栈时,这些线程的访问就被停止,知道第一个线程恢复运行 。只有确切知道目标线程是什么(或者目标线程正在做什么),并且采取强有力的措施来避免因暂停线程的运行而带来的问题或死锁状态,suspendThread才是安全的。
2017-12-28 09:53:25
5438
原创 二维数组的使用
第一种: int (*p)[5] = new int[COL][5]; //已知列数 for (int i = 0; i { (*p)[i] = 0 + i; (*(p + 1))[i] = 1 + i; (*(p + 2))[i] = 2 + i; } std::cout s
2017-12-21 15:17:17
132
转载 GetMessage和PeekMessage的联系与区别以及用法 TranslateMessage与DispatchMessage
区别:PeekMessage:有消息时返回TRUE,没有消息返回FALSE GetMessage:有消息时且消息不为WM_QUIT时返回TRUE,如果有消息且为WM_QUIT则返回FALSE,没有消息时不返回。GetMessage:取得消息后,删除除WM_PAINT消息以外的消息。PeekMessage:取得消息后,根据wRemoveMsg参数判断是否删除消息。PM_R
2017-12-20 19:08:34
556
转载 Windows共享内存
共享内存主要是通过映射机制实现的。 Windows 下进程的地址空间在逻辑上是相互隔离的,但在物理上却是重叠的。所谓的重叠是指同一块内存区域可能被多个进程同时使用。当调用 CreateFileMapping 创建命名的内存映射文件对象时,Windows 即在物理内存申请一块指定大小的内存区域,返回文件映射对象的句柄 hMap。为了能够访问这块内存区域必须调用 MapViewOfFile 函数
2017-12-13 16:28:51
374
转载 信号量(随意指定线程执行顺序)
HANDLE WINAPI CreateSemaphore( _In_opt_ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes _In_ LONG lInitialCount, _In_ LONG lMaximumCount, _In_opt_ LPCTSTR lpName ); 第一个参数:
2017-12-13 15:38:52
1463
转载 VS2013创建动态库(DLL)
第一步:创建动态库第二步:添加头文件#ifndef _TESTDLL_H#define _TESTDLL_H/**extern "C"的真实目的是实现类C和C++的混合编程。在C++源文件中的语句前面加上extern "C",表明它按照类C的编译和连接规约来编译和连接,而不是C++的编译的连接规约。*/extern "C" _declspec(dllexport) in
2017-11-29 17:10:33
452
转载 VS2013下新建静态库
第一步:新建一个静态库项目第二步:编写项目内容添加一个头文件,内容:int sum(int x,int y);添加对应的CPP文件,内容:int sum(int x,int y){return x+y;}第三步:生成.lib文件,即完成静态库的制作
2017-11-29 14:20:28
136
转载 计算机网络协议分层体系结构
转载自:https://www.cnblogs.com/KyriLrvingBlog/p/5313067.html协议分层体系结构的发展(1) 起初在ARPANET设计时即提出了分层的方法。“分层”可将庞大而复杂的问题,转化为若干较小的局部问题,而这些较小的局部问题就比较易于研究和处理。(2) 1974年,IBM公司宣布了它研制的SNA (System Network Ar
2017-11-28 19:51:57
1276
转载 设计模式--Observer(转自k_eckel)
Subject.h#ifndef _ADAPTER_H#define _ADAPTER_H#include#include#includeclass Observer;class Subject{public: virtual ~Subject(); virtual void Attach(Observer* obv); virtu
2017-11-28 17:14:14
140
转载 信号量
#include "stdafx.h"#include#include#includeint tickets = 100;HANDLE hSemaphore = NULL;void Thread1Proc(LPVOID lParam){ while (true) { WaitForSingleObject(hSemaphore, I
2017-11-07 15:12:55
125
转载 ShellExecute(打开文件所在文件夹并定位到文件)
ShellExecute函数原型及参数含义如下:ShellExecute(hWnd: HWND; {指定父窗口句柄}Operation: PChar; {指定动作, 譬如: open、runas、print、edit、explore、find[2] }FileName: PChar; {指定要打开的文件或程序}Parameters: PChar; {给要打
2017-11-07 13:15:26
3450
1
原创 MFC(对话框鼠标右键弹出菜单)
第一步:在Resource View下右键任意文件夹图标,弹出如下对话框单击Add Resource;第二步:在弹出的对话框中选择Menu,并点击new,完成菜单的添加;第三步:单击project,选择Add Existing Item,添加刚刚创建的菜单到*dlg.CPP中;第四步:在需要弹出菜单的地方添加如下代码即可 CMenu menu; CMen
2017-11-07 13:03:40
3654
转载 临界区
#include "windows.h"CRITICAL_SECTION _critical/*初始化,最先调用的函数。没什么好说的,一般windows编程都有类似初始化的方法*/InitializeCriticalSection(& _critical) /*释放资源,确定不使用_critical时调用,一般在程序退出的时候调
2017-11-06 17:21:54
539
转载 互斥锁(子线程互斥)
#include "stdafx.h"#include#include#includeHANDLE g_hMutex = NULL;const int g_Number = 3;DWORD WINAPI ThreadProc1(LPVOID lpParam);DWORD WINAPI ThreadProc2(LPVOID lpParam);DWORD WIN
2017-11-06 16:46:33
316
转载 线程同步的方式和机制
线程同步的方式和机制临界区、互斥区、事件、信号量四种方式临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共
2017-11-06 16:02:14
141
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人