c/c++ primer
文章平均质量分 79
c/c++ 基础语法
George P
这个作者很懒,什么都没留下…
展开
-
DefWindowProc及对WM_CLOSE的理解随笔
DefWindowProc这是一个产生消息的函数;在设备上绘图显示时与WM_PAINT消息无关;WM_CLOSE点击右上角关闭按钮,依次会产生WM_CLOSE,WM_DESTROY,WM_NCDESTROY,WM_QUITM_CLOSE消息产生之后,如果去执行了DefWindowProc函数,那么他会 接着依次连续产生WM_DESTROY WM_NCDESTROY这两个消息。而在WM_DESTROY处理函数中写上了PostQuitMessage(0)这个函数,WM_QUIT 是由这个函..转载 2020-09-12 11:47:36 · 224 阅读 · 0 评论 -
无法解析的外部符号几种可能随笔
lib 文件未引入。可使用“#pragma comment(lib, “winsock.lib”) ”语句添加 lib 引用,也可在项目依赖里添加。类方法的实现未加类标识。如, “CTest::Connect(void) { … }” 写成了 “Connect(void) { … }”。没有将项目需要的头文件、源文件加入项目中。4.引用了不匹配的lib库(相当于没有引用),比如多字节字符集的程序引用了UNICODE字符集的lib...转载 2020-09-12 10:58:25 · 214 阅读 · 0 评论 -
一个对话框资源与业务分离的小demo
创建"动态链接库(dll)",命名为Dll1,用于实现纯业务接口,与界面无关,使用windows之间共享的dll在dll中分别创建接口导出类MathInterface和接口实现类MathRealize;假如plus是一个会被其他dll调用业务函数。MathInterface类#pragma once#ifndef MATHINTERFACE_H#define MATHINTERFACE_H#define MATH1_API __declspec(dllexport)class MATH.原创 2020-08-31 20:44:53 · 117 阅读 · 0 评论 -
dll加载随笔
动态库的加载有两种方法:隐式和显式。方法一: 隐式加载这种方式和静态库的使用方法一样,对应有3种具体的方法,注意此时要包含的是导入库而不是动态库,依然需要头文件,代码中可直接使用头文件中的函数名,并且这种方式在运行时需要需要动态库。隐式就是在编译时链接Dll的引入库lib,然后在程序启动时由程序自动加载对应的Dll,显然 这会略微增加程序启动的时间。而且,如果Dll不存在的话,程序还无法启动。方法二: 显式加载(又称运行时动态链接)在代码中使用LoadLibrary()显式原创 2020-08-14 18:16:13 · 84 阅读 · 0 评论 -
窗口显示(绘制)与隐藏事件WM_ACAD_KEEPFOCUS、ON_WM_SIZE()、ON_WM_PAINT()、ON_WM_ERASEBKGND
//界面非客户区域失效可通过绘制消息进行重绘;常与虚函数OnDraw一起使用WM_NCPAINT()void OnNcPaint();//界面焦点事件//acadarx非模态对话框的焦点是当前焦点,CAD中非模态对话框一般都要用它,最简单的实现是直接返回TRUE。或判断当前光标坐标是否在对话框窗口内。ON_MESSAGE(WM_ACAD_KEEPFOCUS, OnAcadKeepFocus)afx_msg LRESULT OnAcadKeepFocus(WPARAM, LPARAM); PO原创 2020-08-14 17:55:40 · 702 阅读 · 0 评论 -
对话框显示与消息随笔
对于一个窗体(包括对话框)来说,它之所以能够显示出来,是因为有一个消息循环负责处理窗体消息,因为有消息循环,所以可以响应用户的输入.当一个对话框显示出来后,它自身就有一个消息循环,专门负责对话框的处理,并且也只是针对对话框而言.因此主窗体消息循环无法继续进行,它也就是不接受用户的输入,我们称对话框阻塞了主线程.而对于一般的框架窗体,它显示之后并没有独立的消息循环,它与主窗体共用一个消息循环,通过这种方式,子窗体也可以响应用户的输入.定时器是CPU机制控制的,程序无法控制,你可以理解为一个定时器是一个原创 2020-08-13 20:04:29 · 151 阅读 · 0 评论 -
解耦上层dll依赖底层dll
c++的同学会想到:在其中一个dll中定义另一个dll的被用到的类的基类,利用继承和多态解决该问题例如:dll2中定义了系统主题样式类CSystemTheme,需要在更底层的dll1中设置系统主题样式class CSystemTheme{public: CBsSystemTheme(void); ~CBsSystemTheme(void); /* * 获取当前主题 */ int GetCurrentTheme(){ return m_nCurrentTheme;}private:原创 2020-07-08 21:13:45 · 322 阅读 · 0 评论 -
std::bind函数作为函数、参数
#include <iostream>#include <vector>#include <functional>#include <cstring>#include <cassert>using namespace std;using namespace std::placeholders;bool isBigger(const wstring &str, int nSize){ str.size() > n原创 2020-06-30 20:56:20 · 971 阅读 · 0 评论 -
Tokenizes分割CString字符串
对CString分割字符串,推荐使用其成员函数TokenizeCString str(255,255,255);std::vector<CString> vecRGB;CString strToken(_T(","));int nPos = 0;while(1) { strRGBValue = str.Tokenize(strToken ,nPos); if (-1 == nPos || strRGBValue.IsEmpty()) { break; } vecRGB.原创 2020-06-28 21:43:57 · 781 阅读 · 0 评论 -
仿函数基础及进阶
基础1.1用仿函数实现一般的比较class Compare {public: bool operator()(double a, double b) { return a < b; }};std::vector<double> vecData = { 2,1,3};std::sort(vecData.begin(), vecData.end(), Compare());// 排序后结果是1 2 3 1.2用仿函数实现过滤class CFilter {publ原创 2020-06-17 20:38:23 · 114 阅读 · 0 评论 -
使用宏替换存量代码中的RGB值
系统风格#define STYLE_BLACK CBCGPVisualManager2016::GetStyle() == CBCGPVisualManager2016::Office2016_Black ? TRUE : FALSE#define STYLE_WHITE CBCGPVisualManager2016::GetStyle() == CBCGPVisualManager2016::Office2016_White ? TRUE : FALSE定义每个系统风格颜色#ifdef STYL原创 2020-06-11 22:10:13 · 136 阅读 · 0 评论 -
自定义跨平台字符串
1.std::basic_string描述:The basic_string object keeps an internal copy of alloc, which is used to allocate and free storage for the characters it contains.说明std::basic_string适用存储任意类型字符windows中用它定义string和wstring类型:using string = basic_string<char, ch原创 2020-06-08 20:58:31 · 173 阅读 · 0 评论 -
封装dll时一些比较重要的预定义宏
代码中常用的宏GNU C的扩展宏:https://gcc.gnu.org/onlinedocs/gcc-5.1.0/cpp/Common-Predefined-Macros.html#Common-Predefined-Macroswindowswindows SDK 的minwindef.h下定义了windows的宏WIN32 包含<windows.h>就自动定义WIN32; 如果在预处理定义中删除WIN32,又不包含<windows.h>,此时WIN32未定义,所以不原创 2020-06-05 10:25:47 · 294 阅读 · 0 评论 -
dll跨平台导出
first:定义导出符号ExportDef.h#ifndef ExportDef_H //防止.h文件被包含多次,等同#pragma once。两者区别:https://blog.csdn.net/fanyun_01/article/details/77413992#define ExportDef_H#if defined(_WIN32)#if defined(DEMO_EXPORTS) //为该导出库定义预定义宏,需添加到C/C++的预处理器定义中去#define DEMO_API _原创 2020-06-05 10:13:23 · 471 阅读 · 0 评论 -
动态库导出函数指针
1.创建动态库定义导出符号定义在IExport.h头文件,需要导出接口/类时引用该头文件#ifndef IEXPORT_H#define IEXPORT_H#include "pch.h"//#if defined(EXPORTELEMENT_EXPORT)#define IEXPORTELEMENT_API __declspec(dllexport)#else#define I...原创 2020-04-17 15:05:56 · 593 阅读 · 0 评论 -
std::move, std::copy, std::back_inserter
template&amp;amp;lt;typename T,typename OutputIterator&amp;amp;gt;void my_copy(const T &amp;amp;amp;container,int num,OutputIterator result){ for(int i= 0; i&amp;amp;lt; num; ++i) { *result = container[i]; ++result;原创 2019-03-05 11:16:02 · 541 阅读 · 0 评论