
vc
爱上解放晚晚
开启大神之路
展开
-
MFC中使用opengl绘制图像黑屏闪烁
创建DC与RC关联的函数,需要与显示函数放在一个线程里。原创 2021-12-17 13:57:49 · 369 阅读 · 0 评论 -
Opengl显图像
#define _CRT_SECURE_NO_WARNINGS;#include<glut.h>#define FileName "bliss.bmp"static GLint imagewidth;static GLint imageheight;static GLint pixellength;static GLubyte* pixeldata;#include<stdio.h>#include<stdlib.h>void display(v.原创 2021-12-07 09:34:45 · 1060 阅读 · 0 评论 -
最小化或者没显示时不刷新图像
if (!::IsWindow(GetSafeHwnd()) || !::IsWindowVisible(GetSafeHwnd()) || ::IsIconic(GetSafeHwnd())) { return;//最小化或者没显示时不刷新图像。 }原创 2021-11-30 14:04:34 · 325 阅读 · 0 评论 -
区域切图实例
/* //切图区域 s_Image_Info &stDispImgInfo = spImgInfo->m_stDispInfo; s_Image_Info stCutImgInfo; CRect rtImgRegion = theDataService.GetModelAnalyzer()->GetCurtImgRegion(m_iWorkStationNo); nWidth = rtImgRegion.Width(); nHeight = rtImg原创 2021-11-29 13:59:03 · 215 阅读 · 0 评论 -
Unicode下字符转换
当使用unicode字符集进行编译的时候,string、wstring、CString三者是有显著区别的。以下讨论均指在unicode字符集下。特点:string和wstring是C++标准的两个类型,CString是MFC的专用类型string:其表示的字符串是多字节字符集,也就是说,其表示的字符串中的字符,英文字母和半角标点均只占用一个字节,而汉字和全角标点均占用两个字节;wstring:其表示的字符串是unicode字符集,其表示的任何字符(不论英文字符还是汉字或者是标点)均占用2个字节;C转载 2021-11-23 11:25:31 · 291 阅读 · 0 评论 -
鼠标光标、截获系统消息、获取鼠标坐标
1.改变鼠标光标形状IDC_APPSTARTING 标准的箭头和小沙漏IDC_ARROW 标准的箭头IDC_CROSS 十字光标IDC_HELP 标准的箭头和问号IDC_IBEAM 工字光标IDC_NO 禁止圈IDC_SIZEALL 四向箭头指向东、西、南、北IDC_SIZENESW 双箭头指向东北和西南IDC_SIZENS 双箭头指向南北IDC_SIZENWSE 双箭头指向西北和东南IDC_SIZEWE 双箭头指向东西IDC_UPARROW 垂直箭头IDC_WAIT 沙漏Set原创 2021-10-19 11:21:59 · 334 阅读 · 0 评论 -
MFC阻态模式下出现的坑
1.关闭窗口时,有时候domodel后的代码不会继续执行;void CDlgAutoCodeSetting::ShowDlgDomodel(WindowHandle &pHandle, IntoExec funIntoExec, CDHCodeCheckSet* pCodeSeter){ CodeAutoParamDlg *pCodeAutoParamDlg = new CodeAutoParamDlg(); pCodeAutoParamDlg->InitCodeDlg(pHandle原创 2021-10-02 08:53:22 · 192 阅读 · 0 评论 -
Windows API函数大全
Windows API函数大全,从事软件开发的朋友可以参考下1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一转载 2021-09-14 14:19:53 · 237 阅读 · 0 评论 -
c++高级编程
https://www.w3cschool.cn/cpp/cpp-dynamic-memory.html原创 2021-09-14 10:31:21 · 789 阅读 · 0 评论 -
QT接收MFC的消息注意事项
1.“Camera param setting” 代表的是Title名称CWnd *pWnd = CWnd::FindWindow(NULL, _T("Camera param setting")); if (pWnd == NULL) { AfxMessageBox(_T("no find DataRecv")); return; }2.与QT的Title对应setWindowTitle("Camera param setting");4.实现代码MFCvoid CICPWr原创 2021-08-25 11:14:38 · 566 阅读 · 0 评论 -
C++学习博客资源
https://blog.51cto.com/u_15178976/2787867原创 2021-08-19 13:26:30 · 85 阅读 · 0 评论 -
读书笔记:提高C++性能的编程技术
第1章 跟踪范例1.1 关注点本章引入的实际问题为:定义一个简单的Trace类,将当前函数名输出到日志文件中。Trace对象会带来一定的开销,因此在默认情况下不会开启Trace功能。问题是:怎么设计Trace类,使得在不开启Trace功能时引入的开销最小。1.2 使用状态变量开关功能用宏来开关Trace功能很简单,在不开启时开销完全没有:#ifdef TRACETrace trace(“aaa”);#endif缺点是每次开关都需要重新编译。使用状态变量的话有一定的运行时开销,但能保证灵活性转载 2021-07-24 21:33:29 · 413 阅读 · 0 评论 -
拷贝内存操作
//memcpy(info.pImageBuf, pImgBufR, stNewGrabImg.nImageWidth * stNewGrabImg.nImageHeight); //memcpy(info.pImageBuf + stNewGrabImg.nImageWidth * stNewGrabImg.nImageHeight, pImgBufG, stNewGrabImg.nImageWidth * stNewGrabImg.nImageHeight); //m...原创 2021-07-13 10:31:10 · 201 阅读 · 0 评论 -
VC下的string转化为QString乱码的解决方案
有效方案sCodeTabStruct.name = QString::fromLocal8Bit(pAlgParamSet->pro.name.c_str());原创 2021-06-17 19:44:55 · 176 阅读 · 0 评论 -
vc下载社区
https://docs.microsoft.com/zh-cn/visualstudio/productinfo/vs2017-system-requirements-vs原创 2021-06-12 16:11:26 · 138 阅读 · 0 评论 -
C++高效编程
这是对C++高效编程的一个总结, 很有指导作用.一、#include “filename.h”和#include <filename.h>的区别#include “filename.h”是指编译器将从当前工作目录上开始查找此文件#include <filename.h>是指编译器将从标准库目录中开始查找此文件二、头文件的作用加强安全检测通过头文件可能方便地调用库功能,而不必关心其实现方式三、* , &修饰符的位置int *i,j; // better for转载 2021-06-11 18:12:18 · 459 阅读 · 0 评论 -
绑定非静态成员变量遇到的深坑
typedef std::function<BOOL(const s_InspectInfo &, HObject &)> FunAlgorithmImageAndRegion; //算法分析typedef std::function<void()> FunFreeAlgorithmImageAndRegion; //释放算法分析typedef std::function<void(原创 2021-06-04 14:13:21 · 170 阅读 · 0 评论 -
MFC中弹出消息框
#include<windows.h>#include<cstdio> int main(){ int x; x=MessageBox(GetForegroundWindow(),"【标题】","【要说的话】",1); printf("%d\n",x); x=MessageBox(GetForegroundWindow(),"【标题】","【要说的话】",2); printf("%d\n",x); x=MessageBox(GetForegroundWindow(转载 2021-06-04 13:36:17 · 1730 阅读 · 0 评论 -
回调函数一
一直以来都被回调函数的定义给整蒙了。最近又仔细学了会,感觉回调函数,我认为就是将一个函数指针A作为参数传入另外一个函数B,然后在函数B中调用函数A。 普通回调 具体先看一个简单的例子:#include<stdio.h> void printWelcome(int len){ printf("welcome -- %d\n", len);} void printGoodbye(int len){ printf("byebye-- %d\n转载 2021-06-04 11:08:54 · 95 阅读 · 0 评论 -
Mfc消息响应
ON_NOTIFY_RANGE ,(注意TRBN_THUMBPOSCHANGING,滑动条位置改变)ON_NOTIFY_RANGE(TRBN_THUMBPOSCHANGING, IDC_SLIDER_SEARCHY, IDC_SLIDER_EDGEGRAY, OnScrollFun)void OnScrollFun(UINT nID, NMHDR *pNotifyStruct, LRESULT *result){ if(nID == IDC_SLIDER_MATCHTHRESH) { .原创 2021-05-26 15:30:35 · 489 阅读 · 0 评论 -
共享内存传输结构体数据
共享内存主要是通过映射机制实现的。 Windows 下进程的地址空间在逻辑上是相互隔离的,但在物理上却是重叠的。所谓的重叠是指同一块内存区域可能被多个进程同时使用。当调用 CreateFileMapping 创建命名的内存映射文件对象时,Windows 即在物理内存申请一块指定大小的内存区域,返回文件映射对象的句柄 hMap。为了能够访问这块内存区域必须调用 MapViewOfFile 函数,促使 Windows 将此内存空间映射到进程的地址空间中。当在其他进程访问这块内存区域时,则必须使用OpenFi转载 2021-05-25 14:02:42 · 1213 阅读 · 0 评论 -
防止程序重复启动
QT版最近在做一个项目,添加了一个功能:防止一个程序能够重复启动。包括Windows平台和Linux平台,其中Q_OS_WIN32宏用来表示编译运行的目标平台是windows,Q_OS_LINUX则标示目标为linux。实现的思想是:对windows和linux分别采取了全局互斥变量和文件锁的方法。————————————————版权声明:本文为优快云博主「m沉默01」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn转载 2021-05-24 16:59:18 · 492 阅读 · 0 评论 -
调用.exe遇到的问题
std::wstring wstrApp;//打开窗口wstrApp = _T("D:\\wwwCoding\\DHCodeCheckRun\\DHCodeCheck.exe");ShellExecute(NULL, _T("open"), wstrApp.c_str(), NULL, NULL, SW_SHOWNORMAL);//打开窗口ShellExecute(this->m_hWnd, _T("open"), _T("D:\\wwwCoding\\DHCodeCheckRun\\D原创 2021-05-24 15:42:46 · 106 阅读 · 0 评论 -
类型转换
1.reinterpret_cast<>内存拷贝类型转换,不安全2.dynamic_cast<>常用于多态类型转换,如将子类转化为父类,进行安全性检查,若不可以转化,赋值03.const_cast<>用与将const变量转化为非const, 去除其const属性4.static_cast<>可以理解为默认的数据转化类型,也可将非const变量转化为const变量NULL是宏定义0,可以赋值给指针,也可以赋值给变量nullptr带表空指针,只原创 2021-05-21 09:15:55 · 81 阅读 · 0 评论 -
QT与VC通过共享内存通信
VC端void CSharedMemoryDlg::OnBnClickedOk(){ // TODO: 在此添加控件通知处理程序代码 //CDialogEx::OnOK(); m_text = "欢迎使用!"; UpdateData(false); //1.先创建一个文件 CreateFile,即共享内存的实体 HANDLE hFile = CreateFile(TEXT("E:\zj.dat"), GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_原创 2021-05-13 17:29:29 · 944 阅读 · 0 评论 -
QT进程通信-VC共享内存
发送端#include <stdio.h>#include <windows.h>#include <iostream>#include <string> using namespace std;int main() { int nRetCode = 0; char szBuffer[] = "Shine"; HANDLE hMapping = CreateFileMapping(NULL,NULL,PAGE_R原创 2021-05-13 15:30:27 · 321 阅读 · 0 评论 -
QT进程通信(二)——VC共享内存
#include "windows.h"#include "stdio.h"#pragma warning(disable:4996)void CSharedMemoryDlg::OnBnClickedOk(){ // TODO: 在此添加控件通知处理程序代码 //CDialogEx::OnOK(); //1.先创建一个文件 CreateFile,即共享内存的实体 HANDLE hFile = CreateFile(TEXT("E:\zj.dat"), GENERIC_READ | GE原创 2021-05-13 14:42:07 · 424 阅读 · 0 评论 -
C++中判断数据类型的函数
可以利用库函数typeid,来变量是否为整型变量;#include <typeinfo.h>int a;if (typeid(a) == typeid(int))原创 2021-04-23 17:41:56 · 5441 阅读 · 0 评论 -
c++常用设计
设计模式1、工厂模式在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式作为一种创建模式,一般在创建复杂对象时,考虑使用;在创建简单对象时,建议直接new完成一个实例对象的创建。1.1、简单工厂模式主要特点是需要在工厂类中做判断,从而创造相应的产品,当增加新产品时,需要修改工厂类。使用简单工厂模式,我们只需要知道具体的产品型号就可以创建一个产品。缺点:工厂类集中了所有产品类的创建逻辑,如果产品量较大,会使得工厂类变的非常臃肿。/*关键转载 2021-04-20 10:27:04 · 156 阅读 · 0 评论 -
UNICODE下类型转化
//int 转化为CString CString strData; int iSize = vNames.size(); strData.Format(_T("%d"), iSize); AfxMessageBox(strData);原创 2021-04-13 17:52:29 · 80 阅读 · 0 评论 -
C++创建线程
#include <iostream>#include <thread>#include <list>using namespace std;class Seeking{public: void makeFriend() { for(int i=0; i<10000; i++) { mm.push_back(i); } } void breakUp() { for(int i=0; i<10000; i++.原创 2021-04-13 09:53:53 · 318 阅读 · 0 评论 -
CString转string (unicode下)
1.包含头文件#include <atlbase.h>#include <atlconv.h>2.在使用前加上,注意,不是在文件都定义。 USES_CONVERSION;3.示例代码string toString(CString cs) {#ifdef _UNICODE //如果是unicode工程 USES_CONVERSION; std::string str(W2A(cs)); return原创 2021-04-12 16:22:13 · 618 阅读 · 0 评论 -
VC如何打包文件
添加链接描述转载 2021-04-08 17:04:42 · 229 阅读 · 0 评论 -
使用VC自带的程序查看软件需要的Dll
原创 2021-04-08 15:08:04 · 261 阅读 · 0 评论 -
在txt中打印运行时间
#include <fstream>#include <time.h> #include <stdio.h> //print check time ofstream oFile; //定义文件输出流 oFile.open("output.txt", ios::out | ios::app); static int iCount = 0; double start, end, cost; start = clock(); /* 耗时程序 *原创 2021-04-08 10:01:38 · 105 阅读 · 0 评论 -
VC如何发布Release程序
网上有很多人提到关于怎样发布MFC程序,但是太过于零散。为了让程序可方便得在其他电脑上运行,且不需要到处复制dll文件到windows里(只需要拷贝exe与pdb文件即可) ,这里将过程总结到一起,希望这样能节省大家的时间。1.右键工程->属性:配置,选择release;2.配置属性->常规->配置类型:应用程序(exe);-> MFC的使用:在静态库中使用MFC;->字符集:使用多字节字符集;(不一定,只是为了让字符操作符合早期版本,不影响发布);3.C/C+±&g原创 2021-04-07 17:10:15 · 1810 阅读 · 0 评论 -
线程汇总
1.在类中创建线程CTaskConsumer::CTaskConsumer() : m_pProcThread(NULL), m_bStop(false), m_waitTaskCnt(0){ m_pProcThread = new boost::thread(&CTaskConsumer::LoopRun, this);}`原创 2021-04-01 14:49:51 · 86 阅读 · 0 评论 -
双线程访问LIst
1.List是线程不安全的2.在回调中对List添加锁3.在显示线程运行将要结束时,清空List数据,放在显示线程中,避免List清除但是线程还在读写4.指针释放时,一定要注意该指针是否在其它线程中使用,如果使用必须保证该线程结束,再释放,否则会报错...原创 2021-03-31 17:46:35 · 293 阅读 · 0 评论 -
使用Modbus slave和Modbus poll调试小结
1.使用虚拟串口助手创建两个虚拟连接,如COM3和COM4;2.自己编写的软件作为主站,slav作为从站;3.主站使用COM3,从站使用COM4;4.主站和从站设置一样的基本参数,包括ID号;5.如果调试bool型,需要设置slave的显示类型是bool,同理Int和float;6.主站对应的地址//写单个线圈05:bool ret = false;ret = m_modbus->writeBit(addressOffset, true);//写单个保持寄存器06:ret = m原创 2021-03-25 14:10:37 · 1688 阅读 · 0 评论 -
关于如何实现编辑框单击时自动选中全部内容的方法GetDlgItem(IDC_EDIT)->PostMessage(EM_SETSEL, 0, -1);
我们在利用编辑框做输入时,经常需要修改输入内容,希望鼠标单击时能够自动选中当前的内容,以便可以直接进入输入新的内容,而不用先把原来内容删除掉再输入新的内容。实现这个功能有两个方法:一、利用标准编辑框控件的SETFOCUS消息,做一个消息函数,在函数内部给编辑框发送选中文本的消息EM_SETSEL。具体做法是:(一)给编辑框增加一个控件CEdit类型的变量,这样便于访问编辑框,设为m_ed,增加变量时Category选择control,variable选择CEdit。再在编辑框右键单击,选择Class W转载 2021-03-22 17:16:04 · 928 阅读 · 0 评论