- 博客(45)
- 资源 (2)
- 收藏
- 关注
原创 MFC 动态创建多个控件及消息响应函数
1、在.h文字中声明控件按钮的ID#define IDC_D_BTN 100002、在类的OnInitDialog()函数中动态创建按钮(建立按钮对象时最好建立对象的指针)CButton* btn = new CButton[5]; DWORD dwStyle = WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON; for(int i = 0; i < 5; i++){ btn[i].Create(_T("动态按钮"), dwStyle,CRec
2020-09-04 13:51:24
1043
原创 MFC 设置static(标签)控件背景透明
1、设置控件的属性Transparent 为True2、重载OnCtlColor函数在该函数体中加入以下代码: if(pWnd->GetDlgCtrlID() == IDC_XXXX) //IDC_DEVICE_STAT为Static控件的ID { pDC->SetBkMode(TRANSPARENT); //设置透明属性 return (HBRUSH)GetStockObject(NULL_BRUSH); //返回空画刷
2020-09-03 16:28:27
1257
原创 MFC 自定义按钮实现文字和图片同时显示效果
添加类CImgButton,继承自CBitmapButton。选择CImgButton类的property,通过重载DrawItem(不是Message下的WM_DRAWITEM,其响应函数OnDrawItem不会被调用。),实现在bitmap上写入文字的功能。.h文件代码#pragma once#include <afxext.h>class CImgButton : public CBitmapButton{ //DECLARE_DYNAMIC(CImgButton)pub
2020-08-25 10:40:00
1709
原创 MFC 遍历文件夹下所有子文件夹并将其名称并将其名称加入容器
在COMBOX控件中添加文件夹下所有子文件夹名称 //设置数据库路径 CString Datapath; Datapath= strExePath + _T("\\XX文件夹\\XXX文件夹\\"); //遍历该文件夹,并添加数据 CFileFind finder; BOOL isNotEmpty = finder.FindFile((Datapath + _T("*.*")));//总文件夹,开始遍历 while (isNotEmpty) { isNotEmpty = finder.
2020-08-04 09:39:46
741
原创 MFC 利用CBitmapButton实现按钮动态效果
1、在资源编辑器中添加一个按钮,并把它的Owner Draw属性设为true。2、准备4张图片(只准备用到的也可以),添加到资源管理器中。正常状态时的按钮图片 的ID设为"BITMAP_BUTTONU"鼠标按下时的按钮图片 的ID设为"BITMAP_BUTTOND"鼠标点击过后的按钮图片 的ID设为"BITMAP_BUTTONF"按钮失效后的图片 的ID设为"BITMAP_BUTTONS"其实命名规则就是 “按钮的Caption属性+U或D或F或S”注意:一
2020-08-03 17:24:38
659
原创 MFC 打开文件对话框、获取文件修改时间等信息
void CFileTimeDlg::OnBUTTONOpenFile(){char filter[] = "所有文件(*.*)|*.*||";//设置文件类型过滤CFileDialog fdlg(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, filter);//文件对话框fdlg.m_ofn.lpstrInitialDir = "c:\\"; //设置初始文件目录if(fdlg.DoModal() == IDOK) //弹出对
2020-07-29 16:30:25
968
1
原创 MFC中设置控件大小与位置
SetWindowPos()函数使用更灵活,多用于只修改控件位置而大小不变或只修改大小而位置不变的情况:BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);第一个参数我不会用,一般设为NULL;x、y控件位置;cx、cy控件宽度和高度;nFlags常用取值:SWP_NOZORDER:忽略第一个参数;SWP_NOMOVE:忽略x、y,维持位置不变;SWP_NOSIZE:忽略cx、
2020-07-28 17:12:38
1833
原创 MFC中字体&字号修改
方法一:①先在.h中添加相关变量 //Tab相关变量 CTabCtrl m_tab; CFont m_Font; CSize szTab; ②标签尺寸及字体设置 szTab.cx = 150; szTab.cy = 40; m_tab.SetItemSize(szTab); m_Font.CreateFont(20, 20, 0, 0, 10, TRUE, 0, 0, 1, 0, 0, 0, 0, _T("微软雅黑")); m_tab.SetFont(&m_Font
2020-07-27 16:13:48
651
原创 MFC 显示系统时间
CString str; CTime tm; tm = CTime::GetCurrentTime(); str = tm.Format("现在时间:%Y年%m月%d日 %X"); //显示时间 GetDlgItem(IDC_STATIC_TIME)->SetWindowText(str);
2020-07-23 16:26:28
289
原创 MFC Picture control 控件显示图片
void COpticDisplayDlg::ShowLensPic(CString imgPath){ int height, width; CRect rect;//定义矩形类 CRect rect1; CImage image; //创建图片类 image.Load(imgPath); height = image.GetHeight(); width = image.GetWidth(); pic_display.GetClientRect(&rect); //获得p
2020-07-23 16:05:14
1452
1
原创 MFC 保存当前窗口为图片
void CTestDlg::OnBnClickedButtonSave(){ // TODO: 在此添加控件通知处理程序代码 //保存窗口图片 HWND hwnd = this->GetSafeHwnd(); HDC hDC = ::GetWindowDC(hwnd);//获取DC RECT rect; ::GetClientRect(hwnd, &rect);//获取屏幕大小 HDC hDCMem = ::CreateCompatibleDC(hDC
2020-07-22 17:37:01
1052
原创 MFC 鼠标悬停出现提示
1、在.h 中定义 CToolTipCtrl m_Ttc;//消息框变量 void SetToolTipsMsgMap();//消息框设置函数2、在cpp文件中实现SetToolTipsMsgMap()函数void CTestDlg2::SetToolTipsMsgMap(){ //初始化提示框 EnableToolTips(true); m_Ttc.Create(this);// m_Ttc.SetDelayTime(1000); //设置延迟 m_Ttc.SetTipTextCo
2020-07-22 17:21:16
606
原创 MFC 将数据写入ini文件
void CAboutDlg::OnBnClickedButton9(){ CString strFilePath = "E:\\ConfigInit.ini"; //文件名 CString DefaultFilePath = ".\\DefaultFilePath.ini"; //默认配置文件 BOOL Result1 = WritePrivateProfileString(_T("StudentInfo1"), _T("身份证"),_T("44022520070001"),strFilePat
2020-07-22 17:13:02
499
原创 MFC 实现文件和文件夹的复制
void CAboutDlg::MyCopyDir(CString strSource, CString strTarget){ strTarget += _T("\\"); CreateDirectory(strTarget, NULL); //创建目标文件夹 CFileFind finder;//定义一个本地搜索类 CString strPath; strPath.Format(_T("%s\\*.*"), strSource); //AfxMessageBox(strPath);
2020-07-22 17:08:31
541
原创 MFC 中 Tab标签的使用
1、在.h文件中定义每个表情窗口类 CTestDlg1 m_page1; CTestDlg2 m_page2; CDlg_Electric m_page3; CDialog* pDialog[3];2、在.cpp文件中添加实现①在OnInitDialog()中添加代码 //为Tab Control增加两个页面 m_tab.InsertItem(0, _T("整机设计需求")); m_tab.InsertItem(1, _T("机光信息")); m_tab.InsertItem(1,
2020-07-22 17:00:44
656
原创 Windows编程简介-DX的Windows编程基础
要使用Direct3D API(应用程序编程接口),有必要创建一个带有主窗口的Windows(Win32)应用程序,我们将在其中呈现我们的3D场景。本文可作为使用本机Win32 API编写Windows应用程序的介绍。通俗讲,Win32 API是一组低级函数和结构,以C编程语言向我们公开接口,使我们能够创建Windows应用程序。例如,要定义一个窗口类,我们填写一个Win32 API WNDCLA...
2018-05-04 14:04:03
982
原创 D3DX库的使用&D3DX初始化
自7.0版以来,DirectX随D3DX(Direct3D扩展)库一起提供。该库提供了一组简化的数学运算,纹理和图像操作,网格操作以及着色器操作(例如编译和装配)相关的常见3D图形相关操作的函数,类和接口。也就是说,D3DX包含很多功能,如何你自己实现这些功能将会比较麻烦。我们使用D3DX库,因为它使我们能够专注于更有趣的材料。例如,可以简单调用D3DX函数D3DxiicreateTextur...
2018-05-03 15:38:53
1772
1
转载 《零基础入门深度学习》系列文章(教程+代码)
无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就out了?现在救命稻草来了,《零基础入门深度学习》系列文章旨在讲帮助爱编程的你从零基础达到入门级水平。零基础意味着你不需要太多的数学知识,只要会写程序就行了,没错,这是专门为程序员写的文章。虽然文中会有...
2018-04-27 09:42:24
706
转载 吴恩达视频课程文字版
机器学习和深度学习如何入门?相信很多人都会推荐吴恩达的在线课程。不过,这种视频在线课程也有其弊端,就跟很多人不喜欢微信语音一样,想要在视频中查找和回顾相关的知识点并不方便。于是,以黄海广博士为首的一群机器学习爱好者发起了一个公益性质的项目(http://www.ai-start.com):吴恩达机器学习和深度学习课程的字幕翻译以及笔记整理。近日,这个项目终于接近完成,而且黄海广博士等还...
2018-04-25 22:00:07
603
翻译 14-在DX中建立第一人称相机
本章中,我们设计了一套与你在第一人称游戏中使用的相机相同的系统。该相机系统将会取代我们之前使用的轨道相机系统。学习目标: 1.复习视图空间转换的数学原理。 2.能定义第一人称相机的典型功能。 3.学习如何实现第一人称相机。14.1 视角变换复习视图空间是连接到摄像机的坐标系,如图14.1所示。相机位于正视z轴的原点处,x轴指向相机右侧,y轴指向相机上方。相对于描述世界坐标下场...
2018-04-25 11:14:51
599
1
翻译 23-网格
到目前为止,在本书中,我们已经使用程序生成的网格(例如圆柱体,网格,球体)以及从文件加载的一些简单网格数据(例如,头骨网格)。在这个简短的章节中,我们扩展了我们用来支持材料和其他信息的.m3d格式。在第25章中,我们将再次扩展这种格式以支持角色动画。.m3d格式不是标准的网格格式;它是我们为本书开发的一种格式,可以使网格加载到我们的演示中变得相对简单。工作室通常有他们自己的自定义模型格式,它们...
2018-04-25 09:19:44
807
翻译 22-环境光遮蔽
由于性能的限制,实时照明模型通常不考虑间接光(即从场景中的其他物体反射回来的光)。但是,我们在现实世界中看到的许多光是间接的。在第7章中,我们将环境项引入了照明方程: A=la⊗maA=la⊗maA=l_a \otimes m_a 颜色lalal_a指定表面从光源接收的间接(环境)光的总量。环境材料颜色mamam_a指定表面反射和吸收的入射环境光的量。所有的环境光线都会使物体均匀光亮 - ...
2018-04-25 09:17:16
2705
翻译 21-阴影映射
阴影向观察者指示光线来源,并帮助传达场景中物体的相对位置。本章介绍了基本的阴影映射算法,这是一种在游戏和3D应用中建模动态阴影的流行方法。对于一本介绍性书籍,我们只关注基本阴影映射算法;通过扩展基本阴影映射算法来构建更高级的阴影技术,例如级联阴影贴图[Engel06],它可提供更好的质量结果。 目标: 1.发现基本阴影映射算法。 2.了解投影纹理如何工作。 3.了解关于正射投影。 4.了...
2018-04-24 15:43:31
1754
翻译 20-粒子系统和输出流
在本章中,我们关心的是对一组粒子(通常很小)进行建模的任务,这些粒子的行为都类似但有点随机; 我们称这样的粒子集合为粒子系统。 粒子系统可用于模拟各种各样的现象,如火灾,雨水,烟雾,爆炸,喷水,魔法效果和射弹。 目标: 1.学习如何使用几何着色器和流出功能有效地存储和渲染粒子。 2.了解我们如何使用基本的物理概念使我们的粒子以物理逼真的方式运动。 3.设计灵活的粒子系统框架,可以轻松创建新...
2018-04-24 09:08:32
967
翻译 19-地形渲染
地形渲染的想法是从一个平坦的网格开始(图19.1的顶部)。 然后我们调整顶点的高度(即y坐标),使网格模型平滑地从山到谷的过渡,从而模拟一个地形(图19.1的中间)。 当然,我们应用了一个很好的纹理来渲染沙滩,草地,岩石峭壁和雪山(图19.1的底部)。 目标: 1.了解如何为地形生成高度信息,以便在山谷之间实现平滑过渡。 2.了解如何纹理地形。 3.使用硬件细分来渲染具有连续细节层次的地形...
2018-04-23 14:54:22
1856
1
翻译 18-正态映射和位移映射
在第8章中,我们介绍了纹理映射,它使我们能够将图像中的细节映射到三角形上。但是,我们的法向矢量仍然定义在较粗糙的顶点级别并在三角形内插。作为本章的一部分,我们研究了一种在较高分辨率下指定曲面法线的流行方法。以更高的分辨率指定曲面法线将增加光照细节,但网格几何细节保持不变。位移映射与曲面细分相结合,使我们能够增加网格的细节。 目标: 1.了解我们为什么需要法线贴图。 2.发现如何存储法线贴图。...
2018-04-20 17:49:40
777
翻译 17-立方体贴图
在本章中,我们将研究立方体贴图,这些立方体贴图基本上是以特殊方式解释的六个贴图的数组。 使用立方体贴图,我们可以轻松地构建天空或模型反射。 目标: 1.了解立方体贴图以及如何在HLSL代码中对它们进行采样。 2.发现如何使用DirectX纹理工具创建立方体贴图。 3.了解我们如何使用立方体贴图来模拟反射。 4.了解我们如何使用立方体贴图来渲染球体,以模拟天空和遥远的山脉。立方体映射的...
2018-04-20 15:00:37
911
翻译 16-选取
在本章中,我们遇到了确定用户用鼠标光标选取的3D对象(或基元)的问题(参见图16.1)。换句话说,给定鼠标光标的2D屏幕坐标,我们可以确定投影到该点上的3D对象吗?要解决这个问题,从某种意义上说,我们必须倒退;也就是说,我们通常从3D空间转换到屏幕空间,但是在这里我们从屏幕空间转换回3D空间。当然,我们已经有一个小问题:2D屏幕点不对应于唯一的3D点(即,多于一个3D点可以投影到相同的2D投影窗口...
2018-04-20 10:49:37
539
翻译 15-实例化与视锥裁剪
本章中,我们研究两个主题:实例化和截锥体剔除。实例化是指在场景中多次绘制同一个对象。我们描述了Direct3D的特性,使我们能够以最小的API开销实现实例化。剔除是指通过简单的测试避免绘制全部三角形的过程。 学习目标: 1.学习如何实现硬件实例化。 2.熟悉边界卷,为什么它们有用,如何创建它们以及如何使用它们。 3.发现如何实施视锥体筛选。15.1 HARDWARE INSTANC...
2018-04-18 16:27:23
1486
原创 编写dll对已有dll进行二次封装
问题描述:在别的dll基础上开发,但是没有该dll源码。开发的输出是新的dll给别的程序调用。问题简单总结为编写dll对已有dll进行二次封装。不解释dll是啥。简单讲一下dll的动态调用。 HINSTANCE hDllInst = LoadLibrary("XXX.dll"); // XXX为你所依赖的dll名称 if (hDllInst) { ...
2018-04-03 18:03:58
6103
原创 OpenCV读入图像,设置大小,按键移动图像位置。
欢迎使用Markdown编辑器写博客在OpenCV编写程序实现以下功能:读入图像设置图像大小按键移动图像位置实现代码#include "opencv2/core/core.hpp"#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"#include <...
2018-04-03 16:41:10
1472
原创 VS2015下配置OpenCV
首先OpenCV下载地址: https://opencv.org/releases.html (当然也可以下载源码自己编译,但那是另外一会事情了。)然后安装OpenCV,其实就是解压。这里不再详述。开始配置OpenCV: ① 添加环境变量:添加目录 …..\x64\vc14\bin 到环境变量(注意,这里的X64和VC14要根据你的系统和编译器选择,64位系统选X64,编译器看你...
2018-03-27 21:40:38
539
翻译 第十三章 细分阶段
曲面细分阶段涉及曲面细分几何中涉及的渲染管线中的三个阶段。 简而言之,细分是指将几何细分为更小的三角形,然后以某种方式偏移新生成的顶点。 增加三角形数量的动机是为网格添加细节。 但为什么不创建一个详细的高分辨率网格来开始并完成? 以下是曲面细分的三个原因。1.GPU上的动态LOD。 我们可以根据摄像机与其他因素的距离动态调整网格的细节。 例如,如果网格距离很远,则渲染高分辨率版本会浪费,因为无...
2018-03-01 17:14:05
354
翻译 第十二章 计算着色器
GPU已经过优化,可以处理来自单个位置或顺序位置的大量内存(所谓的“流式操作”); 这与设计用于随机存储器访问的CPU相反[Boyd10]。 而且,由于顶点和像素是独立处理的,所以GPU被设计为大规模并行; 例如,NVIDIA“Fermi”架构支持多达16个流式多处理器,32个CUDA内核,总共512个CUDA内核[NVIDIA09]。显然图形从这种GPU架构中受益,因为架构是为图形设计的。但...
2018-02-27 17:05:16
1940
翻译 第十一章 几何着色器
假设我们不使用细分阶段,几何着色器阶段是位于顶点和像素着色器阶段之间的可选阶段。顶点着色器输入顶点,几何着色器输入整个图元。例如,如果我们绘制三角形列表,则几何着色器程序将为列表中的每个三角形T所执行: for(UINT i = 0; i < numTriangles; ++i) OutputPrimitiveList = GeometryShader(T[i].vertexList);...
2018-02-27 17:04:04
2279
1
翻译 第十章 模板渲染
模板缓冲区是我们可以用来实现一些特殊效果的屏幕外缓冲区。模板缓冲区与后台缓冲区和深度缓冲区具有相同的分辨率,使得模板缓冲区中的第ij个像素与后台缓冲区和深度缓冲区中的第ij个像素相对应。从§4.1.5中回想一下,当一个模板缓冲区被指定时,它被附加到深度缓冲区。顾名思义,模板缓冲区作为一个模板,并允许我们阻止某些像素片段渲染到后台缓冲区。例如实现镜子时,我们需要在镜子的平面上反射一个物体;但是,...
2018-02-27 17:02:02
525
翻译 第九章 混合
观察图9.1 我们开始渲染帧,首先绘制地形,然后是木箱,以便地形和箱子像素位于后台缓冲区。然后,我们使用混合将水面绘制到后部缓冲区,使得水像素与地形混合,并在后部缓冲区中创建像素,以便地形和箱子通过水面显示。在本章中,我们将研究混合技术,它们允许我们将当前正在栅格化的像素(所谓的源像素)与之前栅格化的像素混合(组合)到后台缓冲区(所谓的目标像素)。除此之外,这种技术使我们能够渲染诸如水和玻璃之类的...
2018-02-08 13:42:29
427
翻译 第八章 纹理
我们的Demo变得开始有趣,但真实世界的对象的细节通常比每个顶点颜色可以捕捉到的更多。纹理映射是一种将图像数据映射到三角网格的技术,从而增加场景的细节和真实感。如,我们可以通过在每一边映射一个箱子纹理来构建一个立方体,并把它变成一个箱子(图8.1)。学习目标: 1.了解如何指定映射到三角网格的纹理。 2.了解如何创建和启用纹理。 3.了解如何过滤纹理以创建更平滑的图像。 4.发现如何用...
2018-02-06 15:28:13
848
翻译 第七章 光照
如图7.1左边,一个没加光照的球体,右边一个加光照的球体。可见,左边的球看起来是平的 - 也许它根本不是一个球,而只是一个二维圆。另一方面,右边的球体看上去是3D的-照明和阴影帮助我们感知物体的形状和体积。事实上,我们对世界的视觉感受依赖于光及其与物质的相互作用,因此,产生真实照片的场景的许多问题都与物理上精确的照明模型有关。当然,模型越精确,计算量越大; 因此必须权衡效果和速度。如,用于电影...
2018-02-05 18:00:26
1502
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人