- 博客(112)
- 资源 (11)
- 问答 (1)
- 收藏
- 关注
原创 C#实现HTTP POST 做个记录备忘
最近工控软件经常需要做MES通信,基本上都是用Http Post实现,VC++做HTTP不如C#方便,以下是C#实现HttpPost的简单代码,记录以备遗忘。
2023-07-20 15:35:44
233
原创 C++编写COM组件 ATL工程
最近在做QT项目中遇到一个问题,在Qt中调用MFC编写的动态库,出现内存泄露,没找到原因。由于这些库年代久远,内部代码也比较复杂,又不能轻易丢弃。于是我想把它们做成COM组件再试试。以下是一个简单COM组件编写和调用的完整流程,VS2015。1. 新建一个ATL项目工程建好后,会自动生成两个项目,只需要关注第一个就可以了。2. 添加自定义接口对象, MFCComObject ATL简单对象项目中添加了 CMFCComObject 类和 IMFCComObject ...
2022-03-26 12:52:49
2323
原创 OpenGL轨迹球
1. 在视图类里面创建以下变量class MyView{ ................ ArcBallT m_ArcBall; // 轨迹球, 记录轨迹的变化 Matrix4fT *m_pTransform; Matrix3fT *m_pLastRot; Matrix3fT *m_pThisRot; CPoint m_ptLast; // 记住鼠标上次鼠标的位置}MyView::MyView(){ ...
2021-11-09 22:14:55
650
原创 OpenGL表面剔除
渲染时,在特定的硬件上渲染的三角面片是有限的,那么这种情况下,就应该减少不必要的三角面片,提升性能。那么在进行面剔除时,我们如何知道哪些面属于前面的面(Front facing),哪些面是后面的面(Back facing),渲染时应该丢弃后面的面,来减少gpu在执行片断着色器的命令,OpenGL中通过判断顶点连接的顺序(Winding order)来解决这个问题。在我们使用OpenGL画一个三角形的时候,三个顶点一定有一个顺序,可能是顺时针也可能是逆时针,但是,我们是能够看到画出来的三角形的。原因是我们没
2021-11-09 22:13:04
368
原创 OpenGL光照设置
光照模型OpenGL光照模型分为三种光:Ambient Light 环境光, Diffuse Light漫反射光, Specular Light镜面反射光.一、创建光源void glLightfv (GLenum light, GLenum pname, const GLfloat *params)light: OpenGL提供8个光源 GL_LIGHT0 ~ GL_LIGHT7pname: 光源属性GL_AMBIENT 环境光 默认 (0.0, 0...
2021-11-09 22:12:23
6313
1
原创 OpenGL显示STL模型之光照设置
显示STL模型, 全部都是三角面片, 使用光照需要注意三角面片的法线, 法线的归一化尤为重要。模型经过glScale变换之后, 原来的法线变得不正确, 光照效果变得不理想。解决此问题的方法是启用OpenGL自动法线单位化功能,该功能会影响性能。glEnable( GL_NORMALIZE );较好的方法是提前将STL模型的法线单位化。另外需要注意的是, 观察位置gluLookAt常常要与光照一起设置。以下是经验使用方式:void SetLight(){ GLFloat box = s
2021-11-09 22:10:34
597
原创 OpenGL模拟地月星系运动
运动规则:-> 地球绕太阳公转, 公转半径为 R-> 月球绕地球公转, 公转半径为 r-> 太阳、地球、月球各自自转OpenGL模型变换原则, 对当前模型坐标系进行操作,无论是旋转、平移、缩放。可以想象成有很多模型坐标系,起初模型坐标系与世界坐标系重合。glRotated 当前坐标系(相对于世界坐标系)进行旋转glTranslated 当前坐标(相对于世界坐标系)进行平移glScale 当前坐标系(相对于世界坐标系)缩放doub...
2021-11-09 22:09:10
620
原创 3D视角旋转平移鼠标响应制作
OpenGL处理3D视角以及旋转变换的一个关键思路是归一化处理。归一化处理就是将数据进行单元化,将所有需要显示的数据等比例装在一个1X1X1的立方体里。然后OpenGL去显示这个立方体,设置视角gluLookAt eyex, eyey, eyez都以立方体的边长单位化。鼠标控制旋转的方法:->> 鼠标横向移动,控制图形绕着Y轴旋转;鼠标纵向移动,控制图形绕着X轴旋转;->> 鼠标一次移动消息中,只处理Y旋转或只处理X旋转;->> 鼠标滚轮控制图像绕着Z轴旋转
2021-11-09 22:08:06
305
原创 OpenGL真实坐标转换为投影后的坐标
真实坐标可以通过OpenGL的投影函数计算投影之后的坐标。在HLCut中用于处理鼠标点选操作。思路:获取OpenGL模型矩阵和投影矩阵,通过投影函数计算。函数: gluProjectdouble objx, objy, objz; // 保存着真实坐标GLint viewport[4];GLdouble mvmatrix[16], projmatrix[16];glGetIntegerv(GL_VIEWPORT, viewport);glGetDoublev(GL_MODELVIEW_M.
2021-11-09 22:06:51
448
原创 3D视图中获取鼠标所在位置
在3D视图中,经过旋转、缩放、平移之后,任然可以获取鼠标位置对应的真实坐标。思路:获取OpenGL模型矩阵和投影矩阵, 对鼠标位置信息进行反投影计算。主要函数:glReadPixels 通过深度缓存获取Z坐标gluUnProject 实现反投影POINT point; // 鼠标位置GLint viewport[4];GLdouble mvmatrix[16], projmatrix[16];glGetIntegerv(GL_VIEWPORT, viewport); // viewport.
2021-11-09 22:04:00
532
原创 MFC中使用OpenGL简单框架的搭建
#pragma onceclass COpenGLWnd : public CWnd{ DECLARE_DYNAMIC(COpenGLWnd)public: COpenGLWnd(); virtual ~COpenGLWnd(); int MySetPixelFormat(HDC hdc); void SetViewPortSize(); HDC m_hDC; HGLRC m_hRC;protected: DECLARE_MESSAGE_MAP()public: af.
2021-11-09 22:02:51
966
原创 C#封装动态库,提供给C++调用
1, 首先封装一个C# Dll, 即创建工程为C#类库;using System;using System.Collections.Generic;using System.Linq;using System.Runtime.InteropServices;using System.Text;using System.Threading.Tasks;namespace MyCharpDll{ [ComVisible(true)] [Guid("0CE96C54-CC5F-4...
2021-11-09 21:59:34
2370
1
原创 VC复制字符串到剪贴板
BOOL CopyToClipboard(HWND hWnd, CString& str){ if (!OpenClipboard(hWnd)) { AfxMessageBox(TEXT("Cannot open the Clipboard")); return FALSE; } if (!EmptyClipboard())//清空剪贴板 { AfxMessageBox(TEXT("Cannot empty the Clipboard")); return FALSE;.
2021-11-04 20:10:34
505
原创 CListCtrl图标与复选框使用
1. 首先类向导生成一个 CListCtrl 控件对象 m_listDO2. 添加CImageList对象,并与m_listDO绑定m_imgList.Create(16, 16, ILC_COLOR24, 2, 2);m_imgList.Add(AfxGetApp()->LoadIcon(IDI_OFF));m_imgList.Add(AfxGetApp()->LoadIcon(IDI_ON));m_listDO.SetImageList(&m_imgList, LVS
2021-11-04 20:08:59
553
原创 CMFCStatusBar自定义的颜色无效解决方法
CMFCStatusBar添加消息映射ON_COMMAND_RANGE(ID_START, ID_END, NULL) //indicators[] 里面第一个和最后一个
2021-11-01 14:59:41
206
原创 零基础学Linux操作系统(三)
进程管理1、进程 程序的一次执行过程 资源分配和管理的基本单位2、进程管理的内容:① 监视进程:获取当前系统中各个进程的具体状态信息② 调整进程运行优先级③ 守护进程监视进程1.与进程有关的信息PID(Process ID) 进程号PPID(Parent ID) 父进程的PID号USER/UID 执行该进程的用户名及其UIDTTY 启动该进程的终端PRI(priority) 进程的优先级,数字越大表示优先级越低NICE 进...
2021-08-31 21:59:05
1142
原创 零基础学Linux操作系统(二)
Linux文件1. 文件概念广义: 一切皆文件狭义: 磁盘文件Linux中文件是一个字符流序列, 包括: 普通文件(文本文件、可执行文件) 目录 磁盘、键盘、打印机、网卡等设备2. 文件的成分索引节点( i结点) : 文件的信息:文件权限、文件主、文件大小、存放位置、建立日期等 文件使用的一个标识符,同一个文件有相同的inode号数据: 文件的实际内容查看文件的i节结号: ls -i3. 文件名 文件名最长可多达255个字符, 除斜线/和空字符以外,文件名可以包含...
2021-08-29 23:03:48
1414
2
原创 零基础学Linux操作系统(一)
Linux系统的登录方式(1) 图形界面登录图形界面也称X窗口,是系统安装时的默认登录模式;图形化界面一般包括GNOME和KDE, 可以选择安装(2) 文本模式登录要Linux启动直接进入字符界面,可以编辑 /etc/inittab 文件,找到 id:5:initdefault: 这行后,将5修改为3,吧运行级修改成完全多用户模式(标准运行级,文本字符界面)[root@localhost~]#[登录的用户名@登录的计算机名~]提示符(3) 模式切换X窗口下切换到字符终端Alt + Ct
2021-08-28 14:20:58
718
原创 获取字符串的显示宽度和高度
1, 获取系统字符的宽度和高度 hdc = GetDC (hwnd) ; GetTextMetrics (hdc, &tm) ; cxChar = tm.tmAveCharWidth ; cyChar = tm.tmHeight + tm.tmExternalLeading ;2, 获取字符串的宽度和高度BOOL GetTextExtentPoint32( HDC hdc, // handle to DC LPCTSTR lpStri...
2021-07-07 15:50:18
661
原创 通过ToolHelp函数遍历系统所有进程
void GetTheProcess(){ //PROCESSENTRY32结构体,保存进程具体信息 PROCESSENTRY32 pe32; pe32.dwSize = sizeof(pe32); //获得系统进程快照的句柄 HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) { return ; } //首.
2021-07-07 15:47:08
210
原创 for_each用法
函数原型UnaryProc for_each (InputIterator beg, InputIterator end, UnaryProc op)*调用 op(elem), [begin, end)区间的每一个元素*返回遍历执行后的op副本*op可能修改元素, 与transform算法相似*op的返回值将被忽略*算法复杂度: 线性, 每个元素都调用一次op...
2021-06-05 10:35:28
1904
原创 CreateProcess打开EXE执行文件
STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si, sizeof(si));si.cb = sizeof(si);ZeroMemory(&pi, sizeof(pi));CreateProcess(NULL, "可执行文件EXE的路径名称", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);STARTUPINFO 可指定打开文件后如何显示,PROCESS_INFO..
2021-04-28 10:28:53
1093
原创 Win32多线程 -- 进程通讯
1. 进程通讯 WM_COPYDATA如果你尝试在进程A的线程中把一个 LPARAM (内含一个指针)交给进程B,进程B有可能在使用这一指针时当掉。问题出在这个指针所指的数据乃位于进程A的地址空间中。进程B不可能看到这个地址空间,所以这个指针会被以进程B的地址空间解释之。那当然是牛头不对马嘴了。为解决这个问题, Windows 定义了一个消息,名为 WM_COPYDATA ,专门用来在线程之间搬移数据--不管两个线程是否同属一个进程。和其他所有的消息一样,你必须指定一个窗口,也就是一个 HWND ,当
2021-03-31 23:52:03
322
原创 CListCtrl子项图标和勾选
设置子项图标设置列表的扩展属性, 必须是LVS_REPORT类型的列表m_listIn.SetExtendedStyle(m_listIn.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_SUBITEMIMAGES | LVS_EX_GRIDLINES);创建图像列表m_imgList.Create(16, 16, ILC_COLOR4, 0, 1);m_imgList.Add(LoadIcon(AfxGetInstanceHandle(),
2021-03-30 16:27:07
347
原创 Win32多线程 -- MFC中的线程
警告如果要在 MFC 程序中产生一个线程, 而该线程将调用 MFC 函数或使用 MFC 的任何数据,那么你必须以 AfxBeginThread或CWinThread::CreateThread来产生这些线程。worker 线程和 GUI 线程Win32 两者一般而言都是以 CreateThread 或 _beginthreadex 开始其生命. 如果线程调用 GetMessage 或 CreateWindow 之类函数, 消息队列便会产生, 而 worker 线程也就摇身一变成了 GUI 线程(或称
2021-03-01 12:04:05
332
原创 stdio与Win32 Console API
stdio的格式化函数 sprintf, Win32对应地提供了 wsprinf, wsprintf 还细分为 _wsprintfA 和 _wsprintfW。stdio提供的三个标准流:stdin, stdout, stderr,Console API可以通过 GetStdHandle 获取到。HANDLE GetStdHandle( DWORD nStdHandle // STD_INPUT_HANDLE 对应 stdin // STD_OUT...
2021-03-01 11:57:50
129
原创 Win32多线程 -- C Run-time Librariy
Win32多线程程序建议:1. 以 _beginthreadex 取代 CreateThread2. 以 _endthreadex 取代 ExitThread3. 不要使用 _beginthread 和 _endthread4. 不要在MFC程序中使用 _beginthread 或 CreateThreadWindows区分单线程版本和多线程版本的 C Run-time Librariy , 多线程版本要使用 _beginthreadex 函数做初始化。如果任何线程中使用到了 C Run-ti.
2021-03-01 11:56:37
322
原创 Win32多线程 -- 异步IO(overlapped IO)
一. 异步(overlapped) IO之被激发的File Handle1.1Win32 IO操作函数Win32 之中有三个基本的函数用来执行 I/O CreateFile() ReadFile() WriteFile()没有另外哪一个函数用来关闭文件,只要调用 CloseHandle 即可。CreateFile 可以用来打开各式各样的资源,包括(但不限制于): -> 文件(硬盘、软盘、光盘或其他) -> 串行口和并行口(serial a...
2021-03-01 11:48:25
1571
原创 Win32多线程 -- 线程控制(暂停/继续/终止)
1. 关闭/终止 线程BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode // 该线程的结束代码, GetExitCodeThread获取的值);如果函数成功, 则传回TRUE. 如果失败, 则传回FALSE. GetLastError()可以获知更多细节.2.暂停/挂起 线程DWORD SuspendThread( HANDLE hThread);如果函数成功, 传回线程目前的挂起次数. 如果失败...
2021-03-01 11:18:48
1659
原创 Win32多线程 -- 进程优先权与线程优先级
1. 优先权类别(Priority Class)"优先权类别"是进程的属性之一。这个属性可以表现出这一进程和其他进程比较之下的重要性。 Win32 提供四种优先权类别,每一个类别对应一个基本的优先权层级。下表展示了四个优先权类别。优先权类别(Priority Classes) 基础优先权值(base priority) HIGH_PRIORITY_CLASS 13 IDLE_PRIORITY_CLASS 4 NORMAL_PRIORITY_CLASS 7 or 8
2021-03-01 11:12:39
1173
C++11编译C++17代码遇到问题, if constexpr,应该怎么修改
2023-10-27
C# WinForm 画图 缩放后线宽怎么才能保持不变
2023-10-12
Visual studio 2022 C# GUI界面 点击控件 鼠标光标不停闪烁
2023-09-27
关于QDockWidget停靠位置的问题
2022-02-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人